Merge pull request #71 from alainmarcel/alainmarcel-patch-1

Build flatbuffer as a submodule
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..fa78bd5
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "third_party/flatbuffers"]
+	path = third_party/flatbuffers
+	url = https://github.com/google/flatbuffers.git
diff --git a/.travis.yml b/.travis.yml
index e1ae0da..34a5fca 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -28,6 +28,7 @@
     - sudo apt-get install libgoogle-perftools-dev
     - sudo apt-get install python3 python3-dev
     - eval "${MATRIX_EVAL}"
+    - git submodule update --init --recursive
 
 install:
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 771e801..fafa1ea 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -197,6 +197,7 @@
 add_executable(surelog ${surelog_SRC})
 add_dependencies(surelog flatc)
 add_dependencies(surelog antlr4_static)
+add_dependencies(surelog flatbuffers)
 
 add_dependencies(surelog GenerateParser)
 add_dependencies(surelog GenerateSerializer)
@@ -210,5 +211,5 @@
 #)
 
 target_link_libraries(
-  surelog -L${PROJECT_SOURCE_DIR}/dist/ libantlr4-runtime.a dl util m rt pthread
+  surelog -L${PROJECT_SOURCE_DIR}/dist/ libantlr4-runtime.a -L${PROJECT_SOURCE_DIR}/build/third_party/flatbuffers libflatbuffers.a dl util m rt pthread
 )
diff --git a/INSTALL.md b/INSTALL.md
index 74107fd..be04204 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -22,6 +22,8 @@
 
 * Surelog Source code
   * git clone https://github.com/alainmarcel/Surelog.git
+  * cd Surelog
+  * git submodule update --init --recursive
 
 * Build
   * make
diff --git a/Makefile b/Makefile
index f7ba901..8e2017f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,8 @@
 release:
 	mkdir -p build/tests;
 	mkdir -p dist;
-	cd build; cmake ../; make -j 4
-	cd build; ../src/release.tcl "release tcmalloc"
+	cd build; cmake ../ -DCMAKE_BUILD_TYPE=Release; make -j 4
+	cd build; ../src/release.tcl release show_diff
 	cd build; ../tests/regression.tcl mt=0
 
 test:
diff --git a/src/Cache/header_generated.h b/src/Cache/header_generated.h
index 596c8cf..9b9169e 100644
--- a/src/Cache/header_generated.h
+++ b/src/Cache/header_generated.h
@@ -18,7 +18,7 @@
 struct TimeInfo;
 
 struct Header FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
+  enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
     VT_M_SL_VERSION = 4,
     VT_M_FLB_VERSION = 6,
     VT_M_SL_DATE_COMPILED = 8,
@@ -42,16 +42,16 @@
   }
   bool Verify(flatbuffers::Verifier &verifier) const {
     return VerifyTableStart(verifier) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_SL_VERSION) &&
-           verifier.Verify(m_sl_version()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_FLB_VERSION) &&
-           verifier.Verify(m_flb_version()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_SL_DATE_COMPILED) &&
-           verifier.Verify(m_sl_date_compiled()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_FILE_DATE_COMPILED) &&
-           verifier.Verify(m_file_date_compiled()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_FILE) &&
-           verifier.Verify(m_file()) &&
+           VerifyOffset(verifier, VT_M_SL_VERSION) &&
+           verifier.VerifyString(m_sl_version()) &&
+           VerifyOffset(verifier, VT_M_FLB_VERSION) &&
+           verifier.VerifyString(m_flb_version()) &&
+           VerifyOffset(verifier, VT_M_SL_DATE_COMPILED) &&
+           verifier.VerifyString(m_sl_date_compiled()) &&
+           VerifyOffset(verifier, VT_M_FILE_DATE_COMPILED) &&
+           verifier.VerifyString(m_file_date_compiled()) &&
+           VerifyOffset(verifier, VT_M_FILE) &&
+           verifier.VerifyString(m_file()) &&
            verifier.EndTable();
   }
 };
@@ -74,13 +74,13 @@
   void add_m_file(flatbuffers::Offset<flatbuffers::String> m_file) {
     fbb_.AddOffset(Header::VT_M_FILE, m_file);
   }
-  HeaderBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+  explicit HeaderBuilder(flatbuffers::FlatBufferBuilder &_fbb)
         : fbb_(_fbb) {
     start_ = fbb_.StartTable();
   }
   HeaderBuilder &operator=(const HeaderBuilder &);
   flatbuffers::Offset<Header> Finish() {
-    const auto end = fbb_.EndTable(start_, 5);
+    const auto end = fbb_.EndTable(start_);
     auto o = flatbuffers::Offset<Header>(end);
     return o;
   }
@@ -109,30 +109,35 @@
     const char *m_sl_date_compiled = nullptr,
     const char *m_file_date_compiled = nullptr,
     const char *m_file = nullptr) {
+  auto m_sl_version__ = m_sl_version ? _fbb.CreateString(m_sl_version) : 0;
+  auto m_flb_version__ = m_flb_version ? _fbb.CreateString(m_flb_version) : 0;
+  auto m_sl_date_compiled__ = m_sl_date_compiled ? _fbb.CreateString(m_sl_date_compiled) : 0;
+  auto m_file_date_compiled__ = m_file_date_compiled ? _fbb.CreateString(m_file_date_compiled) : 0;
+  auto m_file__ = m_file ? _fbb.CreateString(m_file) : 0;
   return SURELOG::CACHE::CreateHeader(
       _fbb,
-      m_sl_version ? _fbb.CreateString(m_sl_version) : 0,
-      m_flb_version ? _fbb.CreateString(m_flb_version) : 0,
-      m_sl_date_compiled ? _fbb.CreateString(m_sl_date_compiled) : 0,
-      m_file_date_compiled ? _fbb.CreateString(m_file_date_compiled) : 0,
-      m_file ? _fbb.CreateString(m_file) : 0);
+      m_sl_version__,
+      m_flb_version__,
+      m_sl_date_compiled__,
+      m_file_date_compiled__,
+      m_file__);
 }
 
 struct Error FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
+  enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
     VT_M_LOCATIONS = 4,
     VT_M_ERRORID = 6
   };
-  const flatbuffers::Vector<flatbuffers::Offset<Location>> *m_locations() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<Location>> *>(VT_M_LOCATIONS);
+  const flatbuffers::Vector<flatbuffers::Offset<SURELOG::CACHE::Location>> *m_locations() const {
+    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<SURELOG::CACHE::Location>> *>(VT_M_LOCATIONS);
   }
   uint32_t m_errorId() const {
     return GetField<uint32_t>(VT_M_ERRORID, 0);
   }
   bool Verify(flatbuffers::Verifier &verifier) const {
     return VerifyTableStart(verifier) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_LOCATIONS) &&
-           verifier.Verify(m_locations()) &&
+           VerifyOffset(verifier, VT_M_LOCATIONS) &&
+           verifier.VerifyVector(m_locations()) &&
            verifier.VerifyVectorOfTables(m_locations()) &&
            VerifyField<uint32_t>(verifier, VT_M_ERRORID) &&
            verifier.EndTable();
@@ -142,19 +147,19 @@
 struct ErrorBuilder {
   flatbuffers::FlatBufferBuilder &fbb_;
   flatbuffers::uoffset_t start_;
-  void add_m_locations(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Location>>> m_locations) {
+  void add_m_locations(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<SURELOG::CACHE::Location>>> m_locations) {
     fbb_.AddOffset(Error::VT_M_LOCATIONS, m_locations);
   }
   void add_m_errorId(uint32_t m_errorId) {
     fbb_.AddElement<uint32_t>(Error::VT_M_ERRORID, m_errorId, 0);
   }
-  ErrorBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+  explicit ErrorBuilder(flatbuffers::FlatBufferBuilder &_fbb)
         : fbb_(_fbb) {
     start_ = fbb_.StartTable();
   }
   ErrorBuilder &operator=(const ErrorBuilder &);
   flatbuffers::Offset<Error> Finish() {
-    const auto end = fbb_.EndTable(start_, 2);
+    const auto end = fbb_.EndTable(start_);
     auto o = flatbuffers::Offset<Error>(end);
     return o;
   }
@@ -162,7 +167,7 @@
 
 inline flatbuffers::Offset<Error> CreateError(
     flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Location>>> m_locations = 0,
+    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<SURELOG::CACHE::Location>>> m_locations = 0,
     uint32_t m_errorId = 0) {
   ErrorBuilder builder_(_fbb);
   builder_.add_m_errorId(m_errorId);
@@ -172,16 +177,17 @@
 
 inline flatbuffers::Offset<Error> CreateErrorDirect(
     flatbuffers::FlatBufferBuilder &_fbb,
-    const std::vector<flatbuffers::Offset<Location>> *m_locations = nullptr,
+    const std::vector<flatbuffers::Offset<SURELOG::CACHE::Location>> *m_locations = nullptr,
     uint32_t m_errorId = 0) {
+  auto m_locations__ = m_locations ? _fbb.CreateVector<flatbuffers::Offset<SURELOG::CACHE::Location>>(*m_locations) : 0;
   return SURELOG::CACHE::CreateError(
       _fbb,
-      m_locations ? _fbb.CreateVector<flatbuffers::Offset<Location>>(*m_locations) : 0,
+      m_locations__,
       m_errorId);
 }
 
 struct Location FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
+  enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
     VT_M_FILEID = 4,
     VT_M_LINE = 6,
     VT_M_COLUMN = 8,
@@ -224,13 +230,13 @@
   void add_m_object(uint64_t m_object) {
     fbb_.AddElement<uint64_t>(Location::VT_M_OBJECT, m_object, 0);
   }
-  LocationBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+  explicit LocationBuilder(flatbuffers::FlatBufferBuilder &_fbb)
         : fbb_(_fbb) {
     start_ = fbb_.StartTable();
   }
   LocationBuilder &operator=(const LocationBuilder &);
   flatbuffers::Offset<Location> Finish() {
-    const auto end = fbb_.EndTable(start_, 4);
+    const auto end = fbb_.EndTable(start_);
     auto o = flatbuffers::Offset<Location>(end);
     return o;
   }
@@ -251,7 +257,7 @@
 }
 
 struct TimeInfo FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
+  enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
     VT_M_TYPE = 4,
     VT_M_FILEID = 6,
     VT_M_LINE = 8,
@@ -318,13 +324,13 @@
   void add_m_timePrecisionValue(double m_timePrecisionValue) {
     fbb_.AddElement<double>(TimeInfo::VT_M_TIMEPRECISIONVALUE, m_timePrecisionValue, 0.0);
   }
-  TimeInfoBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+  explicit TimeInfoBuilder(flatbuffers::FlatBufferBuilder &_fbb)
         : fbb_(_fbb) {
     start_ = fbb_.StartTable();
   }
   TimeInfoBuilder &operator=(const TimeInfoBuilder &);
   flatbuffers::Offset<TimeInfo> Finish() {
-    const auto end = fbb_.EndTable(start_, 7);
+    const auto end = fbb_.EndTable(start_);
     auto o = flatbuffers::Offset<TimeInfo>(end);
     return o;
   }
diff --git a/src/Cache/parser_generated.h b/src/Cache/parser_generated.h
index 767195f..718684c 100644
--- a/src/Cache/parser_generated.h
+++ b/src/Cache/parser_generated.h
@@ -17,7 +17,7 @@
 
 struct ParseCache;
 
-MANUALLY_ALIGNED_STRUCT(8) VObject FLATBUFFERS_FINAL_CLASS {
+FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(8) VObject FLATBUFFERS_FINAL_CLASS {
  private:
   uint64_t m_field1_;
   uint64_t m_field2_;
@@ -25,10 +25,7 @@
 
  public:
   VObject() {
-    memset(this, 0, sizeof(VObject));
-  }
-  VObject(const VObject &_o) {
-    memcpy(this, &_o, sizeof(VObject));
+    memset(static_cast<void *>(this), 0, sizeof(VObject));
   }
   VObject(uint64_t _m_field1, uint64_t _m_field2, uint64_t _m_field3)
       : m_field1_(flatbuffers::EndianScalar(_m_field1)),
@@ -45,10 +42,10 @@
     return flatbuffers::EndianScalar(m_field3_);
   }
 };
-STRUCT_END(VObject, 24);
+FLATBUFFERS_STRUCT_END(VObject, 24);
 
 struct DesignElement FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
+  enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
     VT_M_NAME = 4,
     VT_M_FILEID = 6,
     VT_M_TYPE = 8,
@@ -89,7 +86,7 @@
            VerifyField<uint32_t>(verifier, VT_M_TYPE) &&
            VerifyField<uint64_t>(verifier, VT_M_UNIQUEID) &&
            VerifyField<uint32_t>(verifier, VT_M_LINE) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_TIMEINFO) &&
+           VerifyOffset(verifier, VT_M_TIMEINFO) &&
            verifier.VerifyTable(m_timeInfo()) &&
            VerifyField<uint64_t>(verifier, VT_M_PARENT) &&
            VerifyField<uint32_t>(verifier, VT_M_NODE) &&
@@ -124,13 +121,13 @@
   void add_m_node(uint32_t m_node) {
     fbb_.AddElement<uint32_t>(DesignElement::VT_M_NODE, m_node, 0);
   }
-  DesignElementBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+  explicit DesignElementBuilder(flatbuffers::FlatBufferBuilder &_fbb)
         : fbb_(_fbb) {
     start_ = fbb_.StartTable();
   }
   DesignElementBuilder &operator=(const DesignElementBuilder &);
   flatbuffers::Offset<DesignElement> Finish() {
-    const auto end = fbb_.EndTable(start_, 8);
+    const auto end = fbb_.EndTable(start_);
     auto o = flatbuffers::Offset<DesignElement>(end);
     return o;
   }
@@ -159,7 +156,7 @@
 }
 
 struct ParseCache FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
+  enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
     VT_M_HEADER = 4,
     VT_M_ERRORS = 6,
     VT_M_SYMBOLS = 8,
@@ -175,27 +172,27 @@
   const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *m_symbols() const {
     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_M_SYMBOLS);
   }
-  const flatbuffers::Vector<flatbuffers::Offset<DesignElement>> *m_elements() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<DesignElement>> *>(VT_M_ELEMENTS);
+  const flatbuffers::Vector<flatbuffers::Offset<SURELOG::PARSECACHE::DesignElement>> *m_elements() const {
+    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<SURELOG::PARSECACHE::DesignElement>> *>(VT_M_ELEMENTS);
   }
-  const flatbuffers::Vector<const VObject *> *m_objects() const {
-    return GetPointer<const flatbuffers::Vector<const VObject *> *>(VT_M_OBJECTS);
+  const flatbuffers::Vector<const SURELOG::PARSECACHE::VObject *> *m_objects() const {
+    return GetPointer<const flatbuffers::Vector<const SURELOG::PARSECACHE::VObject *> *>(VT_M_OBJECTS);
   }
   bool Verify(flatbuffers::Verifier &verifier) const {
     return VerifyTableStart(verifier) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_HEADER) &&
+           VerifyOffset(verifier, VT_M_HEADER) &&
            verifier.VerifyTable(m_header()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_ERRORS) &&
-           verifier.Verify(m_errors()) &&
+           VerifyOffset(verifier, VT_M_ERRORS) &&
+           verifier.VerifyVector(m_errors()) &&
            verifier.VerifyVectorOfTables(m_errors()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_SYMBOLS) &&
-           verifier.Verify(m_symbols()) &&
+           VerifyOffset(verifier, VT_M_SYMBOLS) &&
+           verifier.VerifyVector(m_symbols()) &&
            verifier.VerifyVectorOfStrings(m_symbols()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_ELEMENTS) &&
-           verifier.Verify(m_elements()) &&
+           VerifyOffset(verifier, VT_M_ELEMENTS) &&
+           verifier.VerifyVector(m_elements()) &&
            verifier.VerifyVectorOfTables(m_elements()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_OBJECTS) &&
-           verifier.Verify(m_objects()) &&
+           VerifyOffset(verifier, VT_M_OBJECTS) &&
+           verifier.VerifyVector(m_objects()) &&
            verifier.EndTable();
   }
 };
@@ -212,19 +209,19 @@
   void add_m_symbols(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> m_symbols) {
     fbb_.AddOffset(ParseCache::VT_M_SYMBOLS, m_symbols);
   }
-  void add_m_elements(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<DesignElement>>> m_elements) {
+  void add_m_elements(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<SURELOG::PARSECACHE::DesignElement>>> m_elements) {
     fbb_.AddOffset(ParseCache::VT_M_ELEMENTS, m_elements);
   }
-  void add_m_objects(flatbuffers::Offset<flatbuffers::Vector<const VObject *>> m_objects) {
+  void add_m_objects(flatbuffers::Offset<flatbuffers::Vector<const SURELOG::PARSECACHE::VObject *>> m_objects) {
     fbb_.AddOffset(ParseCache::VT_M_OBJECTS, m_objects);
   }
-  ParseCacheBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+  explicit ParseCacheBuilder(flatbuffers::FlatBufferBuilder &_fbb)
         : fbb_(_fbb) {
     start_ = fbb_.StartTable();
   }
   ParseCacheBuilder &operator=(const ParseCacheBuilder &);
   flatbuffers::Offset<ParseCache> Finish() {
-    const auto end = fbb_.EndTable(start_, 5);
+    const auto end = fbb_.EndTable(start_);
     auto o = flatbuffers::Offset<ParseCache>(end);
     return o;
   }
@@ -235,8 +232,8 @@
     flatbuffers::Offset<SURELOG::CACHE::Header> m_header = 0,
     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<SURELOG::CACHE::Error>>> m_errors = 0,
     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> m_symbols = 0,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<DesignElement>>> m_elements = 0,
-    flatbuffers::Offset<flatbuffers::Vector<const VObject *>> m_objects = 0) {
+    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<SURELOG::PARSECACHE::DesignElement>>> m_elements = 0,
+    flatbuffers::Offset<flatbuffers::Vector<const SURELOG::PARSECACHE::VObject *>> m_objects = 0) {
   ParseCacheBuilder builder_(_fbb);
   builder_.add_m_objects(m_objects);
   builder_.add_m_elements(m_elements);
@@ -251,21 +248,29 @@
     flatbuffers::Offset<SURELOG::CACHE::Header> m_header = 0,
     const std::vector<flatbuffers::Offset<SURELOG::CACHE::Error>> *m_errors = nullptr,
     const std::vector<flatbuffers::Offset<flatbuffers::String>> *m_symbols = nullptr,
-    const std::vector<flatbuffers::Offset<DesignElement>> *m_elements = nullptr,
-    const std::vector<const VObject *> *m_objects = nullptr) {
+    const std::vector<flatbuffers::Offset<SURELOG::PARSECACHE::DesignElement>> *m_elements = nullptr,
+    const std::vector<SURELOG::PARSECACHE::VObject> *m_objects = nullptr) {
+  auto m_errors__ = m_errors ? _fbb.CreateVector<flatbuffers::Offset<SURELOG::CACHE::Error>>(*m_errors) : 0;
+  auto m_symbols__ = m_symbols ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_symbols) : 0;
+  auto m_elements__ = m_elements ? _fbb.CreateVector<flatbuffers::Offset<SURELOG::PARSECACHE::DesignElement>>(*m_elements) : 0;
+  auto m_objects__ = m_objects ? _fbb.CreateVectorOfStructs<SURELOG::PARSECACHE::VObject>(*m_objects) : 0;
   return SURELOG::PARSECACHE::CreateParseCache(
       _fbb,
       m_header,
-      m_errors ? _fbb.CreateVector<flatbuffers::Offset<SURELOG::CACHE::Error>>(*m_errors) : 0,
-      m_symbols ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_symbols) : 0,
-      m_elements ? _fbb.CreateVector<flatbuffers::Offset<DesignElement>>(*m_elements) : 0,
-      m_objects ? _fbb.CreateVector<const VObject *>(*m_objects) : 0);
+      m_errors__,
+      m_symbols__,
+      m_elements__,
+      m_objects__);
 }
 
 inline const SURELOG::PARSECACHE::ParseCache *GetParseCache(const void *buf) {
   return flatbuffers::GetRoot<SURELOG::PARSECACHE::ParseCache>(buf);
 }
 
+inline const SURELOG::PARSECACHE::ParseCache *GetSizePrefixedParseCache(const void *buf) {
+  return flatbuffers::GetSizePrefixedRoot<SURELOG::PARSECACHE::ParseCache>(buf);
+}
+
 inline const char *ParseCacheIdentifier() {
   return "SLPA";
 }
@@ -280,6 +285,11 @@
   return verifier.VerifyBuffer<SURELOG::PARSECACHE::ParseCache>(ParseCacheIdentifier());
 }
 
+inline bool VerifySizePrefixedParseCacheBuffer(
+    flatbuffers::Verifier &verifier) {
+  return verifier.VerifySizePrefixedBuffer<SURELOG::PARSECACHE::ParseCache>(ParseCacheIdentifier());
+}
+
 inline const char *ParseCacheExtension() {
   return "slpa";
 }
@@ -290,6 +300,12 @@
   fbb.Finish(root, ParseCacheIdentifier());
 }
 
+inline void FinishSizePrefixedParseCacheBuffer(
+    flatbuffers::FlatBufferBuilder &fbb,
+    flatbuffers::Offset<SURELOG::PARSECACHE::ParseCache> root) {
+  fbb.FinishSizePrefixed(root, ParseCacheIdentifier());
+}
+
 }  // namespace PARSECACHE
 }  // namespace SURELOG
 
diff --git a/src/Cache/preproc_generated.h b/src/Cache/preproc_generated.h
index 642a082..bf000e7 100644
--- a/src/Cache/preproc_generated.h
+++ b/src/Cache/preproc_generated.h
@@ -22,8 +22,16 @@
   MacroType_MAX = MacroType_WITH_ARGS
 };
 
-inline const char **EnumNamesMacroType() {
-  static const char *names[] = {
+inline const MacroType (&EnumValuesMacroType())[2] {
+  static const MacroType values[] = {
+    MacroType_NO_ARGS,
+    MacroType_WITH_ARGS
+  };
+  return values;
+}
+
+inline const char * const *EnumNamesMacroType() {
+  static const char * const names[3] = {
     "NO_ARGS",
     "WITH_ARGS",
     nullptr
@@ -32,12 +40,13 @@
 }
 
 inline const char *EnumNameMacroType(MacroType e) {
-  const size_t index = static_cast<int>(e);
+  if (e < MacroType_NO_ARGS || e > MacroType_WITH_ARGS) return "";
+  const size_t index = static_cast<size_t>(e);
   return EnumNamesMacroType()[index];
 }
 
 struct Macro FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
+  enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
     VT_M_NAME = 4,
     VT_M_TYPE = 6,
     VT_M_LINE = 8,
@@ -48,8 +57,8 @@
   const flatbuffers::String *m_name() const {
     return GetPointer<const flatbuffers::String *>(VT_M_NAME);
   }
-  MacroType m_type() const {
-    return static_cast<MacroType>(GetField<int8_t>(VT_M_TYPE, 0));
+  SURELOG::MACROCACHE::MacroType m_type() const {
+    return static_cast<SURELOG::MACROCACHE::MacroType>(GetField<int8_t>(VT_M_TYPE, 0));
   }
   uint32_t m_line() const {
     return GetField<uint32_t>(VT_M_LINE, 0);
@@ -65,16 +74,16 @@
   }
   bool Verify(flatbuffers::Verifier &verifier) const {
     return VerifyTableStart(verifier) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_NAME) &&
-           verifier.Verify(m_name()) &&
+           VerifyOffset(verifier, VT_M_NAME) &&
+           verifier.VerifyString(m_name()) &&
            VerifyField<int8_t>(verifier, VT_M_TYPE) &&
            VerifyField<uint32_t>(verifier, VT_M_LINE) &&
            VerifyField<uint16_t>(verifier, VT_M_COLUMN) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_ARGUMENTS) &&
-           verifier.Verify(m_arguments()) &&
+           VerifyOffset(verifier, VT_M_ARGUMENTS) &&
+           verifier.VerifyVector(m_arguments()) &&
            verifier.VerifyVectorOfStrings(m_arguments()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_TOKENS) &&
-           verifier.Verify(m_tokens()) &&
+           VerifyOffset(verifier, VT_M_TOKENS) &&
+           verifier.VerifyVector(m_tokens()) &&
            verifier.VerifyVectorOfStrings(m_tokens()) &&
            verifier.EndTable();
   }
@@ -86,7 +95,7 @@
   void add_m_name(flatbuffers::Offset<flatbuffers::String> m_name) {
     fbb_.AddOffset(Macro::VT_M_NAME, m_name);
   }
-  void add_m_type(MacroType m_type) {
+  void add_m_type(SURELOG::MACROCACHE::MacroType m_type) {
     fbb_.AddElement<int8_t>(Macro::VT_M_TYPE, static_cast<int8_t>(m_type), 0);
   }
   void add_m_line(uint32_t m_line) {
@@ -101,13 +110,13 @@
   void add_m_tokens(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> m_tokens) {
     fbb_.AddOffset(Macro::VT_M_TOKENS, m_tokens);
   }
-  MacroBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+  explicit MacroBuilder(flatbuffers::FlatBufferBuilder &_fbb)
         : fbb_(_fbb) {
     start_ = fbb_.StartTable();
   }
   MacroBuilder &operator=(const MacroBuilder &);
   flatbuffers::Offset<Macro> Finish() {
-    const auto end = fbb_.EndTable(start_, 6);
+    const auto end = fbb_.EndTable(start_);
     auto o = flatbuffers::Offset<Macro>(end);
     return o;
   }
@@ -116,7 +125,7 @@
 inline flatbuffers::Offset<Macro> CreateMacro(
     flatbuffers::FlatBufferBuilder &_fbb,
     flatbuffers::Offset<flatbuffers::String> m_name = 0,
-    MacroType m_type = MacroType_NO_ARGS,
+    SURELOG::MACROCACHE::MacroType m_type = SURELOG::MACROCACHE::MacroType_NO_ARGS,
     uint32_t m_line = 0,
     uint16_t m_column = 0,
     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> m_arguments = 0,
@@ -134,23 +143,26 @@
 inline flatbuffers::Offset<Macro> CreateMacroDirect(
     flatbuffers::FlatBufferBuilder &_fbb,
     const char *m_name = nullptr,
-    MacroType m_type = MacroType_NO_ARGS,
+    SURELOG::MACROCACHE::MacroType m_type = SURELOG::MACROCACHE::MacroType_NO_ARGS,
     uint32_t m_line = 0,
     uint16_t m_column = 0,
     const std::vector<flatbuffers::Offset<flatbuffers::String>> *m_arguments = nullptr,
     const std::vector<flatbuffers::Offset<flatbuffers::String>> *m_tokens = nullptr) {
+  auto m_name__ = m_name ? _fbb.CreateString(m_name) : 0;
+  auto m_arguments__ = m_arguments ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_arguments) : 0;
+  auto m_tokens__ = m_tokens ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_tokens) : 0;
   return SURELOG::MACROCACHE::CreateMacro(
       _fbb,
-      m_name ? _fbb.CreateString(m_name) : 0,
+      m_name__,
       m_type,
       m_line,
       m_column,
-      m_arguments ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_arguments) : 0,
-      m_tokens ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_tokens) : 0);
+      m_arguments__,
+      m_tokens__);
 }
 
 struct PPCache FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
+  enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
     VT_M_HEADER = 4,
     VT_M_MACROS = 6,
     VT_M_INCLUDES = 8,
@@ -164,8 +176,8 @@
   const SURELOG::CACHE::Header *m_header() const {
     return GetPointer<const SURELOG::CACHE::Header *>(VT_M_HEADER);
   }
-  const flatbuffers::Vector<flatbuffers::Offset<Macro>> *m_macros() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<Macro>> *>(VT_M_MACROS);
+  const flatbuffers::Vector<flatbuffers::Offset<SURELOG::MACROCACHE::Macro>> *m_macros() const {
+    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<SURELOG::MACROCACHE::Macro>> *>(VT_M_MACROS);
   }
   const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *m_includes() const {
     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_M_INCLUDES);
@@ -190,30 +202,30 @@
   }
   bool Verify(flatbuffers::Verifier &verifier) const {
     return VerifyTableStart(verifier) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_HEADER) &&
+           VerifyOffset(verifier, VT_M_HEADER) &&
            verifier.VerifyTable(m_header()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_MACROS) &&
-           verifier.Verify(m_macros()) &&
+           VerifyOffset(verifier, VT_M_MACROS) &&
+           verifier.VerifyVector(m_macros()) &&
            verifier.VerifyVectorOfTables(m_macros()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_INCLUDES) &&
-           verifier.Verify(m_includes()) &&
+           VerifyOffset(verifier, VT_M_INCLUDES) &&
+           verifier.VerifyVector(m_includes()) &&
            verifier.VerifyVectorOfStrings(m_includes()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_BODY) &&
-           verifier.Verify(m_body()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_ERRORS) &&
-           verifier.Verify(m_errors()) &&
+           VerifyOffset(verifier, VT_M_BODY) &&
+           verifier.VerifyString(m_body()) &&
+           VerifyOffset(verifier, VT_M_ERRORS) &&
+           verifier.VerifyVector(m_errors()) &&
            verifier.VerifyVectorOfTables(m_errors()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_SYMBOLS) &&
-           verifier.Verify(m_symbols()) &&
+           VerifyOffset(verifier, VT_M_SYMBOLS) &&
+           verifier.VerifyVector(m_symbols()) &&
            verifier.VerifyVectorOfStrings(m_symbols()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_CMD_INCLUDE_PATHS) &&
-           verifier.Verify(m_cmd_include_paths()) &&
+           VerifyOffset(verifier, VT_M_CMD_INCLUDE_PATHS) &&
+           verifier.VerifyVector(m_cmd_include_paths()) &&
            verifier.VerifyVectorOfStrings(m_cmd_include_paths()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_CMD_DEFINE_OPTIONS) &&
-           verifier.Verify(m_cmd_define_options()) &&
+           VerifyOffset(verifier, VT_M_CMD_DEFINE_OPTIONS) &&
+           verifier.VerifyVector(m_cmd_define_options()) &&
            verifier.VerifyVectorOfStrings(m_cmd_define_options()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_TIMEINFO) &&
-           verifier.Verify(m_timeInfo()) &&
+           VerifyOffset(verifier, VT_M_TIMEINFO) &&
+           verifier.VerifyVector(m_timeInfo()) &&
            verifier.VerifyVectorOfTables(m_timeInfo()) &&
            verifier.EndTable();
   }
@@ -225,7 +237,7 @@
   void add_m_header(flatbuffers::Offset<SURELOG::CACHE::Header> m_header) {
     fbb_.AddOffset(PPCache::VT_M_HEADER, m_header);
   }
-  void add_m_macros(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Macro>>> m_macros) {
+  void add_m_macros(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<SURELOG::MACROCACHE::Macro>>> m_macros) {
     fbb_.AddOffset(PPCache::VT_M_MACROS, m_macros);
   }
   void add_m_includes(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> m_includes) {
@@ -249,13 +261,13 @@
   void add_m_timeInfo(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<SURELOG::CACHE::TimeInfo>>> m_timeInfo) {
     fbb_.AddOffset(PPCache::VT_M_TIMEINFO, m_timeInfo);
   }
-  PPCacheBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+  explicit PPCacheBuilder(flatbuffers::FlatBufferBuilder &_fbb)
         : fbb_(_fbb) {
     start_ = fbb_.StartTable();
   }
   PPCacheBuilder &operator=(const PPCacheBuilder &);
   flatbuffers::Offset<PPCache> Finish() {
-    const auto end = fbb_.EndTable(start_, 9);
+    const auto end = fbb_.EndTable(start_);
     auto o = flatbuffers::Offset<PPCache>(end);
     return o;
   }
@@ -264,7 +276,7 @@
 inline flatbuffers::Offset<PPCache> CreatePPCache(
     flatbuffers::FlatBufferBuilder &_fbb,
     flatbuffers::Offset<SURELOG::CACHE::Header> m_header = 0,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Macro>>> m_macros = 0,
+    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<SURELOG::MACROCACHE::Macro>>> m_macros = 0,
     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> m_includes = 0,
     flatbuffers::Offset<flatbuffers::String> m_body = 0,
     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<SURELOG::CACHE::Error>>> m_errors = 0,
@@ -288,7 +300,7 @@
 inline flatbuffers::Offset<PPCache> CreatePPCacheDirect(
     flatbuffers::FlatBufferBuilder &_fbb,
     flatbuffers::Offset<SURELOG::CACHE::Header> m_header = 0,
-    const std::vector<flatbuffers::Offset<Macro>> *m_macros = nullptr,
+    const std::vector<flatbuffers::Offset<SURELOG::MACROCACHE::Macro>> *m_macros = nullptr,
     const std::vector<flatbuffers::Offset<flatbuffers::String>> *m_includes = nullptr,
     const char *m_body = nullptr,
     const std::vector<flatbuffers::Offset<SURELOG::CACHE::Error>> *m_errors = nullptr,
@@ -296,23 +308,35 @@
     const std::vector<flatbuffers::Offset<flatbuffers::String>> *m_cmd_include_paths = nullptr,
     const std::vector<flatbuffers::Offset<flatbuffers::String>> *m_cmd_define_options = nullptr,
     const std::vector<flatbuffers::Offset<SURELOG::CACHE::TimeInfo>> *m_timeInfo = nullptr) {
+  auto m_macros__ = m_macros ? _fbb.CreateVector<flatbuffers::Offset<SURELOG::MACROCACHE::Macro>>(*m_macros) : 0;
+  auto m_includes__ = m_includes ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_includes) : 0;
+  auto m_body__ = m_body ? _fbb.CreateString(m_body) : 0;
+  auto m_errors__ = m_errors ? _fbb.CreateVector<flatbuffers::Offset<SURELOG::CACHE::Error>>(*m_errors) : 0;
+  auto m_symbols__ = m_symbols ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_symbols) : 0;
+  auto m_cmd_include_paths__ = m_cmd_include_paths ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_cmd_include_paths) : 0;
+  auto m_cmd_define_options__ = m_cmd_define_options ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_cmd_define_options) : 0;
+  auto m_timeInfo__ = m_timeInfo ? _fbb.CreateVector<flatbuffers::Offset<SURELOG::CACHE::TimeInfo>>(*m_timeInfo) : 0;
   return SURELOG::MACROCACHE::CreatePPCache(
       _fbb,
       m_header,
-      m_macros ? _fbb.CreateVector<flatbuffers::Offset<Macro>>(*m_macros) : 0,
-      m_includes ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_includes) : 0,
-      m_body ? _fbb.CreateString(m_body) : 0,
-      m_errors ? _fbb.CreateVector<flatbuffers::Offset<SURELOG::CACHE::Error>>(*m_errors) : 0,
-      m_symbols ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_symbols) : 0,
-      m_cmd_include_paths ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_cmd_include_paths) : 0,
-      m_cmd_define_options ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_cmd_define_options) : 0,
-      m_timeInfo ? _fbb.CreateVector<flatbuffers::Offset<SURELOG::CACHE::TimeInfo>>(*m_timeInfo) : 0);
+      m_macros__,
+      m_includes__,
+      m_body__,
+      m_errors__,
+      m_symbols__,
+      m_cmd_include_paths__,
+      m_cmd_define_options__,
+      m_timeInfo__);
 }
 
 inline const SURELOG::MACROCACHE::PPCache *GetPPCache(const void *buf) {
   return flatbuffers::GetRoot<SURELOG::MACROCACHE::PPCache>(buf);
 }
 
+inline const SURELOG::MACROCACHE::PPCache *GetSizePrefixedPPCache(const void *buf) {
+  return flatbuffers::GetSizePrefixedRoot<SURELOG::MACROCACHE::PPCache>(buf);
+}
+
 inline const char *PPCacheIdentifier() {
   return "SLPP";
 }
@@ -327,6 +351,11 @@
   return verifier.VerifyBuffer<SURELOG::MACROCACHE::PPCache>(PPCacheIdentifier());
 }
 
+inline bool VerifySizePrefixedPPCacheBuffer(
+    flatbuffers::Verifier &verifier) {
+  return verifier.VerifySizePrefixedBuffer<SURELOG::MACROCACHE::PPCache>(PPCacheIdentifier());
+}
+
 inline const char *PPCacheExtension() {
   return "slpp";
 }
@@ -337,6 +366,12 @@
   fbb.Finish(root, PPCacheIdentifier());
 }
 
+inline void FinishSizePrefixedPPCacheBuffer(
+    flatbuffers::FlatBufferBuilder &fbb,
+    flatbuffers::Offset<SURELOG::MACROCACHE::PPCache> root) {
+  fbb.FinishSizePrefixed(root, PPCacheIdentifier());
+}
+
 }  // namespace MACROCACHE
 }  // namespace SURELOG
 
diff --git a/src/Cache/python_api_generated.h b/src/Cache/python_api_generated.h
index 383084a..a52e0c3 100644
--- a/src/Cache/python_api_generated.h
+++ b/src/Cache/python_api_generated.h
@@ -14,7 +14,7 @@
 struct PythonAPICache;
 
 struct PythonAPICache FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
+  enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
     VT_M_HEADER = 4,
     VT_M_PYTHON_SCRIPT_FILE = 6,
     VT_M_ERRORS = 8,
@@ -34,15 +34,15 @@
   }
   bool Verify(flatbuffers::Verifier &verifier) const {
     return VerifyTableStart(verifier) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_HEADER) &&
+           VerifyOffset(verifier, VT_M_HEADER) &&
            verifier.VerifyTable(m_header()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_PYTHON_SCRIPT_FILE) &&
-           verifier.Verify(m_python_script_file()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_ERRORS) &&
-           verifier.Verify(m_errors()) &&
+           VerifyOffset(verifier, VT_M_PYTHON_SCRIPT_FILE) &&
+           verifier.VerifyString(m_python_script_file()) &&
+           VerifyOffset(verifier, VT_M_ERRORS) &&
+           verifier.VerifyVector(m_errors()) &&
            verifier.VerifyVectorOfTables(m_errors()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_M_SYMBOLS) &&
-           verifier.Verify(m_symbols()) &&
+           VerifyOffset(verifier, VT_M_SYMBOLS) &&
+           verifier.VerifyVector(m_symbols()) &&
            verifier.VerifyVectorOfStrings(m_symbols()) &&
            verifier.EndTable();
   }
@@ -63,13 +63,13 @@
   void add_m_symbols(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> m_symbols) {
     fbb_.AddOffset(PythonAPICache::VT_M_SYMBOLS, m_symbols);
   }
-  PythonAPICacheBuilder(flatbuffers::FlatBufferBuilder &_fbb)
+  explicit PythonAPICacheBuilder(flatbuffers::FlatBufferBuilder &_fbb)
         : fbb_(_fbb) {
     start_ = fbb_.StartTable();
   }
   PythonAPICacheBuilder &operator=(const PythonAPICacheBuilder &);
   flatbuffers::Offset<PythonAPICache> Finish() {
-    const auto end = fbb_.EndTable(start_, 4);
+    const auto end = fbb_.EndTable(start_);
     auto o = flatbuffers::Offset<PythonAPICache>(end);
     return o;
   }
@@ -95,18 +95,25 @@
     const char *m_python_script_file = nullptr,
     const std::vector<flatbuffers::Offset<SURELOG::CACHE::Error>> *m_errors = nullptr,
     const std::vector<flatbuffers::Offset<flatbuffers::String>> *m_symbols = nullptr) {
+  auto m_python_script_file__ = m_python_script_file ? _fbb.CreateString(m_python_script_file) : 0;
+  auto m_errors__ = m_errors ? _fbb.CreateVector<flatbuffers::Offset<SURELOG::CACHE::Error>>(*m_errors) : 0;
+  auto m_symbols__ = m_symbols ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_symbols) : 0;
   return SURELOG::PYTHONAPICACHE::CreatePythonAPICache(
       _fbb,
       m_header,
-      m_python_script_file ? _fbb.CreateString(m_python_script_file) : 0,
-      m_errors ? _fbb.CreateVector<flatbuffers::Offset<SURELOG::CACHE::Error>>(*m_errors) : 0,
-      m_symbols ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*m_symbols) : 0);
+      m_python_script_file__,
+      m_errors__,
+      m_symbols__);
 }
 
 inline const SURELOG::PYTHONAPICACHE::PythonAPICache *GetPythonAPICache(const void *buf) {
   return flatbuffers::GetRoot<SURELOG::PYTHONAPICACHE::PythonAPICache>(buf);
 }
 
+inline const SURELOG::PYTHONAPICACHE::PythonAPICache *GetSizePrefixedPythonAPICache(const void *buf) {
+  return flatbuffers::GetSizePrefixedRoot<SURELOG::PYTHONAPICACHE::PythonAPICache>(buf);
+}
+
 inline const char *PythonAPICacheIdentifier() {
   return "SLPY";
 }
@@ -121,6 +128,11 @@
   return verifier.VerifyBuffer<SURELOG::PYTHONAPICACHE::PythonAPICache>(PythonAPICacheIdentifier());
 }
 
+inline bool VerifySizePrefixedPythonAPICacheBuffer(
+    flatbuffers::Verifier &verifier) {
+  return verifier.VerifySizePrefixedBuffer<SURELOG::PYTHONAPICACHE::PythonAPICache>(PythonAPICacheIdentifier());
+}
+
 inline const char *PythonAPICacheExtension() {
   return "slpy";
 }
@@ -131,6 +143,12 @@
   fbb.Finish(root, PythonAPICacheIdentifier());
 }
 
+inline void FinishSizePrefixedPythonAPICacheBuffer(
+    flatbuffers::FlatBufferBuilder &fbb,
+    flatbuffers::Offset<SURELOG::PYTHONAPICACHE::PythonAPICache> root) {
+  fbb.FinishSizePrefixed(root, PythonAPICacheIdentifier());
+}
+
 }  // namespace PYTHONAPICACHE
 }  // namespace SURELOG
 
diff --git a/third_party/flatbuffers b/third_party/flatbuffers
new file mode 160000
index 0000000..6beb9f4
--- /dev/null
+++ b/third_party/flatbuffers
@@ -0,0 +1 @@
+Subproject commit 6beb9f49cb44095c4c17be43f13906c6eb09d7c7
diff --git a/third_party/flatbuffers/CMake/BuildFlatBuffers.cmake b/third_party/flatbuffers/CMake/BuildFlatBuffers.cmake
deleted file mode 100644
index 42f78de..0000000
--- a/third_party/flatbuffers/CMake/BuildFlatBuffers.cmake
+++ /dev/null
@@ -1,148 +0,0 @@
-# Copyright 2015 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# General function to create FlatBuffer build rules for the given list of
-# schemas.
-#
-# flatbuffers_schemas: A list of flatbuffer schema files to process.
-#
-# schema_include_dirs: A list of schema file include directories, which will be
-# passed to flatc via the -I parameter.
-#
-# custom_target_name: The generated files will be added as dependencies for a
-# new custom target with this name. You should add that target as a dependency
-# for your main target to ensure these files are built. You can also retrieve
-# various properties from this target, such as GENERATED_INCLUDES_DIR,
-# BINARY_SCHEMAS_DIR, and COPY_TEXT_SCHEMAS_DIR.
-#
-# additional_dependencies: A list of additional dependencies that you'd like
-# all generated files to depend on. Pass in a blank string if you have none.
-#
-# generated_includes_dir: Where to generate the C++ header files for these
-# schemas. The generated includes directory will automatically be added to
-# CMake's include directories, and will be where generated header files are
-# placed. This parameter is optional; pass in empty string if you don't want to
-# generate include files for these schemas.
-#
-# binary_schemas_dir: If you specify an optional binary schema directory, binary
-# schemas will be generated for these schemas as well, and placed into the given
-# directory.
-#
-# copy_text_schemas_dir: If you want all text schemas (including schemas from
-# all schema include directories) copied into a directory (for example, if you
-# need them within your project to build JSON files), you can specify that
-# folder here. All text schemas will be copied to that folder.
-#
-# IMPORTANT: Make sure you quote all list arguments you pass to this function!
-# Otherwise CMake will only pass in the first element.
-# Example: build_flatbuffers("${fb_files}" "${include_dirs}" target_name ...)
-function(build_flatbuffers flatbuffers_schemas
-                           schema_include_dirs
-                           custom_target_name
-                           additional_dependencies
-                           generated_includes_dir
-                           binary_schemas_dir
-                           copy_text_schemas_dir)
-
-  # Test if including from FindFlatBuffers
-  if(FLATBUFFERS_FLATC_EXECUTABLE)
-    set(FLATC_TARGET "")
-    set(FLATC ${FLATBUFFERS_FLATC_EXECUTABLE})
-  else()
-    set(FLATC_TARGET flatc)
-    set(FLATC flatc)
-  endif()
-  set(FLATC_SCHEMA_ARGS --gen-mutable)
-  if(FLATBUFFERS_FLATC_SCHEMA_EXTRA_ARGS)
-    set(FLATC_SCHEMA_ARGS
-      ${FLATBUFFERS_FLATC_SCHEMA_EXTRA_ARGS}
-      ${FLATC_SCHEMA_ARGS}
-      )
-  endif()
-
-  set(schema_glob "*.fbs")
-  # Generate the include files parameters.
-  set(include_params "")
-  set(all_generated_files "")
-  foreach (include_dir ${schema_include_dirs})
-    set(include_params -I ${include_dir} ${include_params})
-    if (NOT ${copy_text_schemas_dir} STREQUAL "")
-      # Copy text schemas from dependent folders.
-      file(GLOB_RECURSE dependent_schemas ${include_dir}/${schema_glob})
-      foreach (dependent_schema ${dependent_schemas})
-        file(COPY ${dependent_schema} DESTINATION ${copy_text_schemas_dir})
-      endforeach()
-    endif()
-  endforeach()
-
-  foreach(schema ${flatbuffers_schemas})
-    get_filename_component(filename ${schema} NAME_WE)
-    # For each schema, do the things we requested.
-    if (NOT ${generated_includes_dir} STREQUAL "")
-      set(generated_include ${generated_includes_dir}/${filename}_generated.h)
-      add_custom_command(
-        OUTPUT ${generated_include}
-        COMMAND ${FLATC} ${FLATC_SCHEMA_ARGS}
-        -o ${generated_includes_dir}
-        ${include_params}
-        -c ${schema}
-        DEPENDS ${FLATC_TARGET} ${schema} ${additional_dependencies})
-      list(APPEND all_generated_files ${generated_include})
-    endif()
-
-    if (NOT ${binary_schemas_dir} STREQUAL "")
-      set(binary_schema ${binary_schemas_dir}/${filename}.bfbs)
-      add_custom_command(
-        OUTPUT ${binary_schema}
-        COMMAND ${FLATC} -b --schema
-        -o ${binary_schemas_dir}
-        ${include_params}
-        ${schema}
-        DEPENDS ${FLATC_TARGET} ${schema} ${additional_dependencies})
-      list(APPEND all_generated_files ${binary_schema})
-    endif()
-
-    if (NOT ${copy_text_schemas_dir} STREQUAL "")
-      file(COPY ${schema} DESTINATION ${copy_text_schemas_dir})
-    endif()
-  endforeach()
-
-  # Create a custom target that depends on all the generated files.
-  # This is the target that you can depend on to trigger all these
-  # to be built.
-  add_custom_target(${custom_target_name}
-                    DEPENDS ${all_generated_files} ${additional_dependencies})
-
-  # Register the include directory we are using.
-  if (NOT ${generated_includes_dir} STREQUAL "")
-    include_directories(${generated_includes_dir})
-    set_property(TARGET ${custom_target_name}
-      PROPERTY GENERATED_INCLUDES_DIR
-      ${generated_includes_dir})
-  endif()
-
-  # Register the binary schemas dir we are using.
-  if (NOT ${binary_schemas_dir} STREQUAL "")
-    set_property(TARGET ${custom_target_name}
-      PROPERTY BINARY_SCHEMAS_DIR
-      ${binary_schemas_dir})
-  endif()
-
-  # Register the text schema copy dir we are using.
-  if (NOT ${copy_text_schemas_dir} STREQUAL "")
-    set_property(TARGET ${custom_target_name}
-      PROPERTY COPY_TEXT_SCHEMAS_DIR
-      ${copy_text_schemas_dir})
-  endif()
-endfunction()
diff --git a/third_party/flatbuffers/CMake/FindFlatBuffers.cmake b/third_party/flatbuffers/CMake/FindFlatBuffers.cmake
deleted file mode 100644
index 675ea88..0000000
--- a/third_party/flatbuffers/CMake/FindFlatBuffers.cmake
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright 2014 Stefan.Eilemann@epfl.ch
-# Copyright 2014 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Find the flatbuffers schema compiler
-#
-# Output Variables:
-# * FLATBUFFERS_FLATC_EXECUTABLE the flatc compiler executable
-# * FLATBUFFERS_FOUND
-#
-# Provides:
-# * FLATBUFFERS_GENERATE_C_HEADERS(Name <files>) creates the C++ headers
-#   for the given flatbuffer schema files.
-#   Returns the header files in ${Name}_OUTPUTS
-
-set(FLATBUFFERS_CMAKE_DIR ${CMAKE_CURRENT_LIST_DIR})
-
-find_program(FLATBUFFERS_FLATC_EXECUTABLE NAMES flatc)
-find_path(FLATBUFFERS_INCLUDE_DIR NAMES flatbuffers/flatbuffers.h)
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(flatbuffers
-  DEFAULT_MSG FLATBUFFERS_FLATC_EXECUTABLE FLATBUFFERS_INCLUDE_DIR)
-
-if(FLATBUFFERS_FOUND)
-  function(FLATBUFFERS_GENERATE_C_HEADERS Name)
-    set(FLATC_OUTPUTS)
-    foreach(FILE ${ARGN})
-      get_filename_component(FLATC_OUTPUT ${FILE} NAME_WE)
-      set(FLATC_OUTPUT
-        "${CMAKE_CURRENT_BINARY_DIR}/${FLATC_OUTPUT}_generated.h")
-      list(APPEND FLATC_OUTPUTS ${FLATC_OUTPUT})
-
-      add_custom_command(OUTPUT ${FLATC_OUTPUT}
-        COMMAND ${FLATBUFFERS_FLATC_EXECUTABLE}
-        ARGS -c -o "${CMAKE_CURRENT_BINARY_DIR}/" ${FILE}
-        COMMENT "Building C++ header for ${FILE}"
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
-    endforeach()
-    set(${Name}_OUTPUTS ${FLATC_OUTPUTS} PARENT_SCOPE)
-  endfunction()
-
-  set(FLATBUFFERS_INCLUDE_DIRS ${FLATBUFFERS_INCLUDE_DIR})
-  include_directories(${CMAKE_BINARY_DIR})
-else()
-  set(FLATBUFFERS_INCLUDE_DIR)
-endif()
-
-include("${FLATBUFFERS_CMAKE_DIR}/BuildFlatBuffers.cmake")
\ No newline at end of file
diff --git a/third_party/flatbuffers/CMake/PackageDebian.cmake b/third_party/flatbuffers/CMake/PackageDebian.cmake
deleted file mode 100644
index ebe8931..0000000
--- a/third_party/flatbuffers/CMake/PackageDebian.cmake
+++ /dev/null
@@ -1,57 +0,0 @@
-# ------------------- Debianization ---------------------
-if (UNIX)
-
-    # Set build environment
-    SET(CPACK_GENERATOR "TGZ;DEB")
-    SET(CPACK_SOURCE_TGZ "ON")
-
-    # Common package information
-    SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY
-        "FlatBuffers is an efficient cross platform serialization library for C++, with support for Java, C# and Go. It was created at Google specifically for game development and other performance-critical applications.")
-    SET(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/google/flatbuffers")
-    SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Vitaly Isaev <vitalyisaev2@gmail.com>")
-
-    # Derive package version from git
-    EXECUTE_PROCESS(
-        COMMAND date +%Y%m%d
-        OUTPUT_VARIABLE DATE
-        OUTPUT_STRIP_TRAILING_WHITESPACE
-    )
-    EXECUTE_PROCESS(
-      COMMAND git describe
-      WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
-      OUTPUT_VARIABLE GIT_DESCRIBE_DIRTY
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-    )
-    string(REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${GIT_DESCRIBE_DIRTY}")
-    string(REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${GIT_DESCRIBE_DIRTY}")
-    string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${GIT_DESCRIBE_DIRTY}")
-    string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+\\-([0-9]+).*" "\\1" VERSION_COMMIT "${GIT_DESCRIBE_DIRTY}")
-    SET(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR})
-    SET(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR})
-    SET(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH})
-    SET(CPACK_PACKAGE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-${VERSION_COMMIT}")
-    SET(CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}")
-
-    # Derive architecture
-    IF(NOT CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
-      FIND_PROGRAM(DPKG_CMD dpkg)
-      IF(NOT DPKG_CMD)
-        MESSAGE(STATUS "Can not find dpkg in your path, default to i386.")
-        SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE i386)
-      ENDIF(NOT DPKG_CMD)
-      EXECUTE_PROCESS(COMMAND "${DPKG_CMD}" --print-architecture
-        OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE
-        OUTPUT_STRIP_TRAILING_WHITESPACE
-        )
-    ENDIF(NOT CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
-
-    # Package name
-    SET(CPACK_DEBIAN_PACKAGE_NAME "flatbuffers")
-    SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENSE.txt)
-    SET(CPACK_PACKAGE_FILE_NAME 
-        "${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_DEBIAN_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")
-
-endif(UNIX)
-
-INCLUDE(CPack)
diff --git a/third_party/flatbuffers/CMakeFiles/3.5.1/CMakeCCompiler.cmake b/third_party/flatbuffers/CMakeFiles/3.5.1/CMakeCCompiler.cmake
deleted file mode 100644
index f40522e..0000000
--- a/third_party/flatbuffers/CMakeFiles/3.5.1/CMakeCCompiler.cmake
+++ /dev/null
@@ -1,67 +0,0 @@
-set(CMAKE_C_COMPILER "/usr/bin/cc")
-set(CMAKE_C_COMPILER_ARG1 "")
-set(CMAKE_C_COMPILER_ID "GNU")
-set(CMAKE_C_COMPILER_VERSION "5.4.0")
-set(CMAKE_C_COMPILER_WRAPPER "")
-set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "11")
-set(CMAKE_C_COMPILE_FEATURES "c_function_prototypes;c_restrict;c_variadic_macros;c_static_assert")
-set(CMAKE_C90_COMPILE_FEATURES "c_function_prototypes")
-set(CMAKE_C99_COMPILE_FEATURES "c_restrict;c_variadic_macros")
-set(CMAKE_C11_COMPILE_FEATURES "c_static_assert")
-
-set(CMAKE_C_PLATFORM_ID "Linux")
-set(CMAKE_C_SIMULATE_ID "")
-set(CMAKE_C_SIMULATE_VERSION "")
-
-set(CMAKE_AR "/usr/bin/ar")
-set(CMAKE_RANLIB "/usr/bin/ranlib")
-set(CMAKE_LINKER "/usr/bin/ld")
-set(CMAKE_COMPILER_IS_GNUCC 1)
-set(CMAKE_C_COMPILER_LOADED 1)
-set(CMAKE_C_COMPILER_WORKS TRUE)
-set(CMAKE_C_ABI_COMPILED TRUE)
-set(CMAKE_COMPILER_IS_MINGW )
-set(CMAKE_COMPILER_IS_CYGWIN )
-if(CMAKE_COMPILER_IS_CYGWIN)
-  set(CYGWIN 1)
-  set(UNIX 1)
-endif()
-
-set(CMAKE_C_COMPILER_ENV_VAR "CC")
-
-if(CMAKE_COMPILER_IS_MINGW)
-  set(MINGW 1)
-endif()
-set(CMAKE_C_COMPILER_ID_RUN 1)
-set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m)
-set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
-set(CMAKE_C_LINKER_PREFERENCE 10)
-
-# Save compiler ABI information.
-set(CMAKE_C_SIZEOF_DATA_PTR "8")
-set(CMAKE_C_COMPILER_ABI "ELF")
-set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
-
-if(CMAKE_C_SIZEOF_DATA_PTR)
-  set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}")
-endif()
-
-if(CMAKE_C_COMPILER_ABI)
-  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}")
-endif()
-
-if(CMAKE_C_LIBRARY_ARCHITECTURE)
-  set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
-endif()
-
-set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "")
-if(CMAKE_C_CL_SHOWINCLUDES_PREFIX)
-  set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}")
-endif()
-
-
-
-
-set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "c")
-set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/5;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib")
-set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
diff --git a/third_party/flatbuffers/CMakeFiles/3.5.1/CMakeCXXCompiler.cmake b/third_party/flatbuffers/CMakeFiles/3.5.1/CMakeCXXCompiler.cmake
deleted file mode 100644
index 013ee92..0000000
--- a/third_party/flatbuffers/CMakeFiles/3.5.1/CMakeCXXCompiler.cmake
+++ /dev/null
@@ -1,68 +0,0 @@
-set(CMAKE_CXX_COMPILER "/usr/bin/c++")
-set(CMAKE_CXX_COMPILER_ARG1 "")
-set(CMAKE_CXX_COMPILER_ID "GNU")
-set(CMAKE_CXX_COMPILER_VERSION "5.4.0")
-set(CMAKE_CXX_COMPILER_WRAPPER "")
-set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "98")
-set(CMAKE_CXX_COMPILE_FEATURES "cxx_template_template_parameters;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates")
-set(CMAKE_CXX98_COMPILE_FEATURES "cxx_template_template_parameters")
-set(CMAKE_CXX11_COMPILE_FEATURES "cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates")
-set(CMAKE_CXX14_COMPILE_FEATURES "cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates")
-
-set(CMAKE_CXX_PLATFORM_ID "Linux")
-set(CMAKE_CXX_SIMULATE_ID "")
-set(CMAKE_CXX_SIMULATE_VERSION "")
-
-set(CMAKE_AR "/usr/bin/ar")
-set(CMAKE_RANLIB "/usr/bin/ranlib")
-set(CMAKE_LINKER "/usr/bin/ld")
-set(CMAKE_COMPILER_IS_GNUCXX 1)
-set(CMAKE_CXX_COMPILER_LOADED 1)
-set(CMAKE_CXX_COMPILER_WORKS TRUE)
-set(CMAKE_CXX_ABI_COMPILED TRUE)
-set(CMAKE_COMPILER_IS_MINGW )
-set(CMAKE_COMPILER_IS_CYGWIN )
-if(CMAKE_COMPILER_IS_CYGWIN)
-  set(CYGWIN 1)
-  set(UNIX 1)
-endif()
-
-set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
-
-if(CMAKE_COMPILER_IS_MINGW)
-  set(MINGW 1)
-endif()
-set(CMAKE_CXX_COMPILER_ID_RUN 1)
-set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)
-set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;mm;CPP)
-set(CMAKE_CXX_LINKER_PREFERENCE 30)
-set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
-
-# Save compiler ABI information.
-set(CMAKE_CXX_SIZEOF_DATA_PTR "8")
-set(CMAKE_CXX_COMPILER_ABI "ELF")
-set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
-
-if(CMAKE_CXX_SIZEOF_DATA_PTR)
-  set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
-endif()
-
-if(CMAKE_CXX_COMPILER_ABI)
-  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
-endif()
-
-if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
-  set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
-endif()
-
-set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "")
-if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
-  set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
-endif()
-
-
-
-
-set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;c")
-set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/5;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib")
-set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
diff --git a/third_party/flatbuffers/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_C.bin b/third_party/flatbuffers/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_C.bin
deleted file mode 100755
index c87e38c..0000000
--- a/third_party/flatbuffers/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_C.bin
+++ /dev/null
Binary files differ
diff --git a/third_party/flatbuffers/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_CXX.bin b/third_party/flatbuffers/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_CXX.bin
deleted file mode 100755
index fa40640..0000000
--- a/third_party/flatbuffers/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_CXX.bin
+++ /dev/null
Binary files differ
diff --git a/third_party/flatbuffers/CMakeFiles/3.5.1/CMakeSystem.cmake b/third_party/flatbuffers/CMakeFiles/3.5.1/CMakeSystem.cmake
deleted file mode 100644
index 60ce33f..0000000
--- a/third_party/flatbuffers/CMakeFiles/3.5.1/CMakeSystem.cmake
+++ /dev/null
@@ -1,15 +0,0 @@
-set(CMAKE_HOST_SYSTEM "Linux-4.4.0-72-generic")
-set(CMAKE_HOST_SYSTEM_NAME "Linux")
-set(CMAKE_HOST_SYSTEM_VERSION "4.4.0-72-generic")
-set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64")
-
-
-
-set(CMAKE_SYSTEM "Linux-4.4.0-72-generic")
-set(CMAKE_SYSTEM_NAME "Linux")
-set(CMAKE_SYSTEM_VERSION "4.4.0-72-generic")
-set(CMAKE_SYSTEM_PROCESSOR "x86_64")
-
-set(CMAKE_CROSSCOMPILING "FALSE")
-
-set(CMAKE_SYSTEM_LOADED 1)
diff --git a/third_party/flatbuffers/CMakeFiles/3.5.1/CompilerIdC/CMakeCCompilerId.c b/third_party/flatbuffers/CMakeFiles/3.5.1/CompilerIdC/CMakeCCompilerId.c
deleted file mode 100644
index 570a15e..0000000
--- a/third_party/flatbuffers/CMakeFiles/3.5.1/CompilerIdC/CMakeCCompilerId.c
+++ /dev/null
@@ -1,544 +0,0 @@
-#ifdef __cplusplus
-# error "A C++ compiler has been selected for C."
-#endif
-
-#if defined(__18CXX)
-# define ID_VOID_MAIN
-#endif
-
-
-/* Version number components: V=Version, R=Revision, P=Patch
-   Version date components:   YYYY=Year, MM=Month,   DD=Day  */
-
-#if defined(__INTEL_COMPILER) || defined(__ICC)
-# define COMPILER_ID "Intel"
-# if defined(_MSC_VER)
-#  define SIMULATE_ID "MSVC"
-# endif
-  /* __INTEL_COMPILER = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
-# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
-# if defined(__INTEL_COMPILER_UPDATE)
-#  define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
-# else
-#  define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER   % 10)
-# endif
-# if defined(__INTEL_COMPILER_BUILD_DATE)
-  /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
-#  define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
-# endif
-# if defined(_MSC_VER)
-   /* _MSC_VER = VVRR */
-#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
-#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
-# endif
-
-#elif defined(__PATHCC__)
-# define COMPILER_ID "PathScale"
-# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
-# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
-# if defined(__PATHCC_PATCHLEVEL__)
-#  define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
-# endif
-
-#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
-# define COMPILER_ID "Embarcadero"
-# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
-# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
-# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__     & 0xFFFF)
-
-#elif defined(__BORLANDC__)
-# define COMPILER_ID "Borland"
-  /* __BORLANDC__ = 0xVRR */
-# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
-# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
-
-#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
-# define COMPILER_ID "Watcom"
-   /* __WATCOMC__ = VVRR */
-# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
-# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
-# if (__WATCOMC__ % 10) > 0
-#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
-# endif
-
-#elif defined(__WATCOMC__)
-# define COMPILER_ID "OpenWatcom"
-   /* __WATCOMC__ = VVRP + 1100 */
-# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
-# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
-# if (__WATCOMC__ % 10) > 0
-#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
-# endif
-
-#elif defined(__SUNPRO_C)
-# define COMPILER_ID "SunPro"
-# if __SUNPRO_C >= 0x5100
-   /* __SUNPRO_C = 0xVRRP */
-#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12)
-#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF)
-#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_C    & 0xF)
-# else
-   /* __SUNPRO_CC = 0xVRP */
-#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8)
-#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF)
-#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_C    & 0xF)
-# endif
-
-#elif defined(__HP_cc)
-# define COMPILER_ID "HP"
-  /* __HP_cc = VVRRPP */
-# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000)
-# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100)
-# define COMPILER_VERSION_PATCH DEC(__HP_cc     % 100)
-
-#elif defined(__DECC)
-# define COMPILER_ID "Compaq"
-  /* __DECC_VER = VVRRTPPPP */
-# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000)
-# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000  % 100)
-# define COMPILER_VERSION_PATCH DEC(__DECC_VER         % 10000)
-
-#elif defined(__IBMC__) && defined(__COMPILER_VER__)
-# define COMPILER_ID "zOS"
-  /* __IBMC__ = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
-# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
-# define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)
-
-#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800
-# define COMPILER_ID "XL"
-  /* __IBMC__ = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
-# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
-# define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)
-
-#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800
-# define COMPILER_ID "VisualAge"
-  /* __IBMC__ = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
-# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
-# define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)
-
-#elif defined(__PGI)
-# define COMPILER_ID "PGI"
-# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
-# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
-# if defined(__PGIC_PATCHLEVEL__)
-#  define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
-# endif
-
-#elif defined(_CRAYC)
-# define COMPILER_ID "Cray"
-# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
-# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
-
-#elif defined(__TI_COMPILER_VERSION__)
-# define COMPILER_ID "TI"
-  /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
-# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
-# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000   % 1000)
-# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__        % 1000)
-
-#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)
-# define COMPILER_ID "Fujitsu"
-
-#elif defined(__TINYC__)
-# define COMPILER_ID "TinyCC"
-
-#elif defined(__SCO_VERSION__)
-# define COMPILER_ID "SCO"
-
-#elif defined(__clang__) && defined(__apple_build_version__)
-# define COMPILER_ID "AppleClang"
-# if defined(_MSC_VER)
-#  define SIMULATE_ID "MSVC"
-# endif
-# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
-# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
-# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
-# if defined(_MSC_VER)
-   /* _MSC_VER = VVRR */
-#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
-#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
-# endif
-# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
-
-#elif defined(__clang__)
-# define COMPILER_ID "Clang"
-# if defined(_MSC_VER)
-#  define SIMULATE_ID "MSVC"
-# endif
-# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
-# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
-# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
-# if defined(_MSC_VER)
-   /* _MSC_VER = VVRR */
-#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
-#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
-# endif
-
-#elif defined(__GNUC__)
-# define COMPILER_ID "GNU"
-# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
-# if defined(__GNUC_MINOR__)
-#  define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
-# endif
-# if defined(__GNUC_PATCHLEVEL__)
-#  define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
-# endif
-
-#elif defined(_MSC_VER)
-# define COMPILER_ID "MSVC"
-  /* _MSC_VER = VVRR */
-# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
-# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
-# if defined(_MSC_FULL_VER)
-#  if _MSC_VER >= 1400
-    /* _MSC_FULL_VER = VVRRPPPPP */
-#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
-#  else
-    /* _MSC_FULL_VER = VVRRPPPP */
-#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
-#  endif
-# endif
-# if defined(_MSC_BUILD)
-#  define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
-# endif
-
-#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
-# define COMPILER_ID "ADSP"
-#if defined(__VISUALDSPVERSION__)
-  /* __VISUALDSPVERSION__ = 0xVVRRPP00 */
-# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)
-# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)
-# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8  & 0xFF)
-#endif
-
-#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC)
-# define COMPILER_ID "IAR"
-
-#elif defined(__ARMCC_VERSION)
-# define COMPILER_ID "ARMCC"
-#if __ARMCC_VERSION >= 1000000
-  /* __ARMCC_VERSION = VRRPPPP */
-  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
-  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
-  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION     % 10000)
-#else
-  /* __ARMCC_VERSION = VRPPPP */
-  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
-  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
-  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION    % 10000)
-#endif
-
-
-#elif defined(SDCC)
-# define COMPILER_ID "SDCC"
-  /* SDCC = VRP */
-#  define COMPILER_VERSION_MAJOR DEC(SDCC/100)
-#  define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10)
-#  define COMPILER_VERSION_PATCH DEC(SDCC    % 10)
-
-#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION)
-# define COMPILER_ID "MIPSpro"
-# if defined(_SGI_COMPILER_VERSION)
-  /* _SGI_COMPILER_VERSION = VRP */
-#  define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100)
-#  define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10)
-#  define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION    % 10)
-# else
-  /* _COMPILER_VERSION = VRP */
-#  define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100)
-#  define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10)
-#  define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION    % 10)
-# endif
-
-
-/* These compilers are either not known or too old to define an
-  identification macro.  Try to identify the platform and guess that
-  it is the native compiler.  */
-#elif defined(__sgi)
-# define COMPILER_ID "MIPSpro"
-
-#elif defined(__hpux) || defined(__hpua)
-# define COMPILER_ID "HP"
-
-#else /* unknown compiler */
-# define COMPILER_ID ""
-#endif
-
-/* Construct the string literal in pieces to prevent the source from
-   getting matched.  Store it in a pointer rather than an array
-   because some compilers will just produce instructions to fill the
-   array rather than assigning a pointer to a static array.  */
-char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
-#ifdef SIMULATE_ID
-char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
-#endif
-
-#ifdef __QNXNTO__
-char const* qnxnto = "INFO" ":" "qnxnto[]";
-#endif
-
-#if defined(__CRAYXE) || defined(__CRAYXC)
-char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
-#endif
-
-#define STRINGIFY_HELPER(X) #X
-#define STRINGIFY(X) STRINGIFY_HELPER(X)
-
-/* Identify known platforms by name.  */
-#if defined(__linux) || defined(__linux__) || defined(linux)
-# define PLATFORM_ID "Linux"
-
-#elif defined(__CYGWIN__)
-# define PLATFORM_ID "Cygwin"
-
-#elif defined(__MINGW32__)
-# define PLATFORM_ID "MinGW"
-
-#elif defined(__APPLE__)
-# define PLATFORM_ID "Darwin"
-
-#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
-# define PLATFORM_ID "Windows"
-
-#elif defined(__FreeBSD__) || defined(__FreeBSD)
-# define PLATFORM_ID "FreeBSD"
-
-#elif defined(__NetBSD__) || defined(__NetBSD)
-# define PLATFORM_ID "NetBSD"
-
-#elif defined(__OpenBSD__) || defined(__OPENBSD)
-# define PLATFORM_ID "OpenBSD"
-
-#elif defined(__sun) || defined(sun)
-# define PLATFORM_ID "SunOS"
-
-#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
-# define PLATFORM_ID "AIX"
-
-#elif defined(__sgi) || defined(__sgi__) || defined(_SGI)
-# define PLATFORM_ID "IRIX"
-
-#elif defined(__hpux) || defined(__hpux__)
-# define PLATFORM_ID "HP-UX"
-
-#elif defined(__HAIKU__)
-# define PLATFORM_ID "Haiku"
-
-#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
-# define PLATFORM_ID "BeOS"
-
-#elif defined(__QNX__) || defined(__QNXNTO__)
-# define PLATFORM_ID "QNX"
-
-#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
-# define PLATFORM_ID "Tru64"
-
-#elif defined(__riscos) || defined(__riscos__)
-# define PLATFORM_ID "RISCos"
-
-#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
-# define PLATFORM_ID "SINIX"
-
-#elif defined(__UNIX_SV__)
-# define PLATFORM_ID "UNIX_SV"
-
-#elif defined(__bsdos__)
-# define PLATFORM_ID "BSDOS"
-
-#elif defined(_MPRAS) || defined(MPRAS)
-# define PLATFORM_ID "MP-RAS"
-
-#elif defined(__osf) || defined(__osf__)
-# define PLATFORM_ID "OSF1"
-
-#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
-# define PLATFORM_ID "SCO_SV"
-
-#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
-# define PLATFORM_ID "ULTRIX"
-
-#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
-# define PLATFORM_ID "Xenix"
-
-#elif defined(__WATCOMC__)
-# if defined(__LINUX__)
-#  define PLATFORM_ID "Linux"
-
-# elif defined(__DOS__)
-#  define PLATFORM_ID "DOS"
-
-# elif defined(__OS2__)
-#  define PLATFORM_ID "OS2"
-
-# elif defined(__WINDOWS__)
-#  define PLATFORM_ID "Windows3x"
-
-# else /* unknown platform */
-#  define PLATFORM_ID ""
-# endif
-
-#else /* unknown platform */
-# define PLATFORM_ID ""
-
-#endif
-
-/* For windows compilers MSVC and Intel we can determine
-   the architecture of the compiler being used.  This is because
-   the compilers do not have flags that can change the architecture,
-   but rather depend on which compiler is being used
-*/
-#if defined(_WIN32) && defined(_MSC_VER)
-# if defined(_M_IA64)
-#  define ARCHITECTURE_ID "IA64"
-
-# elif defined(_M_X64) || defined(_M_AMD64)
-#  define ARCHITECTURE_ID "x64"
-
-# elif defined(_M_IX86)
-#  define ARCHITECTURE_ID "X86"
-
-# elif defined(_M_ARM)
-#  if _M_ARM == 4
-#   define ARCHITECTURE_ID "ARMV4I"
-#  elif _M_ARM == 5
-#   define ARCHITECTURE_ID "ARMV5I"
-#  else
-#   define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
-#  endif
-
-# elif defined(_M_MIPS)
-#  define ARCHITECTURE_ID "MIPS"
-
-# elif defined(_M_SH)
-#  define ARCHITECTURE_ID "SHx"
-
-# else /* unknown architecture */
-#  define ARCHITECTURE_ID ""
-# endif
-
-#elif defined(__WATCOMC__)
-# if defined(_M_I86)
-#  define ARCHITECTURE_ID "I86"
-
-# elif defined(_M_IX86)
-#  define ARCHITECTURE_ID "X86"
-
-# else /* unknown architecture */
-#  define ARCHITECTURE_ID ""
-# endif
-
-#else
-#  define ARCHITECTURE_ID ""
-#endif
-
-/* Convert integer to decimal digit literals.  */
-#define DEC(n)                   \
-  ('0' + (((n) / 10000000)%10)), \
-  ('0' + (((n) / 1000000)%10)),  \
-  ('0' + (((n) / 100000)%10)),   \
-  ('0' + (((n) / 10000)%10)),    \
-  ('0' + (((n) / 1000)%10)),     \
-  ('0' + (((n) / 100)%10)),      \
-  ('0' + (((n) / 10)%10)),       \
-  ('0' +  ((n) % 10))
-
-/* Convert integer to hex digit literals.  */
-#define HEX(n)             \
-  ('0' + ((n)>>28 & 0xF)), \
-  ('0' + ((n)>>24 & 0xF)), \
-  ('0' + ((n)>>20 & 0xF)), \
-  ('0' + ((n)>>16 & 0xF)), \
-  ('0' + ((n)>>12 & 0xF)), \
-  ('0' + ((n)>>8  & 0xF)), \
-  ('0' + ((n)>>4  & 0xF)), \
-  ('0' + ((n)     & 0xF))
-
-/* Construct a string literal encoding the version number components. */
-#ifdef COMPILER_VERSION_MAJOR
-char const info_version[] = {
-  'I', 'N', 'F', 'O', ':',
-  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
-  COMPILER_VERSION_MAJOR,
-# ifdef COMPILER_VERSION_MINOR
-  '.', COMPILER_VERSION_MINOR,
-#  ifdef COMPILER_VERSION_PATCH
-   '.', COMPILER_VERSION_PATCH,
-#   ifdef COMPILER_VERSION_TWEAK
-    '.', COMPILER_VERSION_TWEAK,
-#   endif
-#  endif
-# endif
-  ']','\0'};
-#endif
-
-/* Construct a string literal encoding the version number components. */
-#ifdef SIMULATE_VERSION_MAJOR
-char const info_simulate_version[] = {
-  'I', 'N', 'F', 'O', ':',
-  's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
-  SIMULATE_VERSION_MAJOR,
-# ifdef SIMULATE_VERSION_MINOR
-  '.', SIMULATE_VERSION_MINOR,
-#  ifdef SIMULATE_VERSION_PATCH
-   '.', SIMULATE_VERSION_PATCH,
-#   ifdef SIMULATE_VERSION_TWEAK
-    '.', SIMULATE_VERSION_TWEAK,
-#   endif
-#  endif
-# endif
-  ']','\0'};
-#endif
-
-/* Construct the string literal in pieces to prevent the source from
-   getting matched.  Store it in a pointer rather than an array
-   because some compilers will just produce instructions to fill the
-   array rather than assigning a pointer to a static array.  */
-char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
-char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
-
-
-
-
-const char* info_language_dialect_default = "INFO" ":" "dialect_default["
-#if !defined(__STDC_VERSION__)
-  "90"
-#elif __STDC_VERSION__ >= 201000L
-  "11"
-#elif __STDC_VERSION__ >= 199901L
-  "99"
-#else
-#endif
-"]";
-
-/*--------------------------------------------------------------------------*/
-
-#ifdef ID_VOID_MAIN
-void main() {}
-#else
-int main(int argc, char* argv[])
-{
-  int require = 0;
-  require += info_compiler[argc];
-  require += info_platform[argc];
-  require += info_arch[argc];
-#ifdef COMPILER_VERSION_MAJOR
-  require += info_version[argc];
-#endif
-#ifdef SIMULATE_ID
-  require += info_simulate[argc];
-#endif
-#ifdef SIMULATE_VERSION_MAJOR
-  require += info_simulate_version[argc];
-#endif
-#if defined(__CRAYXE) || defined(__CRAYXC)
-  require += info_cray[argc];
-#endif
-  require += info_language_dialect_default[argc];
-  (void)argv;
-  return require;
-}
-#endif
diff --git a/third_party/flatbuffers/CMakeFiles/3.5.1/CompilerIdCXX/CMakeCXXCompilerId.cpp b/third_party/flatbuffers/CMakeFiles/3.5.1/CompilerIdCXX/CMakeCXXCompilerId.cpp
deleted file mode 100644
index e6d8536..0000000
--- a/third_party/flatbuffers/CMakeFiles/3.5.1/CompilerIdCXX/CMakeCXXCompilerId.cpp
+++ /dev/null
@@ -1,533 +0,0 @@
-/* This source file must have a .cpp extension so that all C++ compilers
-   recognize the extension without flags.  Borland does not know .cxx for
-   example.  */
-#ifndef __cplusplus
-# error "A C compiler has been selected for C++."
-#endif
-
-
-/* Version number components: V=Version, R=Revision, P=Patch
-   Version date components:   YYYY=Year, MM=Month,   DD=Day  */
-
-#if defined(__COMO__)
-# define COMPILER_ID "Comeau"
-  /* __COMO_VERSION__ = VRR */
-# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100)
-# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100)
-
-#elif defined(__INTEL_COMPILER) || defined(__ICC)
-# define COMPILER_ID "Intel"
-# if defined(_MSC_VER)
-#  define SIMULATE_ID "MSVC"
-# endif
-  /* __INTEL_COMPILER = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
-# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
-# if defined(__INTEL_COMPILER_UPDATE)
-#  define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
-# else
-#  define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER   % 10)
-# endif
-# if defined(__INTEL_COMPILER_BUILD_DATE)
-  /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
-#  define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
-# endif
-# if defined(_MSC_VER)
-   /* _MSC_VER = VVRR */
-#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
-#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
-# endif
-
-#elif defined(__PATHCC__)
-# define COMPILER_ID "PathScale"
-# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
-# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
-# if defined(__PATHCC_PATCHLEVEL__)
-#  define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
-# endif
-
-#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
-# define COMPILER_ID "Embarcadero"
-# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
-# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
-# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__     & 0xFFFF)
-
-#elif defined(__BORLANDC__)
-# define COMPILER_ID "Borland"
-  /* __BORLANDC__ = 0xVRR */
-# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
-# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
-
-#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
-# define COMPILER_ID "Watcom"
-   /* __WATCOMC__ = VVRR */
-# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
-# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
-# if (__WATCOMC__ % 10) > 0
-#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
-# endif
-
-#elif defined(__WATCOMC__)
-# define COMPILER_ID "OpenWatcom"
-   /* __WATCOMC__ = VVRP + 1100 */
-# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
-# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
-# if (__WATCOMC__ % 10) > 0
-#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
-# endif
-
-#elif defined(__SUNPRO_CC)
-# define COMPILER_ID "SunPro"
-# if __SUNPRO_CC >= 0x5100
-   /* __SUNPRO_CC = 0xVRRP */
-#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)
-#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)
-#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC    & 0xF)
-# else
-   /* __SUNPRO_CC = 0xVRP */
-#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)
-#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)
-#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC    & 0xF)
-# endif
-
-#elif defined(__HP_aCC)
-# define COMPILER_ID "HP"
-  /* __HP_aCC = VVRRPP */
-# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)
-# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)
-# define COMPILER_VERSION_PATCH DEC(__HP_aCC     % 100)
-
-#elif defined(__DECCXX)
-# define COMPILER_ID "Compaq"
-  /* __DECCXX_VER = VVRRTPPPP */
-# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)
-# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000  % 100)
-# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER         % 10000)
-
-#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
-# define COMPILER_ID "zOS"
-  /* __IBMCPP__ = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
-# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
-# define COMPILER_VERSION_PATCH DEC(__IBMCPP__    % 10)
-
-#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800
-# define COMPILER_ID "XL"
-  /* __IBMCPP__ = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
-# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
-# define COMPILER_VERSION_PATCH DEC(__IBMCPP__    % 10)
-
-#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
-# define COMPILER_ID "VisualAge"
-  /* __IBMCPP__ = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
-# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
-# define COMPILER_VERSION_PATCH DEC(__IBMCPP__    % 10)
-
-#elif defined(__PGI)
-# define COMPILER_ID "PGI"
-# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
-# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
-# if defined(__PGIC_PATCHLEVEL__)
-#  define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
-# endif
-
-#elif defined(_CRAYC)
-# define COMPILER_ID "Cray"
-# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
-# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
-
-#elif defined(__TI_COMPILER_VERSION__)
-# define COMPILER_ID "TI"
-  /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
-# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
-# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000   % 1000)
-# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__        % 1000)
-
-#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)
-# define COMPILER_ID "Fujitsu"
-
-#elif defined(__SCO_VERSION__)
-# define COMPILER_ID "SCO"
-
-#elif defined(__clang__) && defined(__apple_build_version__)
-# define COMPILER_ID "AppleClang"
-# if defined(_MSC_VER)
-#  define SIMULATE_ID "MSVC"
-# endif
-# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
-# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
-# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
-# if defined(_MSC_VER)
-   /* _MSC_VER = VVRR */
-#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
-#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
-# endif
-# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
-
-#elif defined(__clang__)
-# define COMPILER_ID "Clang"
-# if defined(_MSC_VER)
-#  define SIMULATE_ID "MSVC"
-# endif
-# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
-# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
-# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
-# if defined(_MSC_VER)
-   /* _MSC_VER = VVRR */
-#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
-#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
-# endif
-
-#elif defined(__GNUC__)
-# define COMPILER_ID "GNU"
-# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
-# if defined(__GNUC_MINOR__)
-#  define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
-# endif
-# if defined(__GNUC_PATCHLEVEL__)
-#  define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
-# endif
-
-#elif defined(_MSC_VER)
-# define COMPILER_ID "MSVC"
-  /* _MSC_VER = VVRR */
-# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
-# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
-# if defined(_MSC_FULL_VER)
-#  if _MSC_VER >= 1400
-    /* _MSC_FULL_VER = VVRRPPPPP */
-#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
-#  else
-    /* _MSC_FULL_VER = VVRRPPPP */
-#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
-#  endif
-# endif
-# if defined(_MSC_BUILD)
-#  define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
-# endif
-
-#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
-# define COMPILER_ID "ADSP"
-#if defined(__VISUALDSPVERSION__)
-  /* __VISUALDSPVERSION__ = 0xVVRRPP00 */
-# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)
-# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)
-# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8  & 0xFF)
-#endif
-
-#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC)
-# define COMPILER_ID "IAR"
-
-#elif defined(__ARMCC_VERSION)
-# define COMPILER_ID "ARMCC"
-#if __ARMCC_VERSION >= 1000000
-  /* __ARMCC_VERSION = VRRPPPP */
-  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
-  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
-  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION     % 10000)
-#else
-  /* __ARMCC_VERSION = VRPPPP */
-  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
-  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
-  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION    % 10000)
-#endif
-
-
-#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION)
-# define COMPILER_ID "MIPSpro"
-# if defined(_SGI_COMPILER_VERSION)
-  /* _SGI_COMPILER_VERSION = VRP */
-#  define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100)
-#  define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10)
-#  define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION    % 10)
-# else
-  /* _COMPILER_VERSION = VRP */
-#  define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100)
-#  define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10)
-#  define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION    % 10)
-# endif
-
-
-/* These compilers are either not known or too old to define an
-  identification macro.  Try to identify the platform and guess that
-  it is the native compiler.  */
-#elif defined(__sgi)
-# define COMPILER_ID "MIPSpro"
-
-#elif defined(__hpux) || defined(__hpua)
-# define COMPILER_ID "HP"
-
-#else /* unknown compiler */
-# define COMPILER_ID ""
-#endif
-
-/* Construct the string literal in pieces to prevent the source from
-   getting matched.  Store it in a pointer rather than an array
-   because some compilers will just produce instructions to fill the
-   array rather than assigning a pointer to a static array.  */
-char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
-#ifdef SIMULATE_ID
-char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
-#endif
-
-#ifdef __QNXNTO__
-char const* qnxnto = "INFO" ":" "qnxnto[]";
-#endif
-
-#if defined(__CRAYXE) || defined(__CRAYXC)
-char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
-#endif
-
-#define STRINGIFY_HELPER(X) #X
-#define STRINGIFY(X) STRINGIFY_HELPER(X)
-
-/* Identify known platforms by name.  */
-#if defined(__linux) || defined(__linux__) || defined(linux)
-# define PLATFORM_ID "Linux"
-
-#elif defined(__CYGWIN__)
-# define PLATFORM_ID "Cygwin"
-
-#elif defined(__MINGW32__)
-# define PLATFORM_ID "MinGW"
-
-#elif defined(__APPLE__)
-# define PLATFORM_ID "Darwin"
-
-#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
-# define PLATFORM_ID "Windows"
-
-#elif defined(__FreeBSD__) || defined(__FreeBSD)
-# define PLATFORM_ID "FreeBSD"
-
-#elif defined(__NetBSD__) || defined(__NetBSD)
-# define PLATFORM_ID "NetBSD"
-
-#elif defined(__OpenBSD__) || defined(__OPENBSD)
-# define PLATFORM_ID "OpenBSD"
-
-#elif defined(__sun) || defined(sun)
-# define PLATFORM_ID "SunOS"
-
-#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
-# define PLATFORM_ID "AIX"
-
-#elif defined(__sgi) || defined(__sgi__) || defined(_SGI)
-# define PLATFORM_ID "IRIX"
-
-#elif defined(__hpux) || defined(__hpux__)
-# define PLATFORM_ID "HP-UX"
-
-#elif defined(__HAIKU__)
-# define PLATFORM_ID "Haiku"
-
-#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
-# define PLATFORM_ID "BeOS"
-
-#elif defined(__QNX__) || defined(__QNXNTO__)
-# define PLATFORM_ID "QNX"
-
-#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
-# define PLATFORM_ID "Tru64"
-
-#elif defined(__riscos) || defined(__riscos__)
-# define PLATFORM_ID "RISCos"
-
-#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
-# define PLATFORM_ID "SINIX"
-
-#elif defined(__UNIX_SV__)
-# define PLATFORM_ID "UNIX_SV"
-
-#elif defined(__bsdos__)
-# define PLATFORM_ID "BSDOS"
-
-#elif defined(_MPRAS) || defined(MPRAS)
-# define PLATFORM_ID "MP-RAS"
-
-#elif defined(__osf) || defined(__osf__)
-# define PLATFORM_ID "OSF1"
-
-#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
-# define PLATFORM_ID "SCO_SV"
-
-#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
-# define PLATFORM_ID "ULTRIX"
-
-#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
-# define PLATFORM_ID "Xenix"
-
-#elif defined(__WATCOMC__)
-# if defined(__LINUX__)
-#  define PLATFORM_ID "Linux"
-
-# elif defined(__DOS__)
-#  define PLATFORM_ID "DOS"
-
-# elif defined(__OS2__)
-#  define PLATFORM_ID "OS2"
-
-# elif defined(__WINDOWS__)
-#  define PLATFORM_ID "Windows3x"
-
-# else /* unknown platform */
-#  define PLATFORM_ID ""
-# endif
-
-#else /* unknown platform */
-# define PLATFORM_ID ""
-
-#endif
-
-/* For windows compilers MSVC and Intel we can determine
-   the architecture of the compiler being used.  This is because
-   the compilers do not have flags that can change the architecture,
-   but rather depend on which compiler is being used
-*/
-#if defined(_WIN32) && defined(_MSC_VER)
-# if defined(_M_IA64)
-#  define ARCHITECTURE_ID "IA64"
-
-# elif defined(_M_X64) || defined(_M_AMD64)
-#  define ARCHITECTURE_ID "x64"
-
-# elif defined(_M_IX86)
-#  define ARCHITECTURE_ID "X86"
-
-# elif defined(_M_ARM)
-#  if _M_ARM == 4
-#   define ARCHITECTURE_ID "ARMV4I"
-#  elif _M_ARM == 5
-#   define ARCHITECTURE_ID "ARMV5I"
-#  else
-#   define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
-#  endif
-
-# elif defined(_M_MIPS)
-#  define ARCHITECTURE_ID "MIPS"
-
-# elif defined(_M_SH)
-#  define ARCHITECTURE_ID "SHx"
-
-# else /* unknown architecture */
-#  define ARCHITECTURE_ID ""
-# endif
-
-#elif defined(__WATCOMC__)
-# if defined(_M_I86)
-#  define ARCHITECTURE_ID "I86"
-
-# elif defined(_M_IX86)
-#  define ARCHITECTURE_ID "X86"
-
-# else /* unknown architecture */
-#  define ARCHITECTURE_ID ""
-# endif
-
-#else
-#  define ARCHITECTURE_ID ""
-#endif
-
-/* Convert integer to decimal digit literals.  */
-#define DEC(n)                   \
-  ('0' + (((n) / 10000000)%10)), \
-  ('0' + (((n) / 1000000)%10)),  \
-  ('0' + (((n) / 100000)%10)),   \
-  ('0' + (((n) / 10000)%10)),    \
-  ('0' + (((n) / 1000)%10)),     \
-  ('0' + (((n) / 100)%10)),      \
-  ('0' + (((n) / 10)%10)),       \
-  ('0' +  ((n) % 10))
-
-/* Convert integer to hex digit literals.  */
-#define HEX(n)             \
-  ('0' + ((n)>>28 & 0xF)), \
-  ('0' + ((n)>>24 & 0xF)), \
-  ('0' + ((n)>>20 & 0xF)), \
-  ('0' + ((n)>>16 & 0xF)), \
-  ('0' + ((n)>>12 & 0xF)), \
-  ('0' + ((n)>>8  & 0xF)), \
-  ('0' + ((n)>>4  & 0xF)), \
-  ('0' + ((n)     & 0xF))
-
-/* Construct a string literal encoding the version number components. */
-#ifdef COMPILER_VERSION_MAJOR
-char const info_version[] = {
-  'I', 'N', 'F', 'O', ':',
-  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
-  COMPILER_VERSION_MAJOR,
-# ifdef COMPILER_VERSION_MINOR
-  '.', COMPILER_VERSION_MINOR,
-#  ifdef COMPILER_VERSION_PATCH
-   '.', COMPILER_VERSION_PATCH,
-#   ifdef COMPILER_VERSION_TWEAK
-    '.', COMPILER_VERSION_TWEAK,
-#   endif
-#  endif
-# endif
-  ']','\0'};
-#endif
-
-/* Construct a string literal encoding the version number components. */
-#ifdef SIMULATE_VERSION_MAJOR
-char const info_simulate_version[] = {
-  'I', 'N', 'F', 'O', ':',
-  's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
-  SIMULATE_VERSION_MAJOR,
-# ifdef SIMULATE_VERSION_MINOR
-  '.', SIMULATE_VERSION_MINOR,
-#  ifdef SIMULATE_VERSION_PATCH
-   '.', SIMULATE_VERSION_PATCH,
-#   ifdef SIMULATE_VERSION_TWEAK
-    '.', SIMULATE_VERSION_TWEAK,
-#   endif
-#  endif
-# endif
-  ']','\0'};
-#endif
-
-/* Construct the string literal in pieces to prevent the source from
-   getting matched.  Store it in a pointer rather than an array
-   because some compilers will just produce instructions to fill the
-   array rather than assigning a pointer to a static array.  */
-char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
-char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
-
-
-
-
-const char* info_language_dialect_default = "INFO" ":" "dialect_default["
-#if __cplusplus >= 201402L
-  "14"
-#elif __cplusplus >= 201103L
-  "11"
-#else
-  "98"
-#endif
-"]";
-
-/*--------------------------------------------------------------------------*/
-
-int main(int argc, char* argv[])
-{
-  int require = 0;
-  require += info_compiler[argc];
-  require += info_platform[argc];
-#ifdef COMPILER_VERSION_MAJOR
-  require += info_version[argc];
-#endif
-#ifdef SIMULATE_ID
-  require += info_simulate[argc];
-#endif
-#ifdef SIMULATE_VERSION_MAJOR
-  require += info_simulate_version[argc];
-#endif
-#if defined(__CRAYXE) || defined(__CRAYXC)
-  require += info_cray[argc];
-#endif
-  require += info_language_dialect_default[argc];
-  (void)argv;
-  return require;
-}
diff --git a/third_party/flatbuffers/CMakeFiles/CMakeDirectoryInformation.cmake b/third_party/flatbuffers/CMakeFiles/CMakeDirectoryInformation.cmake
deleted file mode 100644
index 7c5eeea..0000000
--- a/third_party/flatbuffers/CMakeFiles/CMakeDirectoryInformation.cmake
+++ /dev/null
@@ -1,16 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# Relative path conversion top directories.
-set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/alain/flatbuffers")
-set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/alain/flatbuffers")
-
-# Force unix paths in dependencies.
-set(CMAKE_FORCE_UNIX_PATHS 1)
-
-
-# The C and CXX include file regular expressions for this directory.
-set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
-set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
-set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
-set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
diff --git a/third_party/flatbuffers/CMakeFiles/CMakeOutput.log b/third_party/flatbuffers/CMakeFiles/CMakeOutput.log
deleted file mode 100644
index c7192f0..0000000
--- a/third_party/flatbuffers/CMakeFiles/CMakeOutput.log
+++ /dev/null
@@ -1,554 +0,0 @@
-The system is: Linux - 4.4.0-72-generic - x86_64
-Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded.
-Compiler: /usr/bin/cc 
-Build flags: 
-Id flags: 
-
-The output was:
-0
-
-
-Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out"
-
-The C compiler identification is GNU, found in "/home/alain/flatbuffers/CMakeFiles/3.5.1/CompilerIdC/a.out"
-
-Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded.
-Compiler: /usr/bin/c++ 
-Build flags: 
-Id flags: 
-
-The output was:
-0
-
-
-Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out"
-
-The CXX compiler identification is GNU, found in "/home/alain/flatbuffers/CMakeFiles/3.5.1/CompilerIdCXX/a.out"
-
-Determining if the C compiler works passed with the following output:
-Change Dir: /home/alain/flatbuffers/CMakeFiles/CMakeTmp
-
-Run Build Command:"/usr/bin/make" "cmTC_01020/fast"
-/usr/bin/make -f CMakeFiles/cmTC_01020.dir/build.make CMakeFiles/cmTC_01020.dir/build
-make[1]: Entering directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-Building C object CMakeFiles/cmTC_01020.dir/testCCompiler.c.o
-/usr/bin/cc     -o CMakeFiles/cmTC_01020.dir/testCCompiler.c.o   -c /home/alain/flatbuffers/CMakeFiles/CMakeTmp/testCCompiler.c
-Linking C executable cmTC_01020
-/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_01020.dir/link.txt --verbose=1
-/usr/bin/cc       CMakeFiles/cmTC_01020.dir/testCCompiler.c.o  -o cmTC_01020 -rdynamic 
-make[1]: Leaving directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-
-
-Detecting C compiler ABI info compiled with the following output:
-Change Dir: /home/alain/flatbuffers/CMakeFiles/CMakeTmp
-
-Run Build Command:"/usr/bin/make" "cmTC_f07e3/fast"
-/usr/bin/make -f CMakeFiles/cmTC_f07e3.dir/build.make CMakeFiles/cmTC_f07e3.dir/build
-make[1]: Entering directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-Building C object CMakeFiles/cmTC_f07e3.dir/CMakeCCompilerABI.c.o
-/usr/bin/cc     -o CMakeFiles/cmTC_f07e3.dir/CMakeCCompilerABI.c.o   -c /usr/share/cmake-3.5/Modules/CMakeCCompilerABI.c
-Linking C executable cmTC_f07e3
-/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f07e3.dir/link.txt --verbose=1
-/usr/bin/cc      -v CMakeFiles/cmTC_f07e3.dir/CMakeCCompilerABI.c.o  -o cmTC_f07e3 -rdynamic  
-Using built-in specs.
-COLLECT_GCC=/usr/bin/cc
-COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
-Target: x86_64-linux-gnu
-Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.4' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
-Thread model: posix
-gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 
-COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/
-LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../:/lib/:/usr/lib/
-COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_f07e3' '-rdynamic' '-mtune=generic' '-march=x86-64'
- /usr/lib/gcc/x86_64-linux-gnu/5/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper -plugin-opt=-fresolution=/tmp/ccpJXzxC.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTC_f07e3 /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../.. CMakeFiles/cmTC_f07e3.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o
-make[1]: Leaving directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-
-
-Parsed C implicit link information from above output:
-  link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)]
-  ignore line: [Change Dir: /home/alain/flatbuffers/CMakeFiles/CMakeTmp]
-  ignore line: []
-  ignore line: [Run Build Command:"/usr/bin/make" "cmTC_f07e3/fast"]
-  ignore line: [/usr/bin/make -f CMakeFiles/cmTC_f07e3.dir/build.make CMakeFiles/cmTC_f07e3.dir/build]
-  ignore line: [make[1]: Entering directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp']
-  ignore line: [Building C object CMakeFiles/cmTC_f07e3.dir/CMakeCCompilerABI.c.o]
-  ignore line: [/usr/bin/cc     -o CMakeFiles/cmTC_f07e3.dir/CMakeCCompilerABI.c.o   -c /usr/share/cmake-3.5/Modules/CMakeCCompilerABI.c]
-  ignore line: [Linking C executable cmTC_f07e3]
-  ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f07e3.dir/link.txt --verbose=1]
-  ignore line: [/usr/bin/cc      -v CMakeFiles/cmTC_f07e3.dir/CMakeCCompilerABI.c.o  -o cmTC_f07e3 -rdynamic  ]
-  ignore line: [Using built-in specs.]
-  ignore line: [COLLECT_GCC=/usr/bin/cc]
-  ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper]
-  ignore line: [Target: x86_64-linux-gnu]
-  ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.4' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu]
-  ignore line: [Thread model: posix]
-  ignore line: [gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ]
-  ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/]
-  ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../:/lib/:/usr/lib/]
-  ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_f07e3' '-rdynamic' '-mtune=generic' '-march=x86-64']
-  link line: [ /usr/lib/gcc/x86_64-linux-gnu/5/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper -plugin-opt=-fresolution=/tmp/ccpJXzxC.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTC_f07e3 /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../.. CMakeFiles/cmTC_f07e3.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o]
-    arg [/usr/lib/gcc/x86_64-linux-gnu/5/collect2] ==> ignore
-    arg [-plugin] ==> ignore
-    arg [/usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so] ==> ignore
-    arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper] ==> ignore
-    arg [-plugin-opt=-fresolution=/tmp/ccpJXzxC.res] ==> ignore
-    arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
-    arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
-    arg [-plugin-opt=-pass-through=-lc] ==> ignore
-    arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
-    arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
-    arg [--sysroot=/] ==> ignore
-    arg [--build-id] ==> ignore
-    arg [--eh-frame-hdr] ==> ignore
-    arg [-m] ==> ignore
-    arg [elf_x86_64] ==> ignore
-    arg [--hash-style=gnu] ==> ignore
-    arg [--as-needed] ==> ignore
-    arg [-export-dynamic] ==> ignore
-    arg [-dynamic-linker] ==> ignore
-    arg [/lib64/ld-linux-x86-64.so.2] ==> ignore
-    arg [-zrelro] ==> ignore
-    arg [-o] ==> ignore
-    arg [cmTC_f07e3] ==> ignore
-    arg [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o] ==> ignore
-    arg [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o] ==> ignore
-    arg [/usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o] ==> ignore
-    arg [-L/usr/lib/gcc/x86_64-linux-gnu/5] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5]
-    arg [-L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu]
-    arg [-L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib]
-    arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu]
-    arg [-L/lib/../lib] ==> dir [/lib/../lib]
-    arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu]
-    arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib]
-    arg [-L/usr/lib/gcc/x86_64-linux-gnu/5/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../..]
-    arg [CMakeFiles/cmTC_f07e3.dir/CMakeCCompilerABI.c.o] ==> ignore
-    arg [-lgcc] ==> lib [gcc]
-    arg [--as-needed] ==> ignore
-    arg [-lgcc_s] ==> lib [gcc_s]
-    arg [--no-as-needed] ==> ignore
-    arg [-lc] ==> lib [c]
-    arg [-lgcc] ==> lib [gcc]
-    arg [--as-needed] ==> ignore
-    arg [-lgcc_s] ==> lib [gcc_s]
-    arg [--no-as-needed] ==> ignore
-    arg [/usr/lib/gcc/x86_64-linux-gnu/5/crtend.o] ==> ignore
-    arg [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o] ==> ignore
-  remove lib [gcc]
-  remove lib [gcc_s]
-  remove lib [gcc]
-  remove lib [gcc_s]
-  collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5] ==> [/usr/lib/gcc/x86_64-linux-gnu/5]
-  collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
-  collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib] ==> [/usr/lib]
-  collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu]
-  collapse library dir [/lib/../lib] ==> [/lib]
-  collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
-  collapse library dir [/usr/lib/../lib] ==> [/usr/lib]
-  collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../..] ==> [/usr/lib]
-  implicit libs: [c]
-  implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/5;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib]
-  implicit fwks: []
-
-
-
-
-Detecting C [-std=c11] compiler features compiled with the following output:
-Change Dir: /home/alain/flatbuffers/CMakeFiles/CMakeTmp
-
-Run Build Command:"/usr/bin/make" "cmTC_268e5/fast"
-/usr/bin/make -f CMakeFiles/cmTC_268e5.dir/build.make CMakeFiles/cmTC_268e5.dir/build
-make[1]: Entering directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-Building C object CMakeFiles/cmTC_268e5.dir/feature_tests.c.o
-/usr/bin/cc    -std=c11 -o CMakeFiles/cmTC_268e5.dir/feature_tests.c.o   -c /home/alain/flatbuffers/CMakeFiles/feature_tests.c
-Linking C executable cmTC_268e5
-/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_268e5.dir/link.txt --verbose=1
-/usr/bin/cc       CMakeFiles/cmTC_268e5.dir/feature_tests.c.o  -o cmTC_268e5 -rdynamic 
-make[1]: Leaving directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-
-
-    Feature record: C_FEATURE:1c_function_prototypes
-    Feature record: C_FEATURE:1c_restrict
-    Feature record: C_FEATURE:1c_static_assert
-    Feature record: C_FEATURE:1c_variadic_macros
-
-
-Detecting C [-std=c99] compiler features compiled with the following output:
-Change Dir: /home/alain/flatbuffers/CMakeFiles/CMakeTmp
-
-Run Build Command:"/usr/bin/make" "cmTC_f08a0/fast"
-/usr/bin/make -f CMakeFiles/cmTC_f08a0.dir/build.make CMakeFiles/cmTC_f08a0.dir/build
-make[1]: Entering directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-Building C object CMakeFiles/cmTC_f08a0.dir/feature_tests.c.o
-/usr/bin/cc    -std=c99 -o CMakeFiles/cmTC_f08a0.dir/feature_tests.c.o   -c /home/alain/flatbuffers/CMakeFiles/feature_tests.c
-Linking C executable cmTC_f08a0
-/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f08a0.dir/link.txt --verbose=1
-/usr/bin/cc       CMakeFiles/cmTC_f08a0.dir/feature_tests.c.o  -o cmTC_f08a0 -rdynamic 
-make[1]: Leaving directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-
-
-    Feature record: C_FEATURE:1c_function_prototypes
-    Feature record: C_FEATURE:1c_restrict
-    Feature record: C_FEATURE:0c_static_assert
-    Feature record: C_FEATURE:1c_variadic_macros
-
-
-Detecting C [-std=c90] compiler features compiled with the following output:
-Change Dir: /home/alain/flatbuffers/CMakeFiles/CMakeTmp
-
-Run Build Command:"/usr/bin/make" "cmTC_de240/fast"
-/usr/bin/make -f CMakeFiles/cmTC_de240.dir/build.make CMakeFiles/cmTC_de240.dir/build
-make[1]: Entering directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-Building C object CMakeFiles/cmTC_de240.dir/feature_tests.c.o
-/usr/bin/cc    -std=c90 -o CMakeFiles/cmTC_de240.dir/feature_tests.c.o   -c /home/alain/flatbuffers/CMakeFiles/feature_tests.c
-Linking C executable cmTC_de240
-/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_de240.dir/link.txt --verbose=1
-/usr/bin/cc       CMakeFiles/cmTC_de240.dir/feature_tests.c.o  -o cmTC_de240 -rdynamic 
-make[1]: Leaving directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-
-
-    Feature record: C_FEATURE:1c_function_prototypes
-    Feature record: C_FEATURE:0c_restrict
-    Feature record: C_FEATURE:0c_static_assert
-    Feature record: C_FEATURE:0c_variadic_macros
-Determining if the CXX compiler works passed with the following output:
-Change Dir: /home/alain/flatbuffers/CMakeFiles/CMakeTmp
-
-Run Build Command:"/usr/bin/make" "cmTC_09f2d/fast"
-/usr/bin/make -f CMakeFiles/cmTC_09f2d.dir/build.make CMakeFiles/cmTC_09f2d.dir/build
-make[1]: Entering directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-Building CXX object CMakeFiles/cmTC_09f2d.dir/testCXXCompiler.cxx.o
-/usr/bin/c++      -o CMakeFiles/cmTC_09f2d.dir/testCXXCompiler.cxx.o -c /home/alain/flatbuffers/CMakeFiles/CMakeTmp/testCXXCompiler.cxx
-Linking CXX executable cmTC_09f2d
-/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_09f2d.dir/link.txt --verbose=1
-/usr/bin/c++        CMakeFiles/cmTC_09f2d.dir/testCXXCompiler.cxx.o  -o cmTC_09f2d -rdynamic 
-make[1]: Leaving directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-
-
-Detecting CXX compiler ABI info compiled with the following output:
-Change Dir: /home/alain/flatbuffers/CMakeFiles/CMakeTmp
-
-Run Build Command:"/usr/bin/make" "cmTC_58731/fast"
-/usr/bin/make -f CMakeFiles/cmTC_58731.dir/build.make CMakeFiles/cmTC_58731.dir/build
-make[1]: Entering directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-Building CXX object CMakeFiles/cmTC_58731.dir/CMakeCXXCompilerABI.cpp.o
-/usr/bin/c++      -o CMakeFiles/cmTC_58731.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.5/Modules/CMakeCXXCompilerABI.cpp
-Linking CXX executable cmTC_58731
-/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_58731.dir/link.txt --verbose=1
-/usr/bin/c++       -v CMakeFiles/cmTC_58731.dir/CMakeCXXCompilerABI.cpp.o  -o cmTC_58731 -rdynamic  
-Using built-in specs.
-COLLECT_GCC=/usr/bin/c++
-COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
-Target: x86_64-linux-gnu
-Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.4' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
-Thread model: posix
-gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 
-COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/
-LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../:/lib/:/usr/lib/
-COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_58731' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
- /usr/lib/gcc/x86_64-linux-gnu/5/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper -plugin-opt=-fresolution=/tmp/ccADydt5.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTC_58731 /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../.. CMakeFiles/cmTC_58731.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o
-make[1]: Leaving directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-
-
-Parsed CXX implicit link information from above output:
-  link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)]
-  ignore line: [Change Dir: /home/alain/flatbuffers/CMakeFiles/CMakeTmp]
-  ignore line: []
-  ignore line: [Run Build Command:"/usr/bin/make" "cmTC_58731/fast"]
-  ignore line: [/usr/bin/make -f CMakeFiles/cmTC_58731.dir/build.make CMakeFiles/cmTC_58731.dir/build]
-  ignore line: [make[1]: Entering directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp']
-  ignore line: [Building CXX object CMakeFiles/cmTC_58731.dir/CMakeCXXCompilerABI.cpp.o]
-  ignore line: [/usr/bin/c++      -o CMakeFiles/cmTC_58731.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.5/Modules/CMakeCXXCompilerABI.cpp]
-  ignore line: [Linking CXX executable cmTC_58731]
-  ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_58731.dir/link.txt --verbose=1]
-  ignore line: [/usr/bin/c++       -v CMakeFiles/cmTC_58731.dir/CMakeCXXCompilerABI.cpp.o  -o cmTC_58731 -rdynamic  ]
-  ignore line: [Using built-in specs.]
-  ignore line: [COLLECT_GCC=/usr/bin/c++]
-  ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper]
-  ignore line: [Target: x86_64-linux-gnu]
-  ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.4' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu]
-  ignore line: [Thread model: posix]
-  ignore line: [gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ]
-  ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/]
-  ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../:/lib/:/usr/lib/]
-  ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_58731' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64']
-  link line: [ /usr/lib/gcc/x86_64-linux-gnu/5/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper -plugin-opt=-fresolution=/tmp/ccADydt5.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTC_58731 /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../.. CMakeFiles/cmTC_58731.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o]
-    arg [/usr/lib/gcc/x86_64-linux-gnu/5/collect2] ==> ignore
-    arg [-plugin] ==> ignore
-    arg [/usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so] ==> ignore
-    arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper] ==> ignore
-    arg [-plugin-opt=-fresolution=/tmp/ccADydt5.res] ==> ignore
-    arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
-    arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
-    arg [-plugin-opt=-pass-through=-lc] ==> ignore
-    arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
-    arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
-    arg [--sysroot=/] ==> ignore
-    arg [--build-id] ==> ignore
-    arg [--eh-frame-hdr] ==> ignore
-    arg [-m] ==> ignore
-    arg [elf_x86_64] ==> ignore
-    arg [--hash-style=gnu] ==> ignore
-    arg [--as-needed] ==> ignore
-    arg [-export-dynamic] ==> ignore
-    arg [-dynamic-linker] ==> ignore
-    arg [/lib64/ld-linux-x86-64.so.2] ==> ignore
-    arg [-zrelro] ==> ignore
-    arg [-o] ==> ignore
-    arg [cmTC_58731] ==> ignore
-    arg [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o] ==> ignore
-    arg [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o] ==> ignore
-    arg [/usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o] ==> ignore
-    arg [-L/usr/lib/gcc/x86_64-linux-gnu/5] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5]
-    arg [-L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu]
-    arg [-L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib]
-    arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu]
-    arg [-L/lib/../lib] ==> dir [/lib/../lib]
-    arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu]
-    arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib]
-    arg [-L/usr/lib/gcc/x86_64-linux-gnu/5/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../..]
-    arg [CMakeFiles/cmTC_58731.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore
-    arg [-lstdc++] ==> lib [stdc++]
-    arg [-lm] ==> lib [m]
-    arg [-lgcc_s] ==> lib [gcc_s]
-    arg [-lgcc] ==> lib [gcc]
-    arg [-lc] ==> lib [c]
-    arg [-lgcc_s] ==> lib [gcc_s]
-    arg [-lgcc] ==> lib [gcc]
-    arg [/usr/lib/gcc/x86_64-linux-gnu/5/crtend.o] ==> ignore
-    arg [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o] ==> ignore
-  remove lib [gcc_s]
-  remove lib [gcc]
-  remove lib [gcc_s]
-  remove lib [gcc]
-  collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5] ==> [/usr/lib/gcc/x86_64-linux-gnu/5]
-  collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
-  collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib] ==> [/usr/lib]
-  collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu]
-  collapse library dir [/lib/../lib] ==> [/lib]
-  collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
-  collapse library dir [/usr/lib/../lib] ==> [/usr/lib]
-  collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../..] ==> [/usr/lib]
-  implicit libs: [stdc++;m;c]
-  implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/5;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib]
-  implicit fwks: []
-
-
-
-
-Detecting CXX [-std=c++14] compiler features compiled with the following output:
-Change Dir: /home/alain/flatbuffers/CMakeFiles/CMakeTmp
-
-Run Build Command:"/usr/bin/make" "cmTC_9439e/fast"
-/usr/bin/make -f CMakeFiles/cmTC_9439e.dir/build.make CMakeFiles/cmTC_9439e.dir/build
-make[1]: Entering directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-Building CXX object CMakeFiles/cmTC_9439e.dir/feature_tests.cxx.o
-/usr/bin/c++     -std=c++14 -o CMakeFiles/cmTC_9439e.dir/feature_tests.cxx.o -c /home/alain/flatbuffers/CMakeFiles/feature_tests.cxx
-Linking CXX executable cmTC_9439e
-/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_9439e.dir/link.txt --verbose=1
-/usr/bin/c++        CMakeFiles/cmTC_9439e.dir/feature_tests.cxx.o  -o cmTC_9439e -rdynamic 
-make[1]: Leaving directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-
-
-    Feature record: CXX_FEATURE:1cxx_aggregate_default_initializers
-    Feature record: CXX_FEATURE:1cxx_alias_templates
-    Feature record: CXX_FEATURE:1cxx_alignas
-    Feature record: CXX_FEATURE:1cxx_alignof
-    Feature record: CXX_FEATURE:1cxx_attributes
-    Feature record: CXX_FEATURE:1cxx_attribute_deprecated
-    Feature record: CXX_FEATURE:1cxx_auto_type
-    Feature record: CXX_FEATURE:1cxx_binary_literals
-    Feature record: CXX_FEATURE:1cxx_constexpr
-    Feature record: CXX_FEATURE:1cxx_contextual_conversions
-    Feature record: CXX_FEATURE:1cxx_decltype
-    Feature record: CXX_FEATURE:1cxx_decltype_auto
-    Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types
-    Feature record: CXX_FEATURE:1cxx_default_function_template_args
-    Feature record: CXX_FEATURE:1cxx_defaulted_functions
-    Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers
-    Feature record: CXX_FEATURE:1cxx_delegating_constructors
-    Feature record: CXX_FEATURE:1cxx_deleted_functions
-    Feature record: CXX_FEATURE:1cxx_digit_separators
-    Feature record: CXX_FEATURE:1cxx_enum_forward_declarations
-    Feature record: CXX_FEATURE:1cxx_explicit_conversions
-    Feature record: CXX_FEATURE:1cxx_extended_friend_declarations
-    Feature record: CXX_FEATURE:1cxx_extern_templates
-    Feature record: CXX_FEATURE:1cxx_final
-    Feature record: CXX_FEATURE:1cxx_func_identifier
-    Feature record: CXX_FEATURE:1cxx_generalized_initializers
-    Feature record: CXX_FEATURE:1cxx_generic_lambdas
-    Feature record: CXX_FEATURE:1cxx_inheriting_constructors
-    Feature record: CXX_FEATURE:1cxx_inline_namespaces
-    Feature record: CXX_FEATURE:1cxx_lambdas
-    Feature record: CXX_FEATURE:1cxx_lambda_init_captures
-    Feature record: CXX_FEATURE:1cxx_local_type_template_args
-    Feature record: CXX_FEATURE:1cxx_long_long_type
-    Feature record: CXX_FEATURE:1cxx_noexcept
-    Feature record: CXX_FEATURE:1cxx_nonstatic_member_init
-    Feature record: CXX_FEATURE:1cxx_nullptr
-    Feature record: CXX_FEATURE:1cxx_override
-    Feature record: CXX_FEATURE:1cxx_range_for
-    Feature record: CXX_FEATURE:1cxx_raw_string_literals
-    Feature record: CXX_FEATURE:1cxx_reference_qualified_functions
-    Feature record: CXX_FEATURE:1cxx_relaxed_constexpr
-    Feature record: CXX_FEATURE:1cxx_return_type_deduction
-    Feature record: CXX_FEATURE:1cxx_right_angle_brackets
-    Feature record: CXX_FEATURE:1cxx_rvalue_references
-    Feature record: CXX_FEATURE:1cxx_sizeof_member
-    Feature record: CXX_FEATURE:1cxx_static_assert
-    Feature record: CXX_FEATURE:1cxx_strong_enums
-    Feature record: CXX_FEATURE:1cxx_template_template_parameters
-    Feature record: CXX_FEATURE:1cxx_thread_local
-    Feature record: CXX_FEATURE:1cxx_trailing_return_types
-    Feature record: CXX_FEATURE:1cxx_unicode_literals
-    Feature record: CXX_FEATURE:1cxx_uniform_initialization
-    Feature record: CXX_FEATURE:1cxx_unrestricted_unions
-    Feature record: CXX_FEATURE:1cxx_user_literals
-    Feature record: CXX_FEATURE:1cxx_variable_templates
-    Feature record: CXX_FEATURE:1cxx_variadic_macros
-    Feature record: CXX_FEATURE:1cxx_variadic_templates
-
-
-Detecting CXX [-std=c++11] compiler features compiled with the following output:
-Change Dir: /home/alain/flatbuffers/CMakeFiles/CMakeTmp
-
-Run Build Command:"/usr/bin/make" "cmTC_9b133/fast"
-/usr/bin/make -f CMakeFiles/cmTC_9b133.dir/build.make CMakeFiles/cmTC_9b133.dir/build
-make[1]: Entering directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-Building CXX object CMakeFiles/cmTC_9b133.dir/feature_tests.cxx.o
-/usr/bin/c++     -std=c++11 -o CMakeFiles/cmTC_9b133.dir/feature_tests.cxx.o -c /home/alain/flatbuffers/CMakeFiles/feature_tests.cxx
-Linking CXX executable cmTC_9b133
-/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_9b133.dir/link.txt --verbose=1
-/usr/bin/c++        CMakeFiles/cmTC_9b133.dir/feature_tests.cxx.o  -o cmTC_9b133 -rdynamic 
-make[1]: Leaving directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-
-
-    Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers
-    Feature record: CXX_FEATURE:1cxx_alias_templates
-    Feature record: CXX_FEATURE:1cxx_alignas
-    Feature record: CXX_FEATURE:1cxx_alignof
-    Feature record: CXX_FEATURE:1cxx_attributes
-    Feature record: CXX_FEATURE:0cxx_attribute_deprecated
-    Feature record: CXX_FEATURE:1cxx_auto_type
-    Feature record: CXX_FEATURE:0cxx_binary_literals
-    Feature record: CXX_FEATURE:1cxx_constexpr
-    Feature record: CXX_FEATURE:0cxx_contextual_conversions
-    Feature record: CXX_FEATURE:1cxx_decltype
-    Feature record: CXX_FEATURE:0cxx_decltype_auto
-    Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types
-    Feature record: CXX_FEATURE:1cxx_default_function_template_args
-    Feature record: CXX_FEATURE:1cxx_defaulted_functions
-    Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers
-    Feature record: CXX_FEATURE:1cxx_delegating_constructors
-    Feature record: CXX_FEATURE:1cxx_deleted_functions
-    Feature record: CXX_FEATURE:0cxx_digit_separators
-    Feature record: CXX_FEATURE:1cxx_enum_forward_declarations
-    Feature record: CXX_FEATURE:1cxx_explicit_conversions
-    Feature record: CXX_FEATURE:1cxx_extended_friend_declarations
-    Feature record: CXX_FEATURE:1cxx_extern_templates
-    Feature record: CXX_FEATURE:1cxx_final
-    Feature record: CXX_FEATURE:1cxx_func_identifier
-    Feature record: CXX_FEATURE:1cxx_generalized_initializers
-    Feature record: CXX_FEATURE:0cxx_generic_lambdas
-    Feature record: CXX_FEATURE:1cxx_inheriting_constructors
-    Feature record: CXX_FEATURE:1cxx_inline_namespaces
-    Feature record: CXX_FEATURE:1cxx_lambdas
-    Feature record: CXX_FEATURE:0cxx_lambda_init_captures
-    Feature record: CXX_FEATURE:1cxx_local_type_template_args
-    Feature record: CXX_FEATURE:1cxx_long_long_type
-    Feature record: CXX_FEATURE:1cxx_noexcept
-    Feature record: CXX_FEATURE:1cxx_nonstatic_member_init
-    Feature record: CXX_FEATURE:1cxx_nullptr
-    Feature record: CXX_FEATURE:1cxx_override
-    Feature record: CXX_FEATURE:1cxx_range_for
-    Feature record: CXX_FEATURE:1cxx_raw_string_literals
-    Feature record: CXX_FEATURE:1cxx_reference_qualified_functions
-    Feature record: CXX_FEATURE:0cxx_relaxed_constexpr
-    Feature record: CXX_FEATURE:0cxx_return_type_deduction
-    Feature record: CXX_FEATURE:1cxx_right_angle_brackets
-    Feature record: CXX_FEATURE:1cxx_rvalue_references
-    Feature record: CXX_FEATURE:1cxx_sizeof_member
-    Feature record: CXX_FEATURE:1cxx_static_assert
-    Feature record: CXX_FEATURE:1cxx_strong_enums
-    Feature record: CXX_FEATURE:1cxx_template_template_parameters
-    Feature record: CXX_FEATURE:1cxx_thread_local
-    Feature record: CXX_FEATURE:1cxx_trailing_return_types
-    Feature record: CXX_FEATURE:1cxx_unicode_literals
-    Feature record: CXX_FEATURE:1cxx_uniform_initialization
-    Feature record: CXX_FEATURE:1cxx_unrestricted_unions
-    Feature record: CXX_FEATURE:1cxx_user_literals
-    Feature record: CXX_FEATURE:0cxx_variable_templates
-    Feature record: CXX_FEATURE:1cxx_variadic_macros
-    Feature record: CXX_FEATURE:1cxx_variadic_templates
-
-
-Detecting CXX [-std=c++98] compiler features compiled with the following output:
-Change Dir: /home/alain/flatbuffers/CMakeFiles/CMakeTmp
-
-Run Build Command:"/usr/bin/make" "cmTC_767fe/fast"
-/usr/bin/make -f CMakeFiles/cmTC_767fe.dir/build.make CMakeFiles/cmTC_767fe.dir/build
-make[1]: Entering directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-Building CXX object CMakeFiles/cmTC_767fe.dir/feature_tests.cxx.o
-/usr/bin/c++     -std=c++98 -o CMakeFiles/cmTC_767fe.dir/feature_tests.cxx.o -c /home/alain/flatbuffers/CMakeFiles/feature_tests.cxx
-Linking CXX executable cmTC_767fe
-/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_767fe.dir/link.txt --verbose=1
-/usr/bin/c++        CMakeFiles/cmTC_767fe.dir/feature_tests.cxx.o  -o cmTC_767fe -rdynamic 
-make[1]: Leaving directory '/home/alain/flatbuffers/CMakeFiles/CMakeTmp'
-
-
-    Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers
-    Feature record: CXX_FEATURE:0cxx_alias_templates
-    Feature record: CXX_FEATURE:0cxx_alignas
-    Feature record: CXX_FEATURE:0cxx_alignof
-    Feature record: CXX_FEATURE:0cxx_attributes
-    Feature record: CXX_FEATURE:0cxx_attribute_deprecated
-    Feature record: CXX_FEATURE:0cxx_auto_type
-    Feature record: CXX_FEATURE:0cxx_binary_literals
-    Feature record: CXX_FEATURE:0cxx_constexpr
-    Feature record: CXX_FEATURE:0cxx_contextual_conversions
-    Feature record: CXX_FEATURE:0cxx_decltype
-    Feature record: CXX_FEATURE:0cxx_decltype_auto
-    Feature record: CXX_FEATURE:0cxx_decltype_incomplete_return_types
-    Feature record: CXX_FEATURE:0cxx_default_function_template_args
-    Feature record: CXX_FEATURE:0cxx_defaulted_functions
-    Feature record: CXX_FEATURE:0cxx_defaulted_move_initializers
-    Feature record: CXX_FEATURE:0cxx_delegating_constructors
-    Feature record: CXX_FEATURE:0cxx_deleted_functions
-    Feature record: CXX_FEATURE:0cxx_digit_separators
-    Feature record: CXX_FEATURE:0cxx_enum_forward_declarations
-    Feature record: CXX_FEATURE:0cxx_explicit_conversions
-    Feature record: CXX_FEATURE:0cxx_extended_friend_declarations
-    Feature record: CXX_FEATURE:0cxx_extern_templates
-    Feature record: CXX_FEATURE:0cxx_final
-    Feature record: CXX_FEATURE:0cxx_func_identifier
-    Feature record: CXX_FEATURE:0cxx_generalized_initializers
-    Feature record: CXX_FEATURE:0cxx_generic_lambdas
-    Feature record: CXX_FEATURE:0cxx_inheriting_constructors
-    Feature record: CXX_FEATURE:0cxx_inline_namespaces
-    Feature record: CXX_FEATURE:0cxx_lambdas
-    Feature record: CXX_FEATURE:0cxx_lambda_init_captures
-    Feature record: CXX_FEATURE:0cxx_local_type_template_args
-    Feature record: CXX_FEATURE:0cxx_long_long_type
-    Feature record: CXX_FEATURE:0cxx_noexcept
-    Feature record: CXX_FEATURE:0cxx_nonstatic_member_init
-    Feature record: CXX_FEATURE:0cxx_nullptr
-    Feature record: CXX_FEATURE:0cxx_override
-    Feature record: CXX_FEATURE:0cxx_range_for
-    Feature record: CXX_FEATURE:0cxx_raw_string_literals
-    Feature record: CXX_FEATURE:0cxx_reference_qualified_functions
-    Feature record: CXX_FEATURE:0cxx_relaxed_constexpr
-    Feature record: CXX_FEATURE:0cxx_return_type_deduction
-    Feature record: CXX_FEATURE:0cxx_right_angle_brackets
-    Feature record: CXX_FEATURE:0cxx_rvalue_references
-    Feature record: CXX_FEATURE:0cxx_sizeof_member
-    Feature record: CXX_FEATURE:0cxx_static_assert
-    Feature record: CXX_FEATURE:0cxx_strong_enums
-    Feature record: CXX_FEATURE:1cxx_template_template_parameters
-    Feature record: CXX_FEATURE:0cxx_thread_local
-    Feature record: CXX_FEATURE:0cxx_trailing_return_types
-    Feature record: CXX_FEATURE:0cxx_unicode_literals
-    Feature record: CXX_FEATURE:0cxx_uniform_initialization
-    Feature record: CXX_FEATURE:0cxx_unrestricted_unions
-    Feature record: CXX_FEATURE:0cxx_user_literals
-    Feature record: CXX_FEATURE:0cxx_variable_templates
-    Feature record: CXX_FEATURE:0cxx_variadic_macros
-    Feature record: CXX_FEATURE:0cxx_variadic_templates
diff --git a/third_party/flatbuffers/CMakeFiles/CMakeRuleHashes.txt b/third_party/flatbuffers/CMakeFiles/CMakeRuleHashes.txt
deleted file mode 100644
index 38f186f..0000000
--- a/third_party/flatbuffers/CMakeFiles/CMakeRuleHashes.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# Hashes of file build rules.
-245267531140c1e4cbb6844a7544380e samples/monster_generated.h
-58bc14d032700fdc5864bd7e359f5a07 tests/monster_test_generated.h
diff --git a/third_party/flatbuffers/CMakeFiles/Makefile.cmake b/third_party/flatbuffers/CMakeFiles/Makefile.cmake
deleted file mode 100644
index 8c40da2..0000000
--- a/third_party/flatbuffers/CMakeFiles/Makefile.cmake
+++ /dev/null
@@ -1,121 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# The generator used is:
-set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles")
-
-# The top level Makefile was generated from the following files:
-set(CMAKE_MAKEFILE_DEPENDS
-  "CMakeCache.txt"
-  "CMake/BuildFlatBuffers.cmake"
-  "CMakeFiles/3.5.1/CMakeCCompiler.cmake"
-  "CMakeFiles/3.5.1/CMakeCXXCompiler.cmake"
-  "CMakeFiles/3.5.1/CMakeSystem.cmake"
-  "CMakeFiles/feature_tests.c"
-  "CMakeFiles/feature_tests.cxx"
-  "CMakeLists.txt"
-  "/usr/share/cmake-3.5/Modules/CMakeCCompiler.cmake.in"
-  "/usr/share/cmake-3.5/Modules/CMakeCCompilerABI.c"
-  "/usr/share/cmake-3.5/Modules/CMakeCInformation.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeCXXCompiler.cmake.in"
-  "/usr/share/cmake-3.5/Modules/CMakeCXXCompilerABI.cpp"
-  "/usr/share/cmake-3.5/Modules/CMakeCXXInformation.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeCommonLanguageInclude.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeCompilerIdDetection.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeDetermineCCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeDetermineCXXCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeDetermineCompileFeatures.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeDetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeDetermineCompilerABI.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeDetermineCompilerId.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeDetermineSystem.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeFindBinUtils.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeGenericSystem.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeLanguageInformation.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeParseArguments.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeParseImplicitLinkInfo.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeSystem.cmake.in"
-  "/usr/share/cmake-3.5/Modules/CMakeSystemSpecificInformation.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeSystemSpecificInitialize.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeTestCCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeTestCXXCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeTestCompilerCommon.cmake"
-  "/usr/share/cmake-3.5/Modules/CMakeUnixFindMake.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/ADSP-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/ARMCC-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/AppleClang-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/Borland-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/Clang-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/Clang-DetermineCompilerInternal.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/Compaq-C-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/Cray-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/Embarcadero-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/Fujitsu-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/GHS-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/GNU-C-FeatureTests.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/GNU-C.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/GNU-CXX-FeatureTests.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/GNU-CXX.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/GNU-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/GNU.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/HP-C-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/HP-CXX-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/IAR-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/Intel-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/MIPSpro-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/MSVC-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/PGI-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/PathScale-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/SCO-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/SDCC-C-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/SunPro-C-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/TI-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/Watcom-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/XL-C-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/XL-CXX-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/zOS-C-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake"
-  "/usr/share/cmake-3.5/Modules/Internal/FeatureTesting.cmake"
-  "/usr/share/cmake-3.5/Modules/MultiArchCross.cmake"
-  "/usr/share/cmake-3.5/Modules/Platform/Linux-CXX.cmake"
-  "/usr/share/cmake-3.5/Modules/Platform/Linux-GNU-C.cmake"
-  "/usr/share/cmake-3.5/Modules/Platform/Linux-GNU-CXX.cmake"
-  "/usr/share/cmake-3.5/Modules/Platform/Linux-GNU.cmake"
-  "/usr/share/cmake-3.5/Modules/Platform/Linux.cmake"
-  "/usr/share/cmake-3.5/Modules/Platform/UnixPaths.cmake"
-  )
-
-# The corresponding makefile is:
-set(CMAKE_MAKEFILE_OUTPUTS
-  "Makefile"
-  "CMakeFiles/cmake.check_cache"
-  )
-
-# Byproducts of CMake generate step:
-set(CMAKE_MAKEFILE_PRODUCTS
-  "CMakeFiles/3.5.1/CMakeSystem.cmake"
-  "CMakeFiles/3.5.1/CMakeCCompiler.cmake"
-  "CMakeFiles/3.5.1/CMakeCXXCompiler.cmake"
-  "CMakeFiles/3.5.1/CMakeCCompiler.cmake"
-  "CMakeFiles/3.5.1/CMakeCXXCompiler.cmake"
-  "CMakeFiles/CMakeDirectoryInformation.cmake"
-  )
-
-# Dependency information for all targets:
-set(CMAKE_DEPEND_INFO_FILES
-  "CMakeFiles/flattests.dir/DependInfo.cmake"
-  "CMakeFiles/flatc.dir/DependInfo.cmake"
-  "CMakeFiles/flatbuffers.dir/DependInfo.cmake"
-  "CMakeFiles/flatsamplebinary.dir/DependInfo.cmake"
-  "CMakeFiles/flathash.dir/DependInfo.cmake"
-  "CMakeFiles/flatsampletext.dir/DependInfo.cmake"
-  )
diff --git a/third_party/flatbuffers/CMakeFiles/Makefile2 b/third_party/flatbuffers/CMakeFiles/Makefile2
deleted file mode 100644
index 940fcfc..0000000
--- a/third_party/flatbuffers/CMakeFiles/Makefile2
+++ /dev/null
@@ -1,293 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# Default target executed when no arguments are given to make.
-default_target: all
-
-.PHONY : default_target
-
-# The main recursive all target
-all:
-
-.PHONY : all
-
-# The main recursive preinstall target
-preinstall:
-
-.PHONY : preinstall
-
-#=============================================================================
-# Special targets provided by cmake.
-
-# Disable implicit rules so canonical targets will work.
-.SUFFIXES:
-
-
-# Remove some rules from gmake that .SUFFIXES does not remove.
-SUFFIXES =
-
-.SUFFIXES: .hpux_make_needs_suffix_list
-
-
-# Suppress display of executed commands.
-$(VERBOSE).SILENT:
-
-
-# A target that is always out of date.
-cmake_force:
-
-.PHONY : cmake_force
-
-#=============================================================================
-# Set environment variables for the build.
-
-# The shell in which to execute make rules.
-SHELL = /bin/sh
-
-# The CMake executable.
-CMAKE_COMMAND = /usr/bin/cmake
-
-# The command to remove a file.
-RM = /usr/bin/cmake -E remove -f
-
-# Escaping for special characters.
-EQUALS = =
-
-# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /home/alain/flatbuffers
-
-# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /home/alain/flatbuffers
-
-#=============================================================================
-# Target rules for target CMakeFiles/flattests.dir
-
-# All Build rule for target.
-CMakeFiles/flattests.dir/all: CMakeFiles/flatc.dir/all
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/depend
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/build
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=38,39,40,41,42,43,44,45,46 "Built target flattests"
-.PHONY : CMakeFiles/flattests.dir/all
-
-# Include target in all.
-all: CMakeFiles/flattests.dir/all
-
-.PHONY : all
-
-# Build rule for subdir invocation for target.
-CMakeFiles/flattests.dir/rule: cmake_check_build_system
-	$(CMAKE_COMMAND) -E cmake_progress_start /home/alain/flatbuffers/CMakeFiles 27
-	$(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/flattests.dir/all
-	$(CMAKE_COMMAND) -E cmake_progress_start /home/alain/flatbuffers/CMakeFiles 0
-.PHONY : CMakeFiles/flattests.dir/rule
-
-# Convenience name for target.
-flattests: CMakeFiles/flattests.dir/rule
-
-.PHONY : flattests
-
-# clean rule for target.
-CMakeFiles/flattests.dir/clean:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/clean
-.PHONY : CMakeFiles/flattests.dir/clean
-
-# clean rule for target.
-clean: CMakeFiles/flattests.dir/clean
-
-.PHONY : clean
-
-#=============================================================================
-# Target rules for target CMakeFiles/flatc.dir
-
-# All Build rule for target.
-CMakeFiles/flatc.dir/all:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/depend
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/build
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 "Built target flatc"
-.PHONY : CMakeFiles/flatc.dir/all
-
-# Include target in all.
-all: CMakeFiles/flatc.dir/all
-
-.PHONY : all
-
-# Build rule for subdir invocation for target.
-CMakeFiles/flatc.dir/rule: cmake_check_build_system
-	$(CMAKE_COMMAND) -E cmake_progress_start /home/alain/flatbuffers/CMakeFiles 18
-	$(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/flatc.dir/all
-	$(CMAKE_COMMAND) -E cmake_progress_start /home/alain/flatbuffers/CMakeFiles 0
-.PHONY : CMakeFiles/flatc.dir/rule
-
-# Convenience name for target.
-flatc: CMakeFiles/flatc.dir/rule
-
-.PHONY : flatc
-
-# clean rule for target.
-CMakeFiles/flatc.dir/clean:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/clean
-.PHONY : CMakeFiles/flatc.dir/clean
-
-# clean rule for target.
-clean: CMakeFiles/flatc.dir/clean
-
-.PHONY : clean
-
-#=============================================================================
-# Target rules for target CMakeFiles/flatbuffers.dir
-
-# All Build rule for target.
-CMakeFiles/flatbuffers.dir/all:
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/depend
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/build
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=1,2,3,4,5,6 "Built target flatbuffers"
-.PHONY : CMakeFiles/flatbuffers.dir/all
-
-# Include target in all.
-all: CMakeFiles/flatbuffers.dir/all
-
-.PHONY : all
-
-# Build rule for subdir invocation for target.
-CMakeFiles/flatbuffers.dir/rule: cmake_check_build_system
-	$(CMAKE_COMMAND) -E cmake_progress_start /home/alain/flatbuffers/CMakeFiles 6
-	$(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/flatbuffers.dir/all
-	$(CMAKE_COMMAND) -E cmake_progress_start /home/alain/flatbuffers/CMakeFiles 0
-.PHONY : CMakeFiles/flatbuffers.dir/rule
-
-# Convenience name for target.
-flatbuffers: CMakeFiles/flatbuffers.dir/rule
-
-.PHONY : flatbuffers
-
-# clean rule for target.
-CMakeFiles/flatbuffers.dir/clean:
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/clean
-.PHONY : CMakeFiles/flatbuffers.dir/clean
-
-# clean rule for target.
-clean: CMakeFiles/flatbuffers.dir/clean
-
-.PHONY : clean
-
-#=============================================================================
-# Target rules for target CMakeFiles/flatsamplebinary.dir
-
-# All Build rule for target.
-CMakeFiles/flatsamplebinary.dir/all: CMakeFiles/flatc.dir/all
-	$(MAKE) -f CMakeFiles/flatsamplebinary.dir/build.make CMakeFiles/flatsamplebinary.dir/depend
-	$(MAKE) -f CMakeFiles/flatsamplebinary.dir/build.make CMakeFiles/flatsamplebinary.dir/build
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=27,28,29 "Built target flatsamplebinary"
-.PHONY : CMakeFiles/flatsamplebinary.dir/all
-
-# Include target in all.
-all: CMakeFiles/flatsamplebinary.dir/all
-
-.PHONY : all
-
-# Build rule for subdir invocation for target.
-CMakeFiles/flatsamplebinary.dir/rule: cmake_check_build_system
-	$(CMAKE_COMMAND) -E cmake_progress_start /home/alain/flatbuffers/CMakeFiles 21
-	$(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/flatsamplebinary.dir/all
-	$(CMAKE_COMMAND) -E cmake_progress_start /home/alain/flatbuffers/CMakeFiles 0
-.PHONY : CMakeFiles/flatsamplebinary.dir/rule
-
-# Convenience name for target.
-flatsamplebinary: CMakeFiles/flatsamplebinary.dir/rule
-
-.PHONY : flatsamplebinary
-
-# clean rule for target.
-CMakeFiles/flatsamplebinary.dir/clean:
-	$(MAKE) -f CMakeFiles/flatsamplebinary.dir/build.make CMakeFiles/flatsamplebinary.dir/clean
-.PHONY : CMakeFiles/flatsamplebinary.dir/clean
-
-# clean rule for target.
-clean: CMakeFiles/flatsamplebinary.dir/clean
-
-.PHONY : clean
-
-#=============================================================================
-# Target rules for target CMakeFiles/flathash.dir
-
-# All Build rule for target.
-CMakeFiles/flathash.dir/all:
-	$(MAKE) -f CMakeFiles/flathash.dir/build.make CMakeFiles/flathash.dir/depend
-	$(MAKE) -f CMakeFiles/flathash.dir/build.make CMakeFiles/flathash.dir/build
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=25,26 "Built target flathash"
-.PHONY : CMakeFiles/flathash.dir/all
-
-# Include target in all.
-all: CMakeFiles/flathash.dir/all
-
-.PHONY : all
-
-# Build rule for subdir invocation for target.
-CMakeFiles/flathash.dir/rule: cmake_check_build_system
-	$(CMAKE_COMMAND) -E cmake_progress_start /home/alain/flatbuffers/CMakeFiles 2
-	$(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/flathash.dir/all
-	$(CMAKE_COMMAND) -E cmake_progress_start /home/alain/flatbuffers/CMakeFiles 0
-.PHONY : CMakeFiles/flathash.dir/rule
-
-# Convenience name for target.
-flathash: CMakeFiles/flathash.dir/rule
-
-.PHONY : flathash
-
-# clean rule for target.
-CMakeFiles/flathash.dir/clean:
-	$(MAKE) -f CMakeFiles/flathash.dir/build.make CMakeFiles/flathash.dir/clean
-.PHONY : CMakeFiles/flathash.dir/clean
-
-# clean rule for target.
-clean: CMakeFiles/flathash.dir/clean
-
-.PHONY : clean
-
-#=============================================================================
-# Target rules for target CMakeFiles/flatsampletext.dir
-
-# All Build rule for target.
-CMakeFiles/flatsampletext.dir/all: CMakeFiles/flatc.dir/all
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/depend
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/build
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=30,31,32,33,34,35,36,37 "Built target flatsampletext"
-.PHONY : CMakeFiles/flatsampletext.dir/all
-
-# Include target in all.
-all: CMakeFiles/flatsampletext.dir/all
-
-.PHONY : all
-
-# Build rule for subdir invocation for target.
-CMakeFiles/flatsampletext.dir/rule: cmake_check_build_system
-	$(CMAKE_COMMAND) -E cmake_progress_start /home/alain/flatbuffers/CMakeFiles 26
-	$(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/flatsampletext.dir/all
-	$(CMAKE_COMMAND) -E cmake_progress_start /home/alain/flatbuffers/CMakeFiles 0
-.PHONY : CMakeFiles/flatsampletext.dir/rule
-
-# Convenience name for target.
-flatsampletext: CMakeFiles/flatsampletext.dir/rule
-
-.PHONY : flatsampletext
-
-# clean rule for target.
-CMakeFiles/flatsampletext.dir/clean:
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/clean
-.PHONY : CMakeFiles/flatsampletext.dir/clean
-
-# clean rule for target.
-clean: CMakeFiles/flatsampletext.dir/clean
-
-.PHONY : clean
-
-#=============================================================================
-# Special targets to cleanup operation of make.
-
-# Special rule to run CMake to check the build system integrity.
-# No rule that depends on this can have commands that come from listfiles
-# because they might be regenerated.
-cmake_check_build_system:
-	$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
-.PHONY : cmake_check_build_system
-
diff --git a/third_party/flatbuffers/CMakeFiles/TargetDirectories.txt b/third_party/flatbuffers/CMakeFiles/TargetDirectories.txt
deleted file mode 100644
index a72639e..0000000
--- a/third_party/flatbuffers/CMakeFiles/TargetDirectories.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-/home/alain/flatbuffers/CMakeFiles/rebuild_cache.dir
-/home/alain/flatbuffers/CMakeFiles/install.dir
-/home/alain/flatbuffers/CMakeFiles/flattests.dir
-/home/alain/flatbuffers/CMakeFiles/flatc.dir
-/home/alain/flatbuffers/CMakeFiles/list_install_components.dir
-/home/alain/flatbuffers/CMakeFiles/install/strip.dir
-/home/alain/flatbuffers/CMakeFiles/install/local.dir
-/home/alain/flatbuffers/CMakeFiles/flatbuffers.dir
-/home/alain/flatbuffers/CMakeFiles/flatsamplebinary.dir
-/home/alain/flatbuffers/CMakeFiles/flathash.dir
-/home/alain/flatbuffers/CMakeFiles/flatsampletext.dir
-/home/alain/flatbuffers/CMakeFiles/test.dir
-/home/alain/flatbuffers/CMakeFiles/edit_cache.dir
diff --git a/third_party/flatbuffers/CMakeFiles/cmake.check_cache b/third_party/flatbuffers/CMakeFiles/cmake.check_cache
deleted file mode 100644
index 3dccd73..0000000
--- a/third_party/flatbuffers/CMakeFiles/cmake.check_cache
+++ /dev/null
@@ -1 +0,0 @@
-# This file is generated by cmake for dependency checking of the CMakeCache.txt file
diff --git a/third_party/flatbuffers/CMakeFiles/feature_tests.bin b/third_party/flatbuffers/CMakeFiles/feature_tests.bin
deleted file mode 100755
index 4c5b364..0000000
--- a/third_party/flatbuffers/CMakeFiles/feature_tests.bin
+++ /dev/null
Binary files differ
diff --git a/third_party/flatbuffers/CMakeFiles/feature_tests.c b/third_party/flatbuffers/CMakeFiles/feature_tests.c
deleted file mode 100644
index 6590dde..0000000
--- a/third_party/flatbuffers/CMakeFiles/feature_tests.c
+++ /dev/null
@@ -1,34 +0,0 @@
-
-  const char features[] = {"\n"
-"C_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404
-"1"
-#else
-"0"
-#endif
-"c_function_prototypes\n"
-"C_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-"1"
-#else
-"0"
-#endif
-"c_restrict\n"
-"C_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201000L
-"1"
-#else
-"0"
-#endif
-"c_static_assert\n"
-"C_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-"1"
-#else
-"0"
-#endif
-"c_variadic_macros\n"
-
-};
-
-int main(int argc, char** argv) { (void)argv; return features[argc]; }
diff --git a/third_party/flatbuffers/CMakeFiles/feature_tests.cxx b/third_party/flatbuffers/CMakeFiles/feature_tests.cxx
deleted file mode 100644
index b93418c..0000000
--- a/third_party/flatbuffers/CMakeFiles/feature_tests.cxx
+++ /dev/null
@@ -1,405 +0,0 @@
-
-  const char features[] = {"\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L
-"1"
-#else
-"0"
-#endif
-"cxx_aggregate_default_initializers\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_alias_templates\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_alignas\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_alignof\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_attributes\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_attribute_deprecated\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_auto_type\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_binary_literals\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_constexpr\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_contextual_conversions\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_decltype\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_decltype_auto\n"
-"CXX_FEATURE:"
-#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_decltype_incomplete_return_types\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_default_function_template_args\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_defaulted_functions\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_defaulted_move_initializers\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_delegating_constructors\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_deleted_functions\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_digit_separators\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_enum_forward_declarations\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_explicit_conversions\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_extended_friend_declarations\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_extern_templates\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_final\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_func_identifier\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_generalized_initializers\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_generic_lambdas\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_inheriting_constructors\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_inline_namespaces\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_lambdas\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_lambda_init_captures\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_local_type_template_args\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_long_long_type\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_noexcept\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_nonstatic_member_init\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_nullptr\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_override\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_range_for\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_raw_string_literals\n"
-"CXX_FEATURE:"
-#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_reference_qualified_functions\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L
-"1"
-#else
-"0"
-#endif
-"cxx_relaxed_constexpr\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_return_type_deduction\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_right_angle_brackets\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_rvalue_references\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_sizeof_member\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_static_assert\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_strong_enums\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && __cplusplus
-"1"
-#else
-"0"
-#endif
-"cxx_template_template_parameters\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_thread_local\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_trailing_return_types\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_unicode_literals\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_uniform_initialization\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_unrestricted_unions\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_user_literals\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L
-"1"
-#else
-"0"
-#endif
-"cxx_variable_templates\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_variadic_macros\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_variadic_templates\n"
-
-};
-
-int main(int argc, char** argv) { (void)argv; return features[argc]; }
diff --git a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/CXX.includecache b/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/CXX.includecache
deleted file mode 100644
index ba96c23..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/CXX.includecache
+++ /dev/null
@@ -1,146 +0,0 @@
-#IncludeRegexLine: ^[ 	]*#[ 	]*(include|import)[ 	]*[<"]([^">]+)([">])
-
-#IncludeRegexScan: ^.*$
-
-#IncludeRegexComplain: ^$
-
-#IncludeRegexTransform: 
-
-/home/alain/flatbuffers/src/code_generators.cpp
-flatbuffers/code_generators.h
-/home/alain/flatbuffers/src/flatbuffers/code_generators.h
-assert.h
--
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/idl_gen_text.cpp
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/src/flatbuffers/flatbuffers.h
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/idl_parser.cpp
-algorithm
--
-list
--
-math.h
--
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/reflection.cpp
-flatbuffers/reflection.h
-/home/alain/flatbuffers/src/flatbuffers/reflection.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/util.cpp
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-include/flatbuffers/code_generators.h
-map
--
-sstream
--
-flatbuffers/idl.h
-include/flatbuffers/flatbuffers/idl.h
-
-include/flatbuffers/flatbuffers.h
-assert.h
--
-cstdint
--
-cstddef
--
-cstdlib
--
-cstring
--
-string
--
-utility
--
-utility.h
--
-type_traits
--
-vector
--
-set
--
-algorithm
--
-memory
--
-functional
--
-
-include/flatbuffers/hash.h
-cstdint
--
-cstring
--
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-
-include/flatbuffers/idl.h
-map
--
-stack
--
-memory
--
-functional
--
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-flatbuffers/hash.h
-include/flatbuffers/flatbuffers/hash.h
-flatbuffers/reflection.h
-include/flatbuffers/flatbuffers/reflection.h
-
-include/flatbuffers/reflection.h
-flatbuffers/reflection_generated.h
-include/flatbuffers/flatbuffers/reflection_generated.h
-
-include/flatbuffers/reflection_generated.h
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-
-include/flatbuffers/util.h
-fstream
--
-iomanip
--
-string
--
-sstream
--
-stdint.h
--
-stdlib.h
--
-assert.h
--
-windows.h
--
-winbase.h
--
-direct.h
--
-limits.h
--
-sys/types.h
--
-sys/stat.h
--
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/DependInfo.cmake b/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/DependInfo.cmake
deleted file mode 100644
index 1561d48..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/DependInfo.cmake
+++ /dev/null
@@ -1,28 +0,0 @@
-# The set of languages for which implicit dependencies are needed:
-set(CMAKE_DEPENDS_LANGUAGES
-  "CXX"
-  )
-# The set of files for implicit dependencies of each language:
-set(CMAKE_DEPENDS_CHECK_CXX
-  "/home/alain/flatbuffers/src/code_generators.cpp" "/home/alain/flatbuffers/CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o"
-  "/home/alain/flatbuffers/src/idl_gen_text.cpp" "/home/alain/flatbuffers/CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o"
-  "/home/alain/flatbuffers/src/idl_parser.cpp" "/home/alain/flatbuffers/CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o"
-  "/home/alain/flatbuffers/src/reflection.cpp" "/home/alain/flatbuffers/CMakeFiles/flatbuffers.dir/src/reflection.cpp.o"
-  "/home/alain/flatbuffers/src/util.cpp" "/home/alain/flatbuffers/CMakeFiles/flatbuffers.dir/src/util.cpp.o"
-  )
-set(CMAKE_CXX_COMPILER_ID "GNU")
-
-# The include file search paths:
-set(CMAKE_CXX_TARGET_INCLUDE_PATH
-  "include"
-  "grpc"
-  "tests"
-  "samples"
-  )
-
-# Targets to which this target links.
-set(CMAKE_TARGET_LINKED_INFO_FILES
-  )
-
-# Fortran module output directory.
-set(CMAKE_Fortran_TARGET_MODULE_DIR "")
diff --git a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/build.make b/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/build.make
deleted file mode 100644
index a98c2a1..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/build.make
+++ /dev/null
@@ -1,222 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# Delete rule output on recipe failure.
-.DELETE_ON_ERROR:
-
-
-#=============================================================================
-# Special targets provided by cmake.
-
-# Disable implicit rules so canonical targets will work.
-.SUFFIXES:
-
-
-# Remove some rules from gmake that .SUFFIXES does not remove.
-SUFFIXES =
-
-.SUFFIXES: .hpux_make_needs_suffix_list
-
-
-# Suppress display of executed commands.
-$(VERBOSE).SILENT:
-
-
-# A target that is always out of date.
-cmake_force:
-
-.PHONY : cmake_force
-
-#=============================================================================
-# Set environment variables for the build.
-
-# The shell in which to execute make rules.
-SHELL = /bin/sh
-
-# The CMake executable.
-CMAKE_COMMAND = /usr/bin/cmake
-
-# The command to remove a file.
-RM = /usr/bin/cmake -E remove -f
-
-# Escaping for special characters.
-EQUALS = =
-
-# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /home/alain/flatbuffers
-
-# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /home/alain/flatbuffers
-
-# Include any dependencies generated for this target.
-include CMakeFiles/flatbuffers.dir/depend.make
-
-# Include the progress variables for this target.
-include CMakeFiles/flatbuffers.dir/progress.make
-
-# Include the compile flags for this target's objects.
-include CMakeFiles/flatbuffers.dir/flags.make
-
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o: CMakeFiles/flatbuffers.dir/flags.make
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o: src/code_generators.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o -c /home/alain/flatbuffers/src/code_generators.cpp
-
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatbuffers.dir/src/code_generators.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/code_generators.cpp > CMakeFiles/flatbuffers.dir/src/code_generators.cpp.i
-
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatbuffers.dir/src/code_generators.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/code_generators.cpp -o CMakeFiles/flatbuffers.dir/src/code_generators.cpp.s
-
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o.requires
-
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o.provides: CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o.provides.build
-.PHONY : CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o.provides
-
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o.provides.build: CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o
-
-
-CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o: CMakeFiles/flatbuffers.dir/flags.make
-CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o: src/idl_parser.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o -c /home/alain/flatbuffers/src/idl_parser.cpp
-
-CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_parser.cpp > CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.i
-
-CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_parser.cpp -o CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.s
-
-CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o.requires
-
-CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o.provides: CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o.provides.build
-.PHONY : CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o.provides
-
-CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o.provides.build: CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o
-
-
-CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o: CMakeFiles/flatbuffers.dir/flags.make
-CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o: src/idl_gen_text.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o -c /home/alain/flatbuffers/src/idl_gen_text.cpp
-
-CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_gen_text.cpp > CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.i
-
-CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_gen_text.cpp -o CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.s
-
-CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o.requires
-
-CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o.provides: CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o.provides.build
-.PHONY : CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o.provides
-
-CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o.provides.build: CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o
-
-
-CMakeFiles/flatbuffers.dir/src/reflection.cpp.o: CMakeFiles/flatbuffers.dir/flags.make
-CMakeFiles/flatbuffers.dir/src/reflection.cpp.o: src/reflection.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/flatbuffers.dir/src/reflection.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatbuffers.dir/src/reflection.cpp.o -c /home/alain/flatbuffers/src/reflection.cpp
-
-CMakeFiles/flatbuffers.dir/src/reflection.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatbuffers.dir/src/reflection.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/reflection.cpp > CMakeFiles/flatbuffers.dir/src/reflection.cpp.i
-
-CMakeFiles/flatbuffers.dir/src/reflection.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatbuffers.dir/src/reflection.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/reflection.cpp -o CMakeFiles/flatbuffers.dir/src/reflection.cpp.s
-
-CMakeFiles/flatbuffers.dir/src/reflection.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatbuffers.dir/src/reflection.cpp.o.requires
-
-CMakeFiles/flatbuffers.dir/src/reflection.cpp.o.provides: CMakeFiles/flatbuffers.dir/src/reflection.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/reflection.cpp.o.provides.build
-.PHONY : CMakeFiles/flatbuffers.dir/src/reflection.cpp.o.provides
-
-CMakeFiles/flatbuffers.dir/src/reflection.cpp.o.provides.build: CMakeFiles/flatbuffers.dir/src/reflection.cpp.o
-
-
-CMakeFiles/flatbuffers.dir/src/util.cpp.o: CMakeFiles/flatbuffers.dir/flags.make
-CMakeFiles/flatbuffers.dir/src/util.cpp.o: src/util.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object CMakeFiles/flatbuffers.dir/src/util.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatbuffers.dir/src/util.cpp.o -c /home/alain/flatbuffers/src/util.cpp
-
-CMakeFiles/flatbuffers.dir/src/util.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatbuffers.dir/src/util.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/util.cpp > CMakeFiles/flatbuffers.dir/src/util.cpp.i
-
-CMakeFiles/flatbuffers.dir/src/util.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatbuffers.dir/src/util.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/util.cpp -o CMakeFiles/flatbuffers.dir/src/util.cpp.s
-
-CMakeFiles/flatbuffers.dir/src/util.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatbuffers.dir/src/util.cpp.o.requires
-
-CMakeFiles/flatbuffers.dir/src/util.cpp.o.provides: CMakeFiles/flatbuffers.dir/src/util.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/util.cpp.o.provides.build
-.PHONY : CMakeFiles/flatbuffers.dir/src/util.cpp.o.provides
-
-CMakeFiles/flatbuffers.dir/src/util.cpp.o.provides.build: CMakeFiles/flatbuffers.dir/src/util.cpp.o
-
-
-# Object files for target flatbuffers
-flatbuffers_OBJECTS = \
-"CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o" \
-"CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o" \
-"CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o" \
-"CMakeFiles/flatbuffers.dir/src/reflection.cpp.o" \
-"CMakeFiles/flatbuffers.dir/src/util.cpp.o"
-
-# External object files for target flatbuffers
-flatbuffers_EXTERNAL_OBJECTS =
-
-libflatbuffers.a: CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o
-libflatbuffers.a: CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o
-libflatbuffers.a: CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o
-libflatbuffers.a: CMakeFiles/flatbuffers.dir/src/reflection.cpp.o
-libflatbuffers.a: CMakeFiles/flatbuffers.dir/src/util.cpp.o
-libflatbuffers.a: CMakeFiles/flatbuffers.dir/build.make
-libflatbuffers.a: CMakeFiles/flatbuffers.dir/link.txt
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Linking CXX static library libflatbuffers.a"
-	$(CMAKE_COMMAND) -P CMakeFiles/flatbuffers.dir/cmake_clean_target.cmake
-	$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/flatbuffers.dir/link.txt --verbose=$(VERBOSE)
-
-# Rule to build all files generated by this target.
-CMakeFiles/flatbuffers.dir/build: libflatbuffers.a
-
-.PHONY : CMakeFiles/flatbuffers.dir/build
-
-CMakeFiles/flatbuffers.dir/requires: CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o.requires
-CMakeFiles/flatbuffers.dir/requires: CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o.requires
-CMakeFiles/flatbuffers.dir/requires: CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o.requires
-CMakeFiles/flatbuffers.dir/requires: CMakeFiles/flatbuffers.dir/src/reflection.cpp.o.requires
-CMakeFiles/flatbuffers.dir/requires: CMakeFiles/flatbuffers.dir/src/util.cpp.o.requires
-
-.PHONY : CMakeFiles/flatbuffers.dir/requires
-
-CMakeFiles/flatbuffers.dir/clean:
-	$(CMAKE_COMMAND) -P CMakeFiles/flatbuffers.dir/cmake_clean.cmake
-.PHONY : CMakeFiles/flatbuffers.dir/clean
-
-CMakeFiles/flatbuffers.dir/depend:
-	cd /home/alain/flatbuffers && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers/CMakeFiles/flatbuffers.dir/DependInfo.cmake --color=$(COLOR)
-.PHONY : CMakeFiles/flatbuffers.dir/depend
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/cmake_clean.cmake b/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/cmake_clean.cmake
deleted file mode 100644
index 82bc6d3..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/cmake_clean.cmake
+++ /dev/null
@@ -1,14 +0,0 @@
-file(REMOVE_RECURSE
-  "CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o"
-  "CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o"
-  "CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o"
-  "CMakeFiles/flatbuffers.dir/src/reflection.cpp.o"
-  "CMakeFiles/flatbuffers.dir/src/util.cpp.o"
-  "libflatbuffers.pdb"
-  "libflatbuffers.a"
-)
-
-# Per-language clean rules from dependency scanning.
-foreach(lang CXX)
-  include(CMakeFiles/flatbuffers.dir/cmake_clean_${lang}.cmake OPTIONAL)
-endforeach()
diff --git a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/cmake_clean_target.cmake b/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/cmake_clean_target.cmake
deleted file mode 100644
index dc1f66a..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/cmake_clean_target.cmake
+++ /dev/null
@@ -1,3 +0,0 @@
-file(REMOVE_RECURSE
-  "libflatbuffers.a"
-)
diff --git a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/depend.internal b/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/depend.internal
deleted file mode 100644
index a6e31a9..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/depend.internal
+++ /dev/null
@@ -1,38 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o
- /home/alain/flatbuffers/src/code_generators.cpp
- include/flatbuffers/code_generators.h
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o
- /home/alain/flatbuffers/src/idl_gen_text.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o
- /home/alain/flatbuffers/src/idl_parser.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatbuffers.dir/src/reflection.cpp.o
- /home/alain/flatbuffers/src/reflection.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatbuffers.dir/src/util.cpp.o
- /home/alain/flatbuffers/src/util.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/util.h
diff --git a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/depend.make b/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/depend.make
deleted file mode 100644
index 4e6687a..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/depend.make
+++ /dev/null
@@ -1,38 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o: src/code_generators.cpp
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o: include/flatbuffers/code_generators.h
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o: src/idl_gen_text.cpp
-CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o: src/idl_parser.cpp
-CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatbuffers.dir/src/reflection.cpp.o: src/reflection.cpp
-CMakeFiles/flatbuffers.dir/src/reflection.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatbuffers.dir/src/reflection.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatbuffers.dir/src/reflection.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatbuffers.dir/src/reflection.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatbuffers.dir/src/util.cpp.o: src/util.cpp
-CMakeFiles/flatbuffers.dir/src/util.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatbuffers.dir/src/util.cpp.o: include/flatbuffers/util.h
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/flags.make b/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/flags.make
deleted file mode 100644
index 6fddb3a..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/flags.make
+++ /dev/null
@@ -1,10 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# compile CXX with /usr/bin/c++
-CXX_FLAGS =  -std=c++0x -Wall -pedantic -Werror -Wextra -Werror=shadow -fsigned-char  
-
-CXX_DEFINES = 
-
-CXX_INCLUDES = -I/home/alain/flatbuffers/include -I/home/alain/flatbuffers/grpc -I/home/alain/flatbuffers/tests -I/home/alain/flatbuffers/samples 
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/link.txt b/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/link.txt
deleted file mode 100644
index d8000a6..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/link.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-/usr/bin/ar qc libflatbuffers.a  CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o CMakeFiles/flatbuffers.dir/src/reflection.cpp.o CMakeFiles/flatbuffers.dir/src/util.cpp.o
-/usr/bin/ranlib libflatbuffers.a
diff --git a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/progress.make b/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/progress.make
deleted file mode 100644
index daba7fa..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatbuffers.dir/progress.make
+++ /dev/null
@@ -1,7 +0,0 @@
-CMAKE_PROGRESS_1 = 1
-CMAKE_PROGRESS_2 = 2
-CMAKE_PROGRESS_3 = 3
-CMAKE_PROGRESS_4 = 4
-CMAKE_PROGRESS_5 = 5
-CMAKE_PROGRESS_6 = 6
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatc.dir/CXX.includecache b/third_party/flatbuffers/CMakeFiles/flatc.dir/CXX.includecache
deleted file mode 100644
index eef92cd..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatc.dir/CXX.includecache
+++ /dev/null
@@ -1,316 +0,0 @@
-#IncludeRegexLine: ^[ 	]*#[ 	]*(include|import)[ 	]*[<"]([^">]+)([">])
-
-#IncludeRegexScan: ^.*$
-
-#IncludeRegexComplain: ^$
-
-#IncludeRegexTransform: 
-
-/home/alain/flatbuffers/grpc/src/compiler/cpp_generator.cc
-map
--
-src/compiler/cpp_generator.h
-/home/alain/flatbuffers/grpc/src/compiler/src/compiler/cpp_generator.h
-sstream
--
-
-/home/alain/flatbuffers/grpc/src/compiler/go_generator.cc
-map
--
-cctype
--
-sstream
--
-src/compiler/go_generator.h
-/home/alain/flatbuffers/grpc/src/compiler/src/compiler/go_generator.h
-
-/home/alain/flatbuffers/src/code_generators.cpp
-flatbuffers/code_generators.h
-/home/alain/flatbuffers/src/flatbuffers/code_generators.h
-assert.h
--
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/flatc.cpp
-flatbuffers/flatc.h
-/home/alain/flatbuffers/src/flatbuffers/flatc.h
-
-/home/alain/flatbuffers/src/flatc_main.cpp
-flatbuffers/flatc.h
-/home/alain/flatbuffers/src/flatbuffers/flatc.h
-
-/home/alain/flatbuffers/src/idl_gen_cpp.cpp
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/src/flatbuffers/flatbuffers.h
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-flatbuffers/code_generators.h
-/home/alain/flatbuffers/src/flatbuffers/code_generators.h
-
-/home/alain/flatbuffers/src/idl_gen_fbs.cpp
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/src/flatbuffers/flatbuffers.h
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-flatbuffers/code_generators.h
-/home/alain/flatbuffers/src/flatbuffers/code_generators.h
-
-/home/alain/flatbuffers/src/idl_gen_general.cpp
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/src/flatbuffers/flatbuffers.h
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-flatbuffers/code_generators.h
-/home/alain/flatbuffers/src/flatbuffers/code_generators.h
-algorithm
--
-
-/home/alain/flatbuffers/src/idl_gen_go.cpp
-string
--
-sstream
--
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/src/flatbuffers/flatbuffers.h
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-flatbuffers/code_generators.h
-/home/alain/flatbuffers/src/flatbuffers/code_generators.h
-direct.h
--
-sys/stat.h
--
-
-/home/alain/flatbuffers/src/idl_gen_grpc.cpp
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/src/flatbuffers/flatbuffers.h
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-flatbuffers/code_generators.h
-/home/alain/flatbuffers/src/flatbuffers/code_generators.h
-src/compiler/cpp_generator.h
-/home/alain/flatbuffers/src/src/compiler/cpp_generator.h
-src/compiler/go_generator.h
-/home/alain/flatbuffers/src/src/compiler/go_generator.h
-
-/home/alain/flatbuffers/src/idl_gen_js.cpp
-unordered_set
--
-unordered_map
--
-cassert
--
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/src/flatbuffers/flatbuffers.h
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-flatbuffers/code_generators.h
-/home/alain/flatbuffers/src/flatbuffers/code_generators.h
-
-/home/alain/flatbuffers/src/idl_gen_php.cpp
-string
--
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/src/flatbuffers/flatbuffers.h
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-flatbuffers/code_generators.h
-/home/alain/flatbuffers/src/flatbuffers/code_generators.h
-
-/home/alain/flatbuffers/src/idl_gen_python.cpp
-string
--
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/src/flatbuffers/flatbuffers.h
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-flatbuffers/code_generators.h
-/home/alain/flatbuffers/src/flatbuffers/code_generators.h
-
-/home/alain/flatbuffers/src/idl_gen_text.cpp
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/src/flatbuffers/flatbuffers.h
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/idl_parser.cpp
-algorithm
--
-list
--
-math.h
--
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/reflection.cpp
-flatbuffers/reflection.h
-/home/alain/flatbuffers/src/flatbuffers/reflection.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/util.cpp
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-grpc/src/compiler/cpp_generator.h
-memory
--
-vector
--
-src/compiler/schema_interface.h
-grpc/src/compiler/src/compiler/schema_interface.h
-
-grpc/src/compiler/go_generator.h
-memory
--
-vector
--
-src/compiler/schema_interface.h
-grpc/src/compiler/src/compiler/schema_interface.h
-
-grpc/src/compiler/schema_interface.h
-map
--
-memory
--
-vector
--
-string
--
-
-include/flatbuffers/code_generators.h
-map
--
-sstream
--
-flatbuffers/idl.h
-include/flatbuffers/flatbuffers/idl.h
-
-include/flatbuffers/flatbuffers.h
-assert.h
--
-cstdint
--
-cstddef
--
-cstdlib
--
-cstring
--
-string
--
-utility
--
-utility.h
--
-type_traits
--
-vector
--
-set
--
-algorithm
--
-memory
--
-functional
--
-
-include/flatbuffers/flatc.h
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-flatbuffers/idl.h
-include/flatbuffers/flatbuffers/idl.h
-flatbuffers/util.h
-include/flatbuffers/flatbuffers/util.h
-functional
--
-limits
--
-string
--
-
-include/flatbuffers/hash.h
-cstdint
--
-cstring
--
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-
-include/flatbuffers/idl.h
-map
--
-stack
--
-memory
--
-functional
--
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-flatbuffers/hash.h
-include/flatbuffers/flatbuffers/hash.h
-flatbuffers/reflection.h
-include/flatbuffers/flatbuffers/reflection.h
-
-include/flatbuffers/reflection.h
-flatbuffers/reflection_generated.h
-include/flatbuffers/flatbuffers/reflection_generated.h
-
-include/flatbuffers/reflection_generated.h
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-
-include/flatbuffers/util.h
-fstream
--
-iomanip
--
-string
--
-sstream
--
-stdint.h
--
-stdlib.h
--
-assert.h
--
-windows.h
--
-winbase.h
--
-direct.h
--
-limits.h
--
-sys/types.h
--
-sys/stat.h
--
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatc.dir/DependInfo.cmake b/third_party/flatbuffers/CMakeFiles/flatc.dir/DependInfo.cmake
deleted file mode 100644
index 72846b0..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatc.dir/DependInfo.cmake
+++ /dev/null
@@ -1,40 +0,0 @@
-# The set of languages for which implicit dependencies are needed:
-set(CMAKE_DEPENDS_LANGUAGES
-  "CXX"
-  )
-# The set of files for implicit dependencies of each language:
-set(CMAKE_DEPENDS_CHECK_CXX
-  "/home/alain/flatbuffers/grpc/src/compiler/cpp_generator.cc" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o"
-  "/home/alain/flatbuffers/grpc/src/compiler/go_generator.cc" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o"
-  "/home/alain/flatbuffers/src/code_generators.cpp" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/src/code_generators.cpp.o"
-  "/home/alain/flatbuffers/src/flatc.cpp" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/src/flatc.cpp.o"
-  "/home/alain/flatbuffers/src/flatc_main.cpp" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/src/flatc_main.cpp.o"
-  "/home/alain/flatbuffers/src/idl_gen_cpp.cpp" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o"
-  "/home/alain/flatbuffers/src/idl_gen_fbs.cpp" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o"
-  "/home/alain/flatbuffers/src/idl_gen_general.cpp" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o"
-  "/home/alain/flatbuffers/src/idl_gen_go.cpp" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o"
-  "/home/alain/flatbuffers/src/idl_gen_grpc.cpp" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o"
-  "/home/alain/flatbuffers/src/idl_gen_js.cpp" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o"
-  "/home/alain/flatbuffers/src/idl_gen_php.cpp" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o"
-  "/home/alain/flatbuffers/src/idl_gen_python.cpp" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o"
-  "/home/alain/flatbuffers/src/idl_gen_text.cpp" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o"
-  "/home/alain/flatbuffers/src/idl_parser.cpp" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/src/idl_parser.cpp.o"
-  "/home/alain/flatbuffers/src/reflection.cpp" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/src/reflection.cpp.o"
-  "/home/alain/flatbuffers/src/util.cpp" "/home/alain/flatbuffers/CMakeFiles/flatc.dir/src/util.cpp.o"
-  )
-set(CMAKE_CXX_COMPILER_ID "GNU")
-
-# The include file search paths:
-set(CMAKE_CXX_TARGET_INCLUDE_PATH
-  "include"
-  "grpc"
-  "tests"
-  "samples"
-  )
-
-# Targets to which this target links.
-set(CMAKE_TARGET_LINKED_INFO_FILES
-  )
-
-# Fortran module output directory.
-set(CMAKE_Fortran_TARGET_MODULE_DIR "")
diff --git a/third_party/flatbuffers/CMakeFiles/flatc.dir/build.make b/third_party/flatbuffers/CMakeFiles/flatc.dir/build.make
deleted file mode 100644
index 39d3f8c..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatc.dir/build.make
+++ /dev/null
@@ -1,545 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# Delete rule output on recipe failure.
-.DELETE_ON_ERROR:
-
-
-#=============================================================================
-# Special targets provided by cmake.
-
-# Disable implicit rules so canonical targets will work.
-.SUFFIXES:
-
-
-# Remove some rules from gmake that .SUFFIXES does not remove.
-SUFFIXES =
-
-.SUFFIXES: .hpux_make_needs_suffix_list
-
-
-# Suppress display of executed commands.
-$(VERBOSE).SILENT:
-
-
-# A target that is always out of date.
-cmake_force:
-
-.PHONY : cmake_force
-
-#=============================================================================
-# Set environment variables for the build.
-
-# The shell in which to execute make rules.
-SHELL = /bin/sh
-
-# The CMake executable.
-CMAKE_COMMAND = /usr/bin/cmake
-
-# The command to remove a file.
-RM = /usr/bin/cmake -E remove -f
-
-# Escaping for special characters.
-EQUALS = =
-
-# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /home/alain/flatbuffers
-
-# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /home/alain/flatbuffers
-
-# Include any dependencies generated for this target.
-include CMakeFiles/flatc.dir/depend.make
-
-# Include the progress variables for this target.
-include CMakeFiles/flatc.dir/progress.make
-
-# Include the compile flags for this target's objects.
-include CMakeFiles/flatc.dir/flags.make
-
-CMakeFiles/flatc.dir/src/code_generators.cpp.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/src/code_generators.cpp.o: src/code_generators.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/flatc.dir/src/code_generators.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/src/code_generators.cpp.o -c /home/alain/flatbuffers/src/code_generators.cpp
-
-CMakeFiles/flatc.dir/src/code_generators.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/src/code_generators.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/code_generators.cpp > CMakeFiles/flatc.dir/src/code_generators.cpp.i
-
-CMakeFiles/flatc.dir/src/code_generators.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/src/code_generators.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/code_generators.cpp -o CMakeFiles/flatc.dir/src/code_generators.cpp.s
-
-CMakeFiles/flatc.dir/src/code_generators.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/src/code_generators.cpp.o.requires
-
-CMakeFiles/flatc.dir/src/code_generators.cpp.o.provides: CMakeFiles/flatc.dir/src/code_generators.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/code_generators.cpp.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/src/code_generators.cpp.o.provides
-
-CMakeFiles/flatc.dir/src/code_generators.cpp.o.provides.build: CMakeFiles/flatc.dir/src/code_generators.cpp.o
-
-
-CMakeFiles/flatc.dir/src/idl_parser.cpp.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/src/idl_parser.cpp.o: src/idl_parser.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/flatc.dir/src/idl_parser.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/src/idl_parser.cpp.o -c /home/alain/flatbuffers/src/idl_parser.cpp
-
-CMakeFiles/flatc.dir/src/idl_parser.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/src/idl_parser.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_parser.cpp > CMakeFiles/flatc.dir/src/idl_parser.cpp.i
-
-CMakeFiles/flatc.dir/src/idl_parser.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/src/idl_parser.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_parser.cpp -o CMakeFiles/flatc.dir/src/idl_parser.cpp.s
-
-CMakeFiles/flatc.dir/src/idl_parser.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/src/idl_parser.cpp.o.requires
-
-CMakeFiles/flatc.dir/src/idl_parser.cpp.o.provides: CMakeFiles/flatc.dir/src/idl_parser.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_parser.cpp.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/src/idl_parser.cpp.o.provides
-
-CMakeFiles/flatc.dir/src/idl_parser.cpp.o.provides.build: CMakeFiles/flatc.dir/src/idl_parser.cpp.o
-
-
-CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o: src/idl_gen_text.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o -c /home/alain/flatbuffers/src/idl_gen_text.cpp
-
-CMakeFiles/flatc.dir/src/idl_gen_text.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/src/idl_gen_text.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_gen_text.cpp > CMakeFiles/flatc.dir/src/idl_gen_text.cpp.i
-
-CMakeFiles/flatc.dir/src/idl_gen_text.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/src/idl_gen_text.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_gen_text.cpp -o CMakeFiles/flatc.dir/src/idl_gen_text.cpp.s
-
-CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o.requires
-
-CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o.provides: CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o.provides
-
-CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o.provides.build: CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o
-
-
-CMakeFiles/flatc.dir/src/reflection.cpp.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/src/reflection.cpp.o: src/reflection.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/flatc.dir/src/reflection.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/src/reflection.cpp.o -c /home/alain/flatbuffers/src/reflection.cpp
-
-CMakeFiles/flatc.dir/src/reflection.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/src/reflection.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/reflection.cpp > CMakeFiles/flatc.dir/src/reflection.cpp.i
-
-CMakeFiles/flatc.dir/src/reflection.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/src/reflection.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/reflection.cpp -o CMakeFiles/flatc.dir/src/reflection.cpp.s
-
-CMakeFiles/flatc.dir/src/reflection.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/src/reflection.cpp.o.requires
-
-CMakeFiles/flatc.dir/src/reflection.cpp.o.provides: CMakeFiles/flatc.dir/src/reflection.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/reflection.cpp.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/src/reflection.cpp.o.provides
-
-CMakeFiles/flatc.dir/src/reflection.cpp.o.provides.build: CMakeFiles/flatc.dir/src/reflection.cpp.o
-
-
-CMakeFiles/flatc.dir/src/util.cpp.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/src/util.cpp.o: src/util.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object CMakeFiles/flatc.dir/src/util.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/src/util.cpp.o -c /home/alain/flatbuffers/src/util.cpp
-
-CMakeFiles/flatc.dir/src/util.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/src/util.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/util.cpp > CMakeFiles/flatc.dir/src/util.cpp.i
-
-CMakeFiles/flatc.dir/src/util.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/src/util.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/util.cpp -o CMakeFiles/flatc.dir/src/util.cpp.s
-
-CMakeFiles/flatc.dir/src/util.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/src/util.cpp.o.requires
-
-CMakeFiles/flatc.dir/src/util.cpp.o.provides: CMakeFiles/flatc.dir/src/util.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/util.cpp.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/src/util.cpp.o.provides
-
-CMakeFiles/flatc.dir/src/util.cpp.o.provides.build: CMakeFiles/flatc.dir/src/util.cpp.o
-
-
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o: src/idl_gen_cpp.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o -c /home/alain/flatbuffers/src/idl_gen_cpp.cpp
-
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_gen_cpp.cpp > CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.i
-
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_gen_cpp.cpp -o CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.s
-
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o.requires
-
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o.provides: CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o.provides
-
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o.provides.build: CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o
-
-
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o: src/idl_gen_general.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o -c /home/alain/flatbuffers/src/idl_gen_general.cpp
-
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/src/idl_gen_general.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_gen_general.cpp > CMakeFiles/flatc.dir/src/idl_gen_general.cpp.i
-
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/src/idl_gen_general.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_gen_general.cpp -o CMakeFiles/flatc.dir/src/idl_gen_general.cpp.s
-
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o.requires
-
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o.provides: CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o.provides
-
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o.provides.build: CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o
-
-
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o: src/idl_gen_go.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o -c /home/alain/flatbuffers/src/idl_gen_go.cpp
-
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/src/idl_gen_go.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_gen_go.cpp > CMakeFiles/flatc.dir/src/idl_gen_go.cpp.i
-
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/src/idl_gen_go.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_gen_go.cpp -o CMakeFiles/flatc.dir/src/idl_gen_go.cpp.s
-
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o.requires
-
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o.provides: CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o.provides
-
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o.provides.build: CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o
-
-
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o: src/idl_gen_js.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building CXX object CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o -c /home/alain/flatbuffers/src/idl_gen_js.cpp
-
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/src/idl_gen_js.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_gen_js.cpp > CMakeFiles/flatc.dir/src/idl_gen_js.cpp.i
-
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/src/idl_gen_js.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_gen_js.cpp -o CMakeFiles/flatc.dir/src/idl_gen_js.cpp.s
-
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o.requires
-
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o.provides: CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o.provides
-
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o.provides.build: CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o
-
-
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o: src/idl_gen_php.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building CXX object CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o -c /home/alain/flatbuffers/src/idl_gen_php.cpp
-
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/src/idl_gen_php.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_gen_php.cpp > CMakeFiles/flatc.dir/src/idl_gen_php.cpp.i
-
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/src/idl_gen_php.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_gen_php.cpp -o CMakeFiles/flatc.dir/src/idl_gen_php.cpp.s
-
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o.requires
-
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o.provides: CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o.provides
-
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o.provides.build: CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o
-
-
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o: src/idl_gen_python.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building CXX object CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o -c /home/alain/flatbuffers/src/idl_gen_python.cpp
-
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/src/idl_gen_python.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_gen_python.cpp > CMakeFiles/flatc.dir/src/idl_gen_python.cpp.i
-
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/src/idl_gen_python.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_gen_python.cpp -o CMakeFiles/flatc.dir/src/idl_gen_python.cpp.s
-
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o.requires
-
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o.provides: CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o.provides
-
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o.provides.build: CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o
-
-
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o: src/idl_gen_fbs.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building CXX object CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o -c /home/alain/flatbuffers/src/idl_gen_fbs.cpp
-
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_gen_fbs.cpp > CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.i
-
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_gen_fbs.cpp -o CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.s
-
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o.requires
-
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o.provides: CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o.provides
-
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o.provides.build: CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o
-
-
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o: src/idl_gen_grpc.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building CXX object CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o -c /home/alain/flatbuffers/src/idl_gen_grpc.cpp
-
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_gen_grpc.cpp > CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.i
-
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_gen_grpc.cpp -o CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.s
-
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o.requires
-
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o.provides: CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o.provides
-
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o.provides.build: CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o
-
-
-CMakeFiles/flatc.dir/src/flatc.cpp.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/src/flatc.cpp.o: src/flatc.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building CXX object CMakeFiles/flatc.dir/src/flatc.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/src/flatc.cpp.o -c /home/alain/flatbuffers/src/flatc.cpp
-
-CMakeFiles/flatc.dir/src/flatc.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/src/flatc.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/flatc.cpp > CMakeFiles/flatc.dir/src/flatc.cpp.i
-
-CMakeFiles/flatc.dir/src/flatc.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/src/flatc.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/flatc.cpp -o CMakeFiles/flatc.dir/src/flatc.cpp.s
-
-CMakeFiles/flatc.dir/src/flatc.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/src/flatc.cpp.o.requires
-
-CMakeFiles/flatc.dir/src/flatc.cpp.o.provides: CMakeFiles/flatc.dir/src/flatc.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/flatc.cpp.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/src/flatc.cpp.o.provides
-
-CMakeFiles/flatc.dir/src/flatc.cpp.o.provides.build: CMakeFiles/flatc.dir/src/flatc.cpp.o
-
-
-CMakeFiles/flatc.dir/src/flatc_main.cpp.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/src/flatc_main.cpp.o: src/flatc_main.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building CXX object CMakeFiles/flatc.dir/src/flatc_main.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/src/flatc_main.cpp.o -c /home/alain/flatbuffers/src/flatc_main.cpp
-
-CMakeFiles/flatc.dir/src/flatc_main.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/src/flatc_main.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/flatc_main.cpp > CMakeFiles/flatc.dir/src/flatc_main.cpp.i
-
-CMakeFiles/flatc.dir/src/flatc_main.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/src/flatc_main.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/flatc_main.cpp -o CMakeFiles/flatc.dir/src/flatc_main.cpp.s
-
-CMakeFiles/flatc.dir/src/flatc_main.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/src/flatc_main.cpp.o.requires
-
-CMakeFiles/flatc.dir/src/flatc_main.cpp.o.provides: CMakeFiles/flatc.dir/src/flatc_main.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/flatc_main.cpp.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/src/flatc_main.cpp.o.provides
-
-CMakeFiles/flatc.dir/src/flatc_main.cpp.o.provides.build: CMakeFiles/flatc.dir/src/flatc_main.cpp.o
-
-
-CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o: grpc/src/compiler/cpp_generator.cc
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Building CXX object CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o -c /home/alain/flatbuffers/grpc/src/compiler/cpp_generator.cc
-
-CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/grpc/src/compiler/cpp_generator.cc > CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.i
-
-CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/grpc/src/compiler/cpp_generator.cc -o CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.s
-
-CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o.requires
-
-CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o.provides: CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o.provides
-
-CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o.provides.build: CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o
-
-
-CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o: CMakeFiles/flatc.dir/flags.make
-CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o: grpc/src/compiler/go_generator.cc
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_17) "Building CXX object CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o -c /home/alain/flatbuffers/grpc/src/compiler/go_generator.cc
-
-CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/grpc/src/compiler/go_generator.cc > CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.i
-
-CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/grpc/src/compiler/go_generator.cc -o CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.s
-
-CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o.requires:
-
-.PHONY : CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o.requires
-
-CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o.provides: CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o.requires
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o.provides.build
-.PHONY : CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o.provides
-
-CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o.provides.build: CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o
-
-
-# Object files for target flatc
-flatc_OBJECTS = \
-"CMakeFiles/flatc.dir/src/code_generators.cpp.o" \
-"CMakeFiles/flatc.dir/src/idl_parser.cpp.o" \
-"CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o" \
-"CMakeFiles/flatc.dir/src/reflection.cpp.o" \
-"CMakeFiles/flatc.dir/src/util.cpp.o" \
-"CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o" \
-"CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o" \
-"CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o" \
-"CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o" \
-"CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o" \
-"CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o" \
-"CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o" \
-"CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o" \
-"CMakeFiles/flatc.dir/src/flatc.cpp.o" \
-"CMakeFiles/flatc.dir/src/flatc_main.cpp.o" \
-"CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o" \
-"CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o"
-
-# External object files for target flatc
-flatc_EXTERNAL_OBJECTS =
-
-flatc: CMakeFiles/flatc.dir/src/code_generators.cpp.o
-flatc: CMakeFiles/flatc.dir/src/idl_parser.cpp.o
-flatc: CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o
-flatc: CMakeFiles/flatc.dir/src/reflection.cpp.o
-flatc: CMakeFiles/flatc.dir/src/util.cpp.o
-flatc: CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o
-flatc: CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o
-flatc: CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o
-flatc: CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o
-flatc: CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o
-flatc: CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o
-flatc: CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o
-flatc: CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o
-flatc: CMakeFiles/flatc.dir/src/flatc.cpp.o
-flatc: CMakeFiles/flatc.dir/src/flatc_main.cpp.o
-flatc: CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o
-flatc: CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o
-flatc: CMakeFiles/flatc.dir/build.make
-flatc: CMakeFiles/flatc.dir/link.txt
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_18) "Linking CXX executable flatc"
-	$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/flatc.dir/link.txt --verbose=$(VERBOSE)
-
-# Rule to build all files generated by this target.
-CMakeFiles/flatc.dir/build: flatc
-
-.PHONY : CMakeFiles/flatc.dir/build
-
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/src/code_generators.cpp.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/src/idl_parser.cpp.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/src/reflection.cpp.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/src/util.cpp.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/src/flatc.cpp.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/src/flatc_main.cpp.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o.requires
-CMakeFiles/flatc.dir/requires: CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o.requires
-
-.PHONY : CMakeFiles/flatc.dir/requires
-
-CMakeFiles/flatc.dir/clean:
-	$(CMAKE_COMMAND) -P CMakeFiles/flatc.dir/cmake_clean.cmake
-.PHONY : CMakeFiles/flatc.dir/clean
-
-CMakeFiles/flatc.dir/depend:
-	cd /home/alain/flatbuffers && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers/CMakeFiles/flatc.dir/DependInfo.cmake --color=$(COLOR)
-.PHONY : CMakeFiles/flatc.dir/depend
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatc.dir/cmake_clean.cmake b/third_party/flatbuffers/CMakeFiles/flatc.dir/cmake_clean.cmake
deleted file mode 100644
index 8bae0d8..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatc.dir/cmake_clean.cmake
+++ /dev/null
@@ -1,26 +0,0 @@
-file(REMOVE_RECURSE
-  "CMakeFiles/flatc.dir/src/code_generators.cpp.o"
-  "CMakeFiles/flatc.dir/src/idl_parser.cpp.o"
-  "CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o"
-  "CMakeFiles/flatc.dir/src/reflection.cpp.o"
-  "CMakeFiles/flatc.dir/src/util.cpp.o"
-  "CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o"
-  "CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o"
-  "CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o"
-  "CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o"
-  "CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o"
-  "CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o"
-  "CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o"
-  "CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o"
-  "CMakeFiles/flatc.dir/src/flatc.cpp.o"
-  "CMakeFiles/flatc.dir/src/flatc_main.cpp.o"
-  "CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o"
-  "CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o"
-  "flatc.pdb"
-  "flatc"
-)
-
-# Per-language clean rules from dependency scanning.
-foreach(lang CXX)
-  include(CMakeFiles/flatc.dir/cmake_clean_${lang}.cmake OPTIONAL)
-endforeach()
diff --git a/third_party/flatbuffers/CMakeFiles/flatc.dir/depend.internal b/third_party/flatbuffers/CMakeFiles/flatc.dir/depend.internal
deleted file mode 100644
index 1ffab00..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatc.dir/depend.internal
+++ /dev/null
@@ -1,139 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o
- /home/alain/flatbuffers/grpc/src/compiler/cpp_generator.cc
- grpc/src/compiler/cpp_generator.h
- grpc/src/compiler/schema_interface.h
-CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o
- /home/alain/flatbuffers/grpc/src/compiler/go_generator.cc
- grpc/src/compiler/go_generator.h
- grpc/src/compiler/schema_interface.h
-CMakeFiles/flatc.dir/src/code_generators.cpp.o
- /home/alain/flatbuffers/src/code_generators.cpp
- include/flatbuffers/code_generators.h
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatc.dir/src/flatc.cpp.o
- /home/alain/flatbuffers/src/flatc.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/flatc.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatc.dir/src/flatc_main.cpp.o
- /home/alain/flatbuffers/src/flatc_main.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/flatc.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o
- /home/alain/flatbuffers/src/idl_gen_cpp.cpp
- include/flatbuffers/code_generators.h
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o
- /home/alain/flatbuffers/src/idl_gen_fbs.cpp
- include/flatbuffers/code_generators.h
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o
- /home/alain/flatbuffers/src/idl_gen_general.cpp
- include/flatbuffers/code_generators.h
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o
- /home/alain/flatbuffers/src/idl_gen_go.cpp
- include/flatbuffers/code_generators.h
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o
- /home/alain/flatbuffers/src/idl_gen_grpc.cpp
- grpc/src/compiler/cpp_generator.h
- grpc/src/compiler/go_generator.h
- grpc/src/compiler/schema_interface.h
- include/flatbuffers/code_generators.h
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o
- /home/alain/flatbuffers/src/idl_gen_js.cpp
- include/flatbuffers/code_generators.h
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o
- /home/alain/flatbuffers/src/idl_gen_php.cpp
- include/flatbuffers/code_generators.h
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o
- /home/alain/flatbuffers/src/idl_gen_python.cpp
- include/flatbuffers/code_generators.h
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o
- /home/alain/flatbuffers/src/idl_gen_text.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatc.dir/src/idl_parser.cpp.o
- /home/alain/flatbuffers/src/idl_parser.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatc.dir/src/reflection.cpp.o
- /home/alain/flatbuffers/src/reflection.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatc.dir/src/util.cpp.o
- /home/alain/flatbuffers/src/util.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/util.h
diff --git a/third_party/flatbuffers/CMakeFiles/flatc.dir/depend.make b/third_party/flatbuffers/CMakeFiles/flatc.dir/depend.make
deleted file mode 100644
index 157b490..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatc.dir/depend.make
+++ /dev/null
@@ -1,139 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o: grpc/src/compiler/cpp_generator.cc
-CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o: grpc/src/compiler/cpp_generator.h
-CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o: grpc/src/compiler/schema_interface.h
-
-CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o: grpc/src/compiler/go_generator.cc
-CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o: grpc/src/compiler/go_generator.h
-CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o: grpc/src/compiler/schema_interface.h
-
-CMakeFiles/flatc.dir/src/code_generators.cpp.o: src/code_generators.cpp
-CMakeFiles/flatc.dir/src/code_generators.cpp.o: include/flatbuffers/code_generators.h
-CMakeFiles/flatc.dir/src/code_generators.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatc.dir/src/code_generators.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatc.dir/src/code_generators.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatc.dir/src/code_generators.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatc.dir/src/code_generators.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatc.dir/src/code_generators.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatc.dir/src/flatc.cpp.o: src/flatc.cpp
-CMakeFiles/flatc.dir/src/flatc.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatc.dir/src/flatc.cpp.o: include/flatbuffers/flatc.h
-CMakeFiles/flatc.dir/src/flatc.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatc.dir/src/flatc.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatc.dir/src/flatc.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatc.dir/src/flatc.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatc.dir/src/flatc.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatc.dir/src/flatc_main.cpp.o: src/flatc_main.cpp
-CMakeFiles/flatc.dir/src/flatc_main.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatc.dir/src/flatc_main.cpp.o: include/flatbuffers/flatc.h
-CMakeFiles/flatc.dir/src/flatc_main.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatc.dir/src/flatc_main.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatc.dir/src/flatc_main.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatc.dir/src/flatc_main.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatc.dir/src/flatc_main.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o: src/idl_gen_cpp.cpp
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o: include/flatbuffers/code_generators.h
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o: src/idl_gen_fbs.cpp
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o: include/flatbuffers/code_generators.h
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o: src/idl_gen_general.cpp
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o: include/flatbuffers/code_generators.h
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o: src/idl_gen_go.cpp
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o: include/flatbuffers/code_generators.h
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o: src/idl_gen_grpc.cpp
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o: grpc/src/compiler/cpp_generator.h
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o: grpc/src/compiler/go_generator.h
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o: grpc/src/compiler/schema_interface.h
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o: include/flatbuffers/code_generators.h
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o: src/idl_gen_js.cpp
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o: include/flatbuffers/code_generators.h
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o: src/idl_gen_php.cpp
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o: include/flatbuffers/code_generators.h
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o: src/idl_gen_python.cpp
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o: include/flatbuffers/code_generators.h
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o: src/idl_gen_text.cpp
-CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatc.dir/src/idl_parser.cpp.o: src/idl_parser.cpp
-CMakeFiles/flatc.dir/src/idl_parser.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatc.dir/src/idl_parser.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatc.dir/src/idl_parser.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatc.dir/src/idl_parser.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatc.dir/src/idl_parser.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatc.dir/src/idl_parser.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatc.dir/src/reflection.cpp.o: src/reflection.cpp
-CMakeFiles/flatc.dir/src/reflection.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatc.dir/src/reflection.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatc.dir/src/reflection.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatc.dir/src/reflection.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatc.dir/src/util.cpp.o: src/util.cpp
-CMakeFiles/flatc.dir/src/util.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatc.dir/src/util.cpp.o: include/flatbuffers/util.h
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatc.dir/flags.make b/third_party/flatbuffers/CMakeFiles/flatc.dir/flags.make
deleted file mode 100644
index 6fddb3a..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatc.dir/flags.make
+++ /dev/null
@@ -1,10 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# compile CXX with /usr/bin/c++
-CXX_FLAGS =  -std=c++0x -Wall -pedantic -Werror -Wextra -Werror=shadow -fsigned-char  
-
-CXX_DEFINES = 
-
-CXX_INCLUDES = -I/home/alain/flatbuffers/include -I/home/alain/flatbuffers/grpc -I/home/alain/flatbuffers/tests -I/home/alain/flatbuffers/samples 
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatc.dir/link.txt b/third_party/flatbuffers/CMakeFiles/flatc.dir/link.txt
deleted file mode 100644
index 44501a3..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatc.dir/link.txt
+++ /dev/null
@@ -1 +0,0 @@
-/usr/bin/c++    -std=c++0x -Wall -pedantic -Werror -Wextra -Werror=shadow -fsigned-char   CMakeFiles/flatc.dir/src/code_generators.cpp.o CMakeFiles/flatc.dir/src/idl_parser.cpp.o CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o CMakeFiles/flatc.dir/src/reflection.cpp.o CMakeFiles/flatc.dir/src/util.cpp.o CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o CMakeFiles/flatc.dir/src/flatc.cpp.o CMakeFiles/flatc.dir/src/flatc_main.cpp.o CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o  -o flatc -rdynamic 
diff --git a/third_party/flatbuffers/CMakeFiles/flatc.dir/progress.make b/third_party/flatbuffers/CMakeFiles/flatc.dir/progress.make
deleted file mode 100644
index 47ef266..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatc.dir/progress.make
+++ /dev/null
@@ -1,19 +0,0 @@
-CMAKE_PROGRESS_1 = 7
-CMAKE_PROGRESS_2 = 8
-CMAKE_PROGRESS_3 = 9
-CMAKE_PROGRESS_4 = 10
-CMAKE_PROGRESS_5 = 11
-CMAKE_PROGRESS_6 = 12
-CMAKE_PROGRESS_7 = 13
-CMAKE_PROGRESS_8 = 14
-CMAKE_PROGRESS_9 = 15
-CMAKE_PROGRESS_10 = 16
-CMAKE_PROGRESS_11 = 17
-CMAKE_PROGRESS_12 = 18
-CMAKE_PROGRESS_13 = 19
-CMAKE_PROGRESS_14 = 20
-CMAKE_PROGRESS_15 = 21
-CMAKE_PROGRESS_16 = 22
-CMAKE_PROGRESS_17 = 23
-CMAKE_PROGRESS_18 = 24
-
diff --git a/third_party/flatbuffers/CMakeFiles/flathash.dir/CXX.includecache b/third_party/flatbuffers/CMakeFiles/flathash.dir/CXX.includecache
deleted file mode 100644
index 0136ce9..0000000
--- a/third_party/flatbuffers/CMakeFiles/flathash.dir/CXX.includecache
+++ /dev/null
@@ -1,58 +0,0 @@
-#IncludeRegexLine: ^[ 	]*#[ 	]*(include|import)[ 	]*[<"]([^">]+)([">])
-
-#IncludeRegexScan: ^.*$
-
-#IncludeRegexComplain: ^$
-
-#IncludeRegexTransform: 
-
-/home/alain/flatbuffers/src/flathash.cpp
-iostream
--
-sstream
--
-string
--
-flatbuffers/hash.h
-/home/alain/flatbuffers/src/flatbuffers/hash.h
-stdio.h
--
-
-include/flatbuffers/flatbuffers.h
-assert.h
--
-cstdint
--
-cstddef
--
-cstdlib
--
-cstring
--
-string
--
-utility
--
-utility.h
--
-type_traits
--
-vector
--
-set
--
-algorithm
--
-memory
--
-functional
--
-
-include/flatbuffers/hash.h
-cstdint
--
-cstring
--
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-
diff --git a/third_party/flatbuffers/CMakeFiles/flathash.dir/DependInfo.cmake b/third_party/flatbuffers/CMakeFiles/flathash.dir/DependInfo.cmake
deleted file mode 100644
index e4553be..0000000
--- a/third_party/flatbuffers/CMakeFiles/flathash.dir/DependInfo.cmake
+++ /dev/null
@@ -1,24 +0,0 @@
-# The set of languages for which implicit dependencies are needed:
-set(CMAKE_DEPENDS_LANGUAGES
-  "CXX"
-  )
-# The set of files for implicit dependencies of each language:
-set(CMAKE_DEPENDS_CHECK_CXX
-  "/home/alain/flatbuffers/src/flathash.cpp" "/home/alain/flatbuffers/CMakeFiles/flathash.dir/src/flathash.cpp.o"
-  )
-set(CMAKE_CXX_COMPILER_ID "GNU")
-
-# The include file search paths:
-set(CMAKE_CXX_TARGET_INCLUDE_PATH
-  "include"
-  "grpc"
-  "tests"
-  "samples"
-  )
-
-# Targets to which this target links.
-set(CMAKE_TARGET_LINKED_INFO_FILES
-  )
-
-# Fortran module output directory.
-set(CMAKE_Fortran_TARGET_MODULE_DIR "")
diff --git a/third_party/flatbuffers/CMakeFiles/flathash.dir/build.make b/third_party/flatbuffers/CMakeFiles/flathash.dir/build.make
deleted file mode 100644
index a76bbfb..0000000
--- a/third_party/flatbuffers/CMakeFiles/flathash.dir/build.make
+++ /dev/null
@@ -1,113 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# Delete rule output on recipe failure.
-.DELETE_ON_ERROR:
-
-
-#=============================================================================
-# Special targets provided by cmake.
-
-# Disable implicit rules so canonical targets will work.
-.SUFFIXES:
-
-
-# Remove some rules from gmake that .SUFFIXES does not remove.
-SUFFIXES =
-
-.SUFFIXES: .hpux_make_needs_suffix_list
-
-
-# Suppress display of executed commands.
-$(VERBOSE).SILENT:
-
-
-# A target that is always out of date.
-cmake_force:
-
-.PHONY : cmake_force
-
-#=============================================================================
-# Set environment variables for the build.
-
-# The shell in which to execute make rules.
-SHELL = /bin/sh
-
-# The CMake executable.
-CMAKE_COMMAND = /usr/bin/cmake
-
-# The command to remove a file.
-RM = /usr/bin/cmake -E remove -f
-
-# Escaping for special characters.
-EQUALS = =
-
-# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /home/alain/flatbuffers
-
-# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /home/alain/flatbuffers
-
-# Include any dependencies generated for this target.
-include CMakeFiles/flathash.dir/depend.make
-
-# Include the progress variables for this target.
-include CMakeFiles/flathash.dir/progress.make
-
-# Include the compile flags for this target's objects.
-include CMakeFiles/flathash.dir/flags.make
-
-CMakeFiles/flathash.dir/src/flathash.cpp.o: CMakeFiles/flathash.dir/flags.make
-CMakeFiles/flathash.dir/src/flathash.cpp.o: src/flathash.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/flathash.dir/src/flathash.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flathash.dir/src/flathash.cpp.o -c /home/alain/flatbuffers/src/flathash.cpp
-
-CMakeFiles/flathash.dir/src/flathash.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flathash.dir/src/flathash.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/flathash.cpp > CMakeFiles/flathash.dir/src/flathash.cpp.i
-
-CMakeFiles/flathash.dir/src/flathash.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flathash.dir/src/flathash.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/flathash.cpp -o CMakeFiles/flathash.dir/src/flathash.cpp.s
-
-CMakeFiles/flathash.dir/src/flathash.cpp.o.requires:
-
-.PHONY : CMakeFiles/flathash.dir/src/flathash.cpp.o.requires
-
-CMakeFiles/flathash.dir/src/flathash.cpp.o.provides: CMakeFiles/flathash.dir/src/flathash.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flathash.dir/build.make CMakeFiles/flathash.dir/src/flathash.cpp.o.provides.build
-.PHONY : CMakeFiles/flathash.dir/src/flathash.cpp.o.provides
-
-CMakeFiles/flathash.dir/src/flathash.cpp.o.provides.build: CMakeFiles/flathash.dir/src/flathash.cpp.o
-
-
-# Object files for target flathash
-flathash_OBJECTS = \
-"CMakeFiles/flathash.dir/src/flathash.cpp.o"
-
-# External object files for target flathash
-flathash_EXTERNAL_OBJECTS =
-
-flathash: CMakeFiles/flathash.dir/src/flathash.cpp.o
-flathash: CMakeFiles/flathash.dir/build.make
-flathash: CMakeFiles/flathash.dir/link.txt
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable flathash"
-	$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/flathash.dir/link.txt --verbose=$(VERBOSE)
-
-# Rule to build all files generated by this target.
-CMakeFiles/flathash.dir/build: flathash
-
-.PHONY : CMakeFiles/flathash.dir/build
-
-CMakeFiles/flathash.dir/requires: CMakeFiles/flathash.dir/src/flathash.cpp.o.requires
-
-.PHONY : CMakeFiles/flathash.dir/requires
-
-CMakeFiles/flathash.dir/clean:
-	$(CMAKE_COMMAND) -P CMakeFiles/flathash.dir/cmake_clean.cmake
-.PHONY : CMakeFiles/flathash.dir/clean
-
-CMakeFiles/flathash.dir/depend:
-	cd /home/alain/flatbuffers && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers/CMakeFiles/flathash.dir/DependInfo.cmake --color=$(COLOR)
-.PHONY : CMakeFiles/flathash.dir/depend
-
diff --git a/third_party/flatbuffers/CMakeFiles/flathash.dir/cmake_clean.cmake b/third_party/flatbuffers/CMakeFiles/flathash.dir/cmake_clean.cmake
deleted file mode 100644
index d0f3575..0000000
--- a/third_party/flatbuffers/CMakeFiles/flathash.dir/cmake_clean.cmake
+++ /dev/null
@@ -1,10 +0,0 @@
-file(REMOVE_RECURSE
-  "CMakeFiles/flathash.dir/src/flathash.cpp.o"
-  "flathash.pdb"
-  "flathash"
-)
-
-# Per-language clean rules from dependency scanning.
-foreach(lang CXX)
-  include(CMakeFiles/flathash.dir/cmake_clean_${lang}.cmake OPTIONAL)
-endforeach()
diff --git a/third_party/flatbuffers/CMakeFiles/flathash.dir/depend.internal b/third_party/flatbuffers/CMakeFiles/flathash.dir/depend.internal
deleted file mode 100644
index 1d1d1fc..0000000
--- a/third_party/flatbuffers/CMakeFiles/flathash.dir/depend.internal
+++ /dev/null
@@ -1,7 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-CMakeFiles/flathash.dir/src/flathash.cpp.o
- /home/alain/flatbuffers/src/flathash.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
diff --git a/third_party/flatbuffers/CMakeFiles/flathash.dir/depend.make b/third_party/flatbuffers/CMakeFiles/flathash.dir/depend.make
deleted file mode 100644
index 9d33014..0000000
--- a/third_party/flatbuffers/CMakeFiles/flathash.dir/depend.make
+++ /dev/null
@@ -1,7 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-CMakeFiles/flathash.dir/src/flathash.cpp.o: src/flathash.cpp
-CMakeFiles/flathash.dir/src/flathash.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flathash.dir/src/flathash.cpp.o: include/flatbuffers/hash.h
-
diff --git a/third_party/flatbuffers/CMakeFiles/flathash.dir/flags.make b/third_party/flatbuffers/CMakeFiles/flathash.dir/flags.make
deleted file mode 100644
index 6fddb3a..0000000
--- a/third_party/flatbuffers/CMakeFiles/flathash.dir/flags.make
+++ /dev/null
@@ -1,10 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# compile CXX with /usr/bin/c++
-CXX_FLAGS =  -std=c++0x -Wall -pedantic -Werror -Wextra -Werror=shadow -fsigned-char  
-
-CXX_DEFINES = 
-
-CXX_INCLUDES = -I/home/alain/flatbuffers/include -I/home/alain/flatbuffers/grpc -I/home/alain/flatbuffers/tests -I/home/alain/flatbuffers/samples 
-
diff --git a/third_party/flatbuffers/CMakeFiles/flathash.dir/link.txt b/third_party/flatbuffers/CMakeFiles/flathash.dir/link.txt
deleted file mode 100644
index 33d528f..0000000
--- a/third_party/flatbuffers/CMakeFiles/flathash.dir/link.txt
+++ /dev/null
@@ -1 +0,0 @@
-/usr/bin/c++    -std=c++0x -Wall -pedantic -Werror -Wextra -Werror=shadow -fsigned-char   CMakeFiles/flathash.dir/src/flathash.cpp.o  -o flathash -rdynamic 
diff --git a/third_party/flatbuffers/CMakeFiles/flathash.dir/progress.make b/third_party/flatbuffers/CMakeFiles/flathash.dir/progress.make
deleted file mode 100644
index 9fd0bf5..0000000
--- a/third_party/flatbuffers/CMakeFiles/flathash.dir/progress.make
+++ /dev/null
@@ -1,3 +0,0 @@
-CMAKE_PROGRESS_1 = 25
-CMAKE_PROGRESS_2 = 26
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/CXX.includecache b/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/CXX.includecache
deleted file mode 100644
index 7e2a58c..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/CXX.includecache
+++ /dev/null
@@ -1,46 +0,0 @@
-#IncludeRegexLine: ^[ 	]*#[ 	]*(include|import)[ 	]*[<"]([^">]+)([">])
-
-#IncludeRegexScan: ^.*$
-
-#IncludeRegexComplain: ^$
-
-#IncludeRegexTransform: 
-
-/home/alain/flatbuffers/samples/monster_generated.h
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/samples/flatbuffers/flatbuffers.h
-
-/home/alain/flatbuffers/samples/sample_binary.cpp
-monster_generated.h
-/home/alain/flatbuffers/samples/monster_generated.h
-
-include/flatbuffers/flatbuffers.h
-assert.h
--
-cstdint
--
-cstddef
--
-cstdlib
--
-cstring
--
-string
--
-utility
--
-utility.h
--
-type_traits
--
-vector
--
-set
--
-algorithm
--
-memory
--
-functional
--
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/DependInfo.cmake b/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/DependInfo.cmake
deleted file mode 100644
index 7e9a1cf..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/DependInfo.cmake
+++ /dev/null
@@ -1,24 +0,0 @@
-# The set of languages for which implicit dependencies are needed:
-set(CMAKE_DEPENDS_LANGUAGES
-  "CXX"
-  )
-# The set of files for implicit dependencies of each language:
-set(CMAKE_DEPENDS_CHECK_CXX
-  "/home/alain/flatbuffers/samples/sample_binary.cpp" "/home/alain/flatbuffers/CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o"
-  )
-set(CMAKE_CXX_COMPILER_ID "GNU")
-
-# The include file search paths:
-set(CMAKE_CXX_TARGET_INCLUDE_PATH
-  "include"
-  "grpc"
-  "tests"
-  "samples"
-  )
-
-# Targets to which this target links.
-set(CMAKE_TARGET_LINKED_INFO_FILES
-  )
-
-# Fortran module output directory.
-set(CMAKE_Fortran_TARGET_MODULE_DIR "")
diff --git a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/build.make b/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/build.make
deleted file mode 100644
index ebb08c6..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/build.make
+++ /dev/null
@@ -1,117 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# Delete rule output on recipe failure.
-.DELETE_ON_ERROR:
-
-
-#=============================================================================
-# Special targets provided by cmake.
-
-# Disable implicit rules so canonical targets will work.
-.SUFFIXES:
-
-
-# Remove some rules from gmake that .SUFFIXES does not remove.
-SUFFIXES =
-
-.SUFFIXES: .hpux_make_needs_suffix_list
-
-
-# Suppress display of executed commands.
-$(VERBOSE).SILENT:
-
-
-# A target that is always out of date.
-cmake_force:
-
-.PHONY : cmake_force
-
-#=============================================================================
-# Set environment variables for the build.
-
-# The shell in which to execute make rules.
-SHELL = /bin/sh
-
-# The CMake executable.
-CMAKE_COMMAND = /usr/bin/cmake
-
-# The command to remove a file.
-RM = /usr/bin/cmake -E remove -f
-
-# Escaping for special characters.
-EQUALS = =
-
-# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /home/alain/flatbuffers
-
-# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /home/alain/flatbuffers
-
-# Include any dependencies generated for this target.
-include CMakeFiles/flatsamplebinary.dir/depend.make
-
-# Include the progress variables for this target.
-include CMakeFiles/flatsamplebinary.dir/progress.make
-
-# Include the compile flags for this target's objects.
-include CMakeFiles/flatsamplebinary.dir/flags.make
-
-samples/monster_generated.h: flatc
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generating samples/monster_generated.h"
-	./flatc -c --no-includes --gen-mutable --gen-object-api -o samples /home/alain/flatbuffers/samples/monster.fbs
-
-CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o: CMakeFiles/flatsamplebinary.dir/flags.make
-CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o: samples/sample_binary.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o -c /home/alain/flatbuffers/samples/sample_binary.cpp
-
-CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/samples/sample_binary.cpp > CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.i
-
-CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/samples/sample_binary.cpp -o CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.s
-
-CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o.requires
-
-CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o.provides: CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatsamplebinary.dir/build.make CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o.provides.build
-.PHONY : CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o.provides
-
-CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o.provides.build: CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o
-
-
-# Object files for target flatsamplebinary
-flatsamplebinary_OBJECTS = \
-"CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o"
-
-# External object files for target flatsamplebinary
-flatsamplebinary_EXTERNAL_OBJECTS =
-
-flatsamplebinary: CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o
-flatsamplebinary: CMakeFiles/flatsamplebinary.dir/build.make
-flatsamplebinary: CMakeFiles/flatsamplebinary.dir/link.txt
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking CXX executable flatsamplebinary"
-	$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/flatsamplebinary.dir/link.txt --verbose=$(VERBOSE)
-
-# Rule to build all files generated by this target.
-CMakeFiles/flatsamplebinary.dir/build: flatsamplebinary
-
-.PHONY : CMakeFiles/flatsamplebinary.dir/build
-
-CMakeFiles/flatsamplebinary.dir/requires: CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o.requires
-
-.PHONY : CMakeFiles/flatsamplebinary.dir/requires
-
-CMakeFiles/flatsamplebinary.dir/clean:
-	$(CMAKE_COMMAND) -P CMakeFiles/flatsamplebinary.dir/cmake_clean.cmake
-.PHONY : CMakeFiles/flatsamplebinary.dir/clean
-
-CMakeFiles/flatsamplebinary.dir/depend: samples/monster_generated.h
-	cd /home/alain/flatbuffers && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers/CMakeFiles/flatsamplebinary.dir/DependInfo.cmake --color=$(COLOR)
-.PHONY : CMakeFiles/flatsamplebinary.dir/depend
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/cmake_clean.cmake b/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/cmake_clean.cmake
deleted file mode 100644
index b1d09e4..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/cmake_clean.cmake
+++ /dev/null
@@ -1,11 +0,0 @@
-file(REMOVE_RECURSE
-  "samples/monster_generated.h"
-  "CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o"
-  "flatsamplebinary.pdb"
-  "flatsamplebinary"
-)
-
-# Per-language clean rules from dependency scanning.
-foreach(lang CXX)
-  include(CMakeFiles/flatsamplebinary.dir/cmake_clean_${lang}.cmake OPTIONAL)
-endforeach()
diff --git a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/depend.internal b/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/depend.internal
deleted file mode 100644
index d13bbad..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/depend.internal
+++ /dev/null
@@ -1,7 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o
- /home/alain/flatbuffers/samples/monster_generated.h
- /home/alain/flatbuffers/samples/sample_binary.cpp
- include/flatbuffers/flatbuffers.h
diff --git a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/depend.make b/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/depend.make
deleted file mode 100644
index 4717048..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/depend.make
+++ /dev/null
@@ -1,7 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o: samples/monster_generated.h
-CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o: samples/sample_binary.cpp
-CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o: include/flatbuffers/flatbuffers.h
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/flags.make b/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/flags.make
deleted file mode 100644
index 6fddb3a..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/flags.make
+++ /dev/null
@@ -1,10 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# compile CXX with /usr/bin/c++
-CXX_FLAGS =  -std=c++0x -Wall -pedantic -Werror -Wextra -Werror=shadow -fsigned-char  
-
-CXX_DEFINES = 
-
-CXX_INCLUDES = -I/home/alain/flatbuffers/include -I/home/alain/flatbuffers/grpc -I/home/alain/flatbuffers/tests -I/home/alain/flatbuffers/samples 
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/link.txt b/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/link.txt
deleted file mode 100644
index 3fa33a2..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/link.txt
+++ /dev/null
@@ -1 +0,0 @@
-/usr/bin/c++    -std=c++0x -Wall -pedantic -Werror -Wextra -Werror=shadow -fsigned-char   CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o  -o flatsamplebinary -rdynamic 
diff --git a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/progress.make b/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/progress.make
deleted file mode 100644
index 3a30df4..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsamplebinary.dir/progress.make
+++ /dev/null
@@ -1,4 +0,0 @@
-CMAKE_PROGRESS_1 = 27
-CMAKE_PROGRESS_2 = 28
-CMAKE_PROGRESS_3 = 29
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/CXX.includecache b/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/CXX.includecache
deleted file mode 100644
index 1d4bd2d..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/CXX.includecache
+++ /dev/null
@@ -1,158 +0,0 @@
-#IncludeRegexLine: ^[ 	]*#[ 	]*(include|import)[ 	]*[<"]([^">]+)([">])
-
-#IncludeRegexScan: ^.*$
-
-#IncludeRegexComplain: ^$
-
-#IncludeRegexTransform: 
-
-/home/alain/flatbuffers/samples/monster_generated.h
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/samples/flatbuffers/flatbuffers.h
-
-/home/alain/flatbuffers/samples/sample_text.cpp
-flatbuffers/idl.h
-/home/alain/flatbuffers/samples/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/samples/flatbuffers/util.h
-monster_generated.h
-/home/alain/flatbuffers/samples/monster_generated.h
-
-/home/alain/flatbuffers/src/code_generators.cpp
-flatbuffers/code_generators.h
-/home/alain/flatbuffers/src/flatbuffers/code_generators.h
-assert.h
--
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/idl_gen_text.cpp
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/src/flatbuffers/flatbuffers.h
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/idl_parser.cpp
-algorithm
--
-list
--
-math.h
--
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/reflection.cpp
-flatbuffers/reflection.h
-/home/alain/flatbuffers/src/flatbuffers/reflection.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/util.cpp
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-include/flatbuffers/code_generators.h
-map
--
-sstream
--
-flatbuffers/idl.h
-include/flatbuffers/flatbuffers/idl.h
-
-include/flatbuffers/flatbuffers.h
-assert.h
--
-cstdint
--
-cstddef
--
-cstdlib
--
-cstring
--
-string
--
-utility
--
-utility.h
--
-type_traits
--
-vector
--
-set
--
-algorithm
--
-memory
--
-functional
--
-
-include/flatbuffers/hash.h
-cstdint
--
-cstring
--
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-
-include/flatbuffers/idl.h
-map
--
-stack
--
-memory
--
-functional
--
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-flatbuffers/hash.h
-include/flatbuffers/flatbuffers/hash.h
-flatbuffers/reflection.h
-include/flatbuffers/flatbuffers/reflection.h
-
-include/flatbuffers/reflection.h
-flatbuffers/reflection_generated.h
-include/flatbuffers/flatbuffers/reflection_generated.h
-
-include/flatbuffers/reflection_generated.h
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-
-include/flatbuffers/util.h
-fstream
--
-iomanip
--
-string
--
-sstream
--
-stdint.h
--
-stdlib.h
--
-assert.h
--
-windows.h
--
-winbase.h
--
-direct.h
--
-limits.h
--
-sys/types.h
--
-sys/stat.h
--
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/DependInfo.cmake b/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/DependInfo.cmake
deleted file mode 100644
index 8e79318..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/DependInfo.cmake
+++ /dev/null
@@ -1,29 +0,0 @@
-# The set of languages for which implicit dependencies are needed:
-set(CMAKE_DEPENDS_LANGUAGES
-  "CXX"
-  )
-# The set of files for implicit dependencies of each language:
-set(CMAKE_DEPENDS_CHECK_CXX
-  "/home/alain/flatbuffers/samples/sample_text.cpp" "/home/alain/flatbuffers/CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o"
-  "/home/alain/flatbuffers/src/code_generators.cpp" "/home/alain/flatbuffers/CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o"
-  "/home/alain/flatbuffers/src/idl_gen_text.cpp" "/home/alain/flatbuffers/CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o"
-  "/home/alain/flatbuffers/src/idl_parser.cpp" "/home/alain/flatbuffers/CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o"
-  "/home/alain/flatbuffers/src/reflection.cpp" "/home/alain/flatbuffers/CMakeFiles/flatsampletext.dir/src/reflection.cpp.o"
-  "/home/alain/flatbuffers/src/util.cpp" "/home/alain/flatbuffers/CMakeFiles/flatsampletext.dir/src/util.cpp.o"
-  )
-set(CMAKE_CXX_COMPILER_ID "GNU")
-
-# The include file search paths:
-set(CMAKE_CXX_TARGET_INCLUDE_PATH
-  "include"
-  "grpc"
-  "tests"
-  "samples"
-  )
-
-# Targets to which this target links.
-set(CMAKE_TARGET_LINKED_INFO_FILES
-  )
-
-# Fortran module output directory.
-set(CMAKE_Fortran_TARGET_MODULE_DIR "")
diff --git a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/build.make b/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/build.make
deleted file mode 100644
index caf6cd8..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/build.make
+++ /dev/null
@@ -1,252 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# Delete rule output on recipe failure.
-.DELETE_ON_ERROR:
-
-
-#=============================================================================
-# Special targets provided by cmake.
-
-# Disable implicit rules so canonical targets will work.
-.SUFFIXES:
-
-
-# Remove some rules from gmake that .SUFFIXES does not remove.
-SUFFIXES =
-
-.SUFFIXES: .hpux_make_needs_suffix_list
-
-
-# Suppress display of executed commands.
-$(VERBOSE).SILENT:
-
-
-# A target that is always out of date.
-cmake_force:
-
-.PHONY : cmake_force
-
-#=============================================================================
-# Set environment variables for the build.
-
-# The shell in which to execute make rules.
-SHELL = /bin/sh
-
-# The CMake executable.
-CMAKE_COMMAND = /usr/bin/cmake
-
-# The command to remove a file.
-RM = /usr/bin/cmake -E remove -f
-
-# Escaping for special characters.
-EQUALS = =
-
-# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /home/alain/flatbuffers
-
-# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /home/alain/flatbuffers
-
-# Include any dependencies generated for this target.
-include CMakeFiles/flatsampletext.dir/depend.make
-
-# Include the progress variables for this target.
-include CMakeFiles/flatsampletext.dir/progress.make
-
-# Include the compile flags for this target's objects.
-include CMakeFiles/flatsampletext.dir/flags.make
-
-samples/monster_generated.h: flatc
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generating samples/monster_generated.h"
-	./flatc -c --no-includes --gen-mutable --gen-object-api -o samples /home/alain/flatbuffers/samples/monster.fbs
-
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o: CMakeFiles/flatsampletext.dir/flags.make
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o: src/code_generators.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o -c /home/alain/flatbuffers/src/code_generators.cpp
-
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatsampletext.dir/src/code_generators.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/code_generators.cpp > CMakeFiles/flatsampletext.dir/src/code_generators.cpp.i
-
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatsampletext.dir/src/code_generators.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/code_generators.cpp -o CMakeFiles/flatsampletext.dir/src/code_generators.cpp.s
-
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o.requires
-
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o.provides: CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o.provides.build
-.PHONY : CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o.provides
-
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o.provides.build: CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o
-
-
-CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o: CMakeFiles/flatsampletext.dir/flags.make
-CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o: src/idl_parser.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o -c /home/alain/flatbuffers/src/idl_parser.cpp
-
-CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_parser.cpp > CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.i
-
-CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_parser.cpp -o CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.s
-
-CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o.requires
-
-CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o.provides: CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o.provides.build
-.PHONY : CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o.provides
-
-CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o.provides.build: CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o
-
-
-CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o: CMakeFiles/flatsampletext.dir/flags.make
-CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o: src/idl_gen_text.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o -c /home/alain/flatbuffers/src/idl_gen_text.cpp
-
-CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_gen_text.cpp > CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.i
-
-CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_gen_text.cpp -o CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.s
-
-CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o.requires
-
-CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o.provides: CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o.provides.build
-.PHONY : CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o.provides
-
-CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o.provides.build: CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o
-
-
-CMakeFiles/flatsampletext.dir/src/reflection.cpp.o: CMakeFiles/flatsampletext.dir/flags.make
-CMakeFiles/flatsampletext.dir/src/reflection.cpp.o: src/reflection.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object CMakeFiles/flatsampletext.dir/src/reflection.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatsampletext.dir/src/reflection.cpp.o -c /home/alain/flatbuffers/src/reflection.cpp
-
-CMakeFiles/flatsampletext.dir/src/reflection.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatsampletext.dir/src/reflection.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/reflection.cpp > CMakeFiles/flatsampletext.dir/src/reflection.cpp.i
-
-CMakeFiles/flatsampletext.dir/src/reflection.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatsampletext.dir/src/reflection.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/reflection.cpp -o CMakeFiles/flatsampletext.dir/src/reflection.cpp.s
-
-CMakeFiles/flatsampletext.dir/src/reflection.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatsampletext.dir/src/reflection.cpp.o.requires
-
-CMakeFiles/flatsampletext.dir/src/reflection.cpp.o.provides: CMakeFiles/flatsampletext.dir/src/reflection.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/reflection.cpp.o.provides.build
-.PHONY : CMakeFiles/flatsampletext.dir/src/reflection.cpp.o.provides
-
-CMakeFiles/flatsampletext.dir/src/reflection.cpp.o.provides.build: CMakeFiles/flatsampletext.dir/src/reflection.cpp.o
-
-
-CMakeFiles/flatsampletext.dir/src/util.cpp.o: CMakeFiles/flatsampletext.dir/flags.make
-CMakeFiles/flatsampletext.dir/src/util.cpp.o: src/util.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object CMakeFiles/flatsampletext.dir/src/util.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatsampletext.dir/src/util.cpp.o -c /home/alain/flatbuffers/src/util.cpp
-
-CMakeFiles/flatsampletext.dir/src/util.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatsampletext.dir/src/util.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/util.cpp > CMakeFiles/flatsampletext.dir/src/util.cpp.i
-
-CMakeFiles/flatsampletext.dir/src/util.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatsampletext.dir/src/util.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/util.cpp -o CMakeFiles/flatsampletext.dir/src/util.cpp.s
-
-CMakeFiles/flatsampletext.dir/src/util.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatsampletext.dir/src/util.cpp.o.requires
-
-CMakeFiles/flatsampletext.dir/src/util.cpp.o.provides: CMakeFiles/flatsampletext.dir/src/util.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/util.cpp.o.provides.build
-.PHONY : CMakeFiles/flatsampletext.dir/src/util.cpp.o.provides
-
-CMakeFiles/flatsampletext.dir/src/util.cpp.o.provides.build: CMakeFiles/flatsampletext.dir/src/util.cpp.o
-
-
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o: CMakeFiles/flatsampletext.dir/flags.make
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o: samples/sample_text.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o -c /home/alain/flatbuffers/samples/sample_text.cpp
-
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/samples/sample_text.cpp > CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.i
-
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/samples/sample_text.cpp -o CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.s
-
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o.requires:
-
-.PHONY : CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o.requires
-
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o.provides: CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o.provides.build
-.PHONY : CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o.provides
-
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o.provides.build: CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o
-
-
-# Object files for target flatsampletext
-flatsampletext_OBJECTS = \
-"CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o" \
-"CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o" \
-"CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o" \
-"CMakeFiles/flatsampletext.dir/src/reflection.cpp.o" \
-"CMakeFiles/flatsampletext.dir/src/util.cpp.o" \
-"CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o"
-
-# External object files for target flatsampletext
-flatsampletext_EXTERNAL_OBJECTS =
-
-flatsampletext: CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o
-flatsampletext: CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o
-flatsampletext: CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o
-flatsampletext: CMakeFiles/flatsampletext.dir/src/reflection.cpp.o
-flatsampletext: CMakeFiles/flatsampletext.dir/src/util.cpp.o
-flatsampletext: CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o
-flatsampletext: CMakeFiles/flatsampletext.dir/build.make
-flatsampletext: CMakeFiles/flatsampletext.dir/link.txt
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Linking CXX executable flatsampletext"
-	$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/flatsampletext.dir/link.txt --verbose=$(VERBOSE)
-
-# Rule to build all files generated by this target.
-CMakeFiles/flatsampletext.dir/build: flatsampletext
-
-.PHONY : CMakeFiles/flatsampletext.dir/build
-
-CMakeFiles/flatsampletext.dir/requires: CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o.requires
-CMakeFiles/flatsampletext.dir/requires: CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o.requires
-CMakeFiles/flatsampletext.dir/requires: CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o.requires
-CMakeFiles/flatsampletext.dir/requires: CMakeFiles/flatsampletext.dir/src/reflection.cpp.o.requires
-CMakeFiles/flatsampletext.dir/requires: CMakeFiles/flatsampletext.dir/src/util.cpp.o.requires
-CMakeFiles/flatsampletext.dir/requires: CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o.requires
-
-.PHONY : CMakeFiles/flatsampletext.dir/requires
-
-CMakeFiles/flatsampletext.dir/clean:
-	$(CMAKE_COMMAND) -P CMakeFiles/flatsampletext.dir/cmake_clean.cmake
-.PHONY : CMakeFiles/flatsampletext.dir/clean
-
-CMakeFiles/flatsampletext.dir/depend: samples/monster_generated.h
-	cd /home/alain/flatbuffers && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers/CMakeFiles/flatsampletext.dir/DependInfo.cmake --color=$(COLOR)
-.PHONY : CMakeFiles/flatsampletext.dir/depend
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/cmake_clean.cmake b/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/cmake_clean.cmake
deleted file mode 100644
index e763e61..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/cmake_clean.cmake
+++ /dev/null
@@ -1,16 +0,0 @@
-file(REMOVE_RECURSE
-  "samples/monster_generated.h"
-  "CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o"
-  "CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o"
-  "CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o"
-  "CMakeFiles/flatsampletext.dir/src/reflection.cpp.o"
-  "CMakeFiles/flatsampletext.dir/src/util.cpp.o"
-  "CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o"
-  "flatsampletext.pdb"
-  "flatsampletext"
-)
-
-# Per-language clean rules from dependency scanning.
-foreach(lang CXX)
-  include(CMakeFiles/flatsampletext.dir/cmake_clean_${lang}.cmake OPTIONAL)
-endforeach()
diff --git a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/depend.internal b/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/depend.internal
deleted file mode 100644
index 8fd7cf9..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/depend.internal
+++ /dev/null
@@ -1,47 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o
- /home/alain/flatbuffers/samples/monster_generated.h
- /home/alain/flatbuffers/samples/sample_text.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o
- /home/alain/flatbuffers/src/code_generators.cpp
- include/flatbuffers/code_generators.h
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o
- /home/alain/flatbuffers/src/idl_gen_text.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o
- /home/alain/flatbuffers/src/idl_parser.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatsampletext.dir/src/reflection.cpp.o
- /home/alain/flatbuffers/src/reflection.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flatsampletext.dir/src/util.cpp.o
- /home/alain/flatbuffers/src/util.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/util.h
diff --git a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/depend.make b/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/depend.make
deleted file mode 100644
index 5002df4..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/depend.make
+++ /dev/null
@@ -1,47 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o: samples/monster_generated.h
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o: samples/sample_text.cpp
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o: src/code_generators.cpp
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o: include/flatbuffers/code_generators.h
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o: src/idl_gen_text.cpp
-CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o: src/idl_parser.cpp
-CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatsampletext.dir/src/reflection.cpp.o: src/reflection.cpp
-CMakeFiles/flatsampletext.dir/src/reflection.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatsampletext.dir/src/reflection.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flatsampletext.dir/src/reflection.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flatsampletext.dir/src/reflection.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flatsampletext.dir/src/util.cpp.o: src/util.cpp
-CMakeFiles/flatsampletext.dir/src/util.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flatsampletext.dir/src/util.cpp.o: include/flatbuffers/util.h
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/flags.make b/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/flags.make
deleted file mode 100644
index 6fddb3a..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/flags.make
+++ /dev/null
@@ -1,10 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# compile CXX with /usr/bin/c++
-CXX_FLAGS =  -std=c++0x -Wall -pedantic -Werror -Wextra -Werror=shadow -fsigned-char  
-
-CXX_DEFINES = 
-
-CXX_INCLUDES = -I/home/alain/flatbuffers/include -I/home/alain/flatbuffers/grpc -I/home/alain/flatbuffers/tests -I/home/alain/flatbuffers/samples 
-
diff --git a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/link.txt b/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/link.txt
deleted file mode 100644
index 535e01a..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/link.txt
+++ /dev/null
@@ -1 +0,0 @@
-/usr/bin/c++    -std=c++0x -Wall -pedantic -Werror -Wextra -Werror=shadow -fsigned-char   CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o CMakeFiles/flatsampletext.dir/src/reflection.cpp.o CMakeFiles/flatsampletext.dir/src/util.cpp.o CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o  -o flatsampletext -rdynamic 
diff --git a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/progress.make b/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/progress.make
deleted file mode 100644
index 7218115..0000000
--- a/third_party/flatbuffers/CMakeFiles/flatsampletext.dir/progress.make
+++ /dev/null
@@ -1,9 +0,0 @@
-CMAKE_PROGRESS_1 = 30
-CMAKE_PROGRESS_2 = 31
-CMAKE_PROGRESS_3 = 32
-CMAKE_PROGRESS_4 = 33
-CMAKE_PROGRESS_5 = 34
-CMAKE_PROGRESS_6 = 35
-CMAKE_PROGRESS_7 = 36
-CMAKE_PROGRESS_8 = 37
-
diff --git a/third_party/flatbuffers/CMakeFiles/flattests.dir/CXX.includecache b/third_party/flatbuffers/CMakeFiles/flattests.dir/CXX.includecache
deleted file mode 100644
index 35de61e..0000000
--- a/third_party/flatbuffers/CMakeFiles/flattests.dir/CXX.includecache
+++ /dev/null
@@ -1,206 +0,0 @@
-#IncludeRegexLine: ^[ 	]*#[ 	]*(include|import)[ 	]*[<"]([^">]+)([">])
-
-#IncludeRegexScan: ^.*$
-
-#IncludeRegexComplain: ^$
-
-#IncludeRegexTransform: 
-
-/home/alain/flatbuffers/src/code_generators.cpp
-flatbuffers/code_generators.h
-/home/alain/flatbuffers/src/flatbuffers/code_generators.h
-assert.h
--
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/idl_gen_fbs.cpp
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/src/flatbuffers/flatbuffers.h
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-flatbuffers/code_generators.h
-/home/alain/flatbuffers/src/flatbuffers/code_generators.h
-
-/home/alain/flatbuffers/src/idl_gen_text.cpp
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/src/flatbuffers/flatbuffers.h
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/idl_parser.cpp
-algorithm
--
-list
--
-math.h
--
-flatbuffers/idl.h
-/home/alain/flatbuffers/src/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/reflection.cpp
-flatbuffers/reflection.h
-/home/alain/flatbuffers/src/flatbuffers/reflection.h
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/src/util.cpp
-flatbuffers/util.h
-/home/alain/flatbuffers/src/flatbuffers/util.h
-
-/home/alain/flatbuffers/tests/monster_test_generated.h
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/tests/flatbuffers/flatbuffers.h
-
-/home/alain/flatbuffers/tests/namespace_test/namespace_test1_generated.h
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/tests/namespace_test/flatbuffers/flatbuffers.h
-
-/home/alain/flatbuffers/tests/namespace_test/namespace_test2_generated.h
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/tests/namespace_test/flatbuffers/flatbuffers.h
-namespace_test1_generated.h
-/home/alain/flatbuffers/tests/namespace_test/namespace_test1_generated.h
-
-/home/alain/flatbuffers/tests/test.cpp
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/tests/flatbuffers/flatbuffers.h
-flatbuffers/idl.h
-/home/alain/flatbuffers/tests/flatbuffers/idl.h
-flatbuffers/util.h
-/home/alain/flatbuffers/tests/flatbuffers/util.h
-monster_test_generated.h
-/home/alain/flatbuffers/tests/monster_test_generated.h
-namespace_test/namespace_test1_generated.h
-/home/alain/flatbuffers/tests/namespace_test/namespace_test1_generated.h
-namespace_test/namespace_test2_generated.h
-/home/alain/flatbuffers/tests/namespace_test/namespace_test2_generated.h
-union_vector/union_vector_generated.h
-/home/alain/flatbuffers/tests/union_vector/union_vector_generated.h
-random
--
-flatbuffers/flexbuffers.h
-/home/alain/flatbuffers/tests/flatbuffers/flexbuffers.h
-android/log.h
--
-
-/home/alain/flatbuffers/tests/union_vector/union_vector_generated.h
-flatbuffers/flatbuffers.h
-/home/alain/flatbuffers/tests/union_vector/flatbuffers/flatbuffers.h
-
-include/flatbuffers/code_generators.h
-map
--
-sstream
--
-flatbuffers/idl.h
-include/flatbuffers/flatbuffers/idl.h
-
-include/flatbuffers/flatbuffers.h
-assert.h
--
-cstdint
--
-cstddef
--
-cstdlib
--
-cstring
--
-string
--
-utility
--
-utility.h
--
-type_traits
--
-vector
--
-set
--
-algorithm
--
-memory
--
-functional
--
-
-include/flatbuffers/flexbuffers.h
-map
--
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-flatbuffers/util.h
-include/flatbuffers/flatbuffers/util.h
-intrin.h
--
-
-include/flatbuffers/hash.h
-cstdint
--
-cstring
--
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-
-include/flatbuffers/idl.h
-map
--
-stack
--
-memory
--
-functional
--
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-flatbuffers/hash.h
-include/flatbuffers/flatbuffers/hash.h
-flatbuffers/reflection.h
-include/flatbuffers/flatbuffers/reflection.h
-
-include/flatbuffers/reflection.h
-flatbuffers/reflection_generated.h
-include/flatbuffers/flatbuffers/reflection_generated.h
-
-include/flatbuffers/reflection_generated.h
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-
-include/flatbuffers/util.h
-fstream
--
-iomanip
--
-string
--
-sstream
--
-stdint.h
--
-stdlib.h
--
-assert.h
--
-windows.h
--
-winbase.h
--
-direct.h
--
-limits.h
--
-sys/types.h
--
-sys/stat.h
--
-flatbuffers/flatbuffers.h
-include/flatbuffers/flatbuffers/flatbuffers.h
-
diff --git a/third_party/flatbuffers/CMakeFiles/flattests.dir/DependInfo.cmake b/third_party/flatbuffers/CMakeFiles/flattests.dir/DependInfo.cmake
deleted file mode 100644
index b3dbb5f..0000000
--- a/third_party/flatbuffers/CMakeFiles/flattests.dir/DependInfo.cmake
+++ /dev/null
@@ -1,36 +0,0 @@
-# The set of languages for which implicit dependencies are needed:
-set(CMAKE_DEPENDS_LANGUAGES
-  "CXX"
-  )
-# The set of files for implicit dependencies of each language:
-set(CMAKE_DEPENDS_CHECK_CXX
-  "/home/alain/flatbuffers/src/code_generators.cpp" "/home/alain/flatbuffers/CMakeFiles/flattests.dir/src/code_generators.cpp.o"
-  "/home/alain/flatbuffers/src/idl_gen_fbs.cpp" "/home/alain/flatbuffers/CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o"
-  "/home/alain/flatbuffers/src/idl_gen_text.cpp" "/home/alain/flatbuffers/CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o"
-  "/home/alain/flatbuffers/src/idl_parser.cpp" "/home/alain/flatbuffers/CMakeFiles/flattests.dir/src/idl_parser.cpp.o"
-  "/home/alain/flatbuffers/src/reflection.cpp" "/home/alain/flatbuffers/CMakeFiles/flattests.dir/src/reflection.cpp.o"
-  "/home/alain/flatbuffers/src/util.cpp" "/home/alain/flatbuffers/CMakeFiles/flattests.dir/src/util.cpp.o"
-  "/home/alain/flatbuffers/tests/test.cpp" "/home/alain/flatbuffers/CMakeFiles/flattests.dir/tests/test.cpp.o"
-  )
-set(CMAKE_CXX_COMPILER_ID "GNU")
-
-# Preprocessor definitions for this target.
-set(CMAKE_TARGET_DEFINITIONS_CXX
-  "FLATBUFFERS_DEBUG_VERIFICATION_FAILURE=1"
-  "FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE"
-  )
-
-# The include file search paths:
-set(CMAKE_CXX_TARGET_INCLUDE_PATH
-  "include"
-  "grpc"
-  "tests"
-  "samples"
-  )
-
-# Targets to which this target links.
-set(CMAKE_TARGET_LINKED_INFO_FILES
-  )
-
-# Fortran module output directory.
-set(CMAKE_Fortran_TARGET_MODULE_DIR "")
diff --git a/third_party/flatbuffers/CMakeFiles/flattests.dir/build.make b/third_party/flatbuffers/CMakeFiles/flattests.dir/build.make
deleted file mode 100644
index db2d56e..0000000
--- a/third_party/flatbuffers/CMakeFiles/flattests.dir/build.make
+++ /dev/null
@@ -1,279 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# Delete rule output on recipe failure.
-.DELETE_ON_ERROR:
-
-
-#=============================================================================
-# Special targets provided by cmake.
-
-# Disable implicit rules so canonical targets will work.
-.SUFFIXES:
-
-
-# Remove some rules from gmake that .SUFFIXES does not remove.
-SUFFIXES =
-
-.SUFFIXES: .hpux_make_needs_suffix_list
-
-
-# Suppress display of executed commands.
-$(VERBOSE).SILENT:
-
-
-# A target that is always out of date.
-cmake_force:
-
-.PHONY : cmake_force
-
-#=============================================================================
-# Set environment variables for the build.
-
-# The shell in which to execute make rules.
-SHELL = /bin/sh
-
-# The CMake executable.
-CMAKE_COMMAND = /usr/bin/cmake
-
-# The command to remove a file.
-RM = /usr/bin/cmake -E remove -f
-
-# Escaping for special characters.
-EQUALS = =
-
-# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /home/alain/flatbuffers
-
-# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /home/alain/flatbuffers
-
-# Include any dependencies generated for this target.
-include CMakeFiles/flattests.dir/depend.make
-
-# Include the progress variables for this target.
-include CMakeFiles/flattests.dir/progress.make
-
-# Include the compile flags for this target's objects.
-include CMakeFiles/flattests.dir/flags.make
-
-tests/monster_test_generated.h: flatc
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generating tests/monster_test_generated.h"
-	./flatc -c --no-includes --gen-mutable --gen-object-api -o tests /home/alain/flatbuffers/tests/monster_test.fbs
-
-CMakeFiles/flattests.dir/src/code_generators.cpp.o: CMakeFiles/flattests.dir/flags.make
-CMakeFiles/flattests.dir/src/code_generators.cpp.o: src/code_generators.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/flattests.dir/src/code_generators.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flattests.dir/src/code_generators.cpp.o -c /home/alain/flatbuffers/src/code_generators.cpp
-
-CMakeFiles/flattests.dir/src/code_generators.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flattests.dir/src/code_generators.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/code_generators.cpp > CMakeFiles/flattests.dir/src/code_generators.cpp.i
-
-CMakeFiles/flattests.dir/src/code_generators.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flattests.dir/src/code_generators.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/code_generators.cpp -o CMakeFiles/flattests.dir/src/code_generators.cpp.s
-
-CMakeFiles/flattests.dir/src/code_generators.cpp.o.requires:
-
-.PHONY : CMakeFiles/flattests.dir/src/code_generators.cpp.o.requires
-
-CMakeFiles/flattests.dir/src/code_generators.cpp.o.provides: CMakeFiles/flattests.dir/src/code_generators.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/code_generators.cpp.o.provides.build
-.PHONY : CMakeFiles/flattests.dir/src/code_generators.cpp.o.provides
-
-CMakeFiles/flattests.dir/src/code_generators.cpp.o.provides.build: CMakeFiles/flattests.dir/src/code_generators.cpp.o
-
-
-CMakeFiles/flattests.dir/src/idl_parser.cpp.o: CMakeFiles/flattests.dir/flags.make
-CMakeFiles/flattests.dir/src/idl_parser.cpp.o: src/idl_parser.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/flattests.dir/src/idl_parser.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flattests.dir/src/idl_parser.cpp.o -c /home/alain/flatbuffers/src/idl_parser.cpp
-
-CMakeFiles/flattests.dir/src/idl_parser.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flattests.dir/src/idl_parser.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_parser.cpp > CMakeFiles/flattests.dir/src/idl_parser.cpp.i
-
-CMakeFiles/flattests.dir/src/idl_parser.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flattests.dir/src/idl_parser.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_parser.cpp -o CMakeFiles/flattests.dir/src/idl_parser.cpp.s
-
-CMakeFiles/flattests.dir/src/idl_parser.cpp.o.requires:
-
-.PHONY : CMakeFiles/flattests.dir/src/idl_parser.cpp.o.requires
-
-CMakeFiles/flattests.dir/src/idl_parser.cpp.o.provides: CMakeFiles/flattests.dir/src/idl_parser.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/idl_parser.cpp.o.provides.build
-.PHONY : CMakeFiles/flattests.dir/src/idl_parser.cpp.o.provides
-
-CMakeFiles/flattests.dir/src/idl_parser.cpp.o.provides.build: CMakeFiles/flattests.dir/src/idl_parser.cpp.o
-
-
-CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o: CMakeFiles/flattests.dir/flags.make
-CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o: src/idl_gen_text.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o -c /home/alain/flatbuffers/src/idl_gen_text.cpp
-
-CMakeFiles/flattests.dir/src/idl_gen_text.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flattests.dir/src/idl_gen_text.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_gen_text.cpp > CMakeFiles/flattests.dir/src/idl_gen_text.cpp.i
-
-CMakeFiles/flattests.dir/src/idl_gen_text.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flattests.dir/src/idl_gen_text.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_gen_text.cpp -o CMakeFiles/flattests.dir/src/idl_gen_text.cpp.s
-
-CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o.requires:
-
-.PHONY : CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o.requires
-
-CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o.provides: CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o.provides.build
-.PHONY : CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o.provides
-
-CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o.provides.build: CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o
-
-
-CMakeFiles/flattests.dir/src/reflection.cpp.o: CMakeFiles/flattests.dir/flags.make
-CMakeFiles/flattests.dir/src/reflection.cpp.o: src/reflection.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object CMakeFiles/flattests.dir/src/reflection.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flattests.dir/src/reflection.cpp.o -c /home/alain/flatbuffers/src/reflection.cpp
-
-CMakeFiles/flattests.dir/src/reflection.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flattests.dir/src/reflection.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/reflection.cpp > CMakeFiles/flattests.dir/src/reflection.cpp.i
-
-CMakeFiles/flattests.dir/src/reflection.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flattests.dir/src/reflection.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/reflection.cpp -o CMakeFiles/flattests.dir/src/reflection.cpp.s
-
-CMakeFiles/flattests.dir/src/reflection.cpp.o.requires:
-
-.PHONY : CMakeFiles/flattests.dir/src/reflection.cpp.o.requires
-
-CMakeFiles/flattests.dir/src/reflection.cpp.o.provides: CMakeFiles/flattests.dir/src/reflection.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/reflection.cpp.o.provides.build
-.PHONY : CMakeFiles/flattests.dir/src/reflection.cpp.o.provides
-
-CMakeFiles/flattests.dir/src/reflection.cpp.o.provides.build: CMakeFiles/flattests.dir/src/reflection.cpp.o
-
-
-CMakeFiles/flattests.dir/src/util.cpp.o: CMakeFiles/flattests.dir/flags.make
-CMakeFiles/flattests.dir/src/util.cpp.o: src/util.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object CMakeFiles/flattests.dir/src/util.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flattests.dir/src/util.cpp.o -c /home/alain/flatbuffers/src/util.cpp
-
-CMakeFiles/flattests.dir/src/util.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flattests.dir/src/util.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/util.cpp > CMakeFiles/flattests.dir/src/util.cpp.i
-
-CMakeFiles/flattests.dir/src/util.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flattests.dir/src/util.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/util.cpp -o CMakeFiles/flattests.dir/src/util.cpp.s
-
-CMakeFiles/flattests.dir/src/util.cpp.o.requires:
-
-.PHONY : CMakeFiles/flattests.dir/src/util.cpp.o.requires
-
-CMakeFiles/flattests.dir/src/util.cpp.o.provides: CMakeFiles/flattests.dir/src/util.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/util.cpp.o.provides.build
-.PHONY : CMakeFiles/flattests.dir/src/util.cpp.o.provides
-
-CMakeFiles/flattests.dir/src/util.cpp.o.provides.build: CMakeFiles/flattests.dir/src/util.cpp.o
-
-
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o: CMakeFiles/flattests.dir/flags.make
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o: src/idl_gen_fbs.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o -c /home/alain/flatbuffers/src/idl_gen_fbs.cpp
-
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/src/idl_gen_fbs.cpp > CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.i
-
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/src/idl_gen_fbs.cpp -o CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.s
-
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o.requires:
-
-.PHONY : CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o.requires
-
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o.provides: CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o.provides.build
-.PHONY : CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o.provides
-
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o.provides.build: CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o
-
-
-CMakeFiles/flattests.dir/tests/test.cpp.o: CMakeFiles/flattests.dir/flags.make
-CMakeFiles/flattests.dir/tests/test.cpp.o: tests/test.cpp
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object CMakeFiles/flattests.dir/tests/test.cpp.o"
-	/usr/bin/c++   $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/flattests.dir/tests/test.cpp.o -c /home/alain/flatbuffers/tests/test.cpp
-
-CMakeFiles/flattests.dir/tests/test.cpp.i: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/flattests.dir/tests/test.cpp.i"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/alain/flatbuffers/tests/test.cpp > CMakeFiles/flattests.dir/tests/test.cpp.i
-
-CMakeFiles/flattests.dir/tests/test.cpp.s: cmake_force
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/flattests.dir/tests/test.cpp.s"
-	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/alain/flatbuffers/tests/test.cpp -o CMakeFiles/flattests.dir/tests/test.cpp.s
-
-CMakeFiles/flattests.dir/tests/test.cpp.o.requires:
-
-.PHONY : CMakeFiles/flattests.dir/tests/test.cpp.o.requires
-
-CMakeFiles/flattests.dir/tests/test.cpp.o.provides: CMakeFiles/flattests.dir/tests/test.cpp.o.requires
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/tests/test.cpp.o.provides.build
-.PHONY : CMakeFiles/flattests.dir/tests/test.cpp.o.provides
-
-CMakeFiles/flattests.dir/tests/test.cpp.o.provides.build: CMakeFiles/flattests.dir/tests/test.cpp.o
-
-
-# Object files for target flattests
-flattests_OBJECTS = \
-"CMakeFiles/flattests.dir/src/code_generators.cpp.o" \
-"CMakeFiles/flattests.dir/src/idl_parser.cpp.o" \
-"CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o" \
-"CMakeFiles/flattests.dir/src/reflection.cpp.o" \
-"CMakeFiles/flattests.dir/src/util.cpp.o" \
-"CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o" \
-"CMakeFiles/flattests.dir/tests/test.cpp.o"
-
-# External object files for target flattests
-flattests_EXTERNAL_OBJECTS =
-
-flattests: CMakeFiles/flattests.dir/src/code_generators.cpp.o
-flattests: CMakeFiles/flattests.dir/src/idl_parser.cpp.o
-flattests: CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o
-flattests: CMakeFiles/flattests.dir/src/reflection.cpp.o
-flattests: CMakeFiles/flattests.dir/src/util.cpp.o
-flattests: CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o
-flattests: CMakeFiles/flattests.dir/tests/test.cpp.o
-flattests: CMakeFiles/flattests.dir/build.make
-flattests: CMakeFiles/flattests.dir/link.txt
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/alain/flatbuffers/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Linking CXX executable flattests"
-	$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/flattests.dir/link.txt --verbose=$(VERBOSE)
-
-# Rule to build all files generated by this target.
-CMakeFiles/flattests.dir/build: flattests
-
-.PHONY : CMakeFiles/flattests.dir/build
-
-CMakeFiles/flattests.dir/requires: CMakeFiles/flattests.dir/src/code_generators.cpp.o.requires
-CMakeFiles/flattests.dir/requires: CMakeFiles/flattests.dir/src/idl_parser.cpp.o.requires
-CMakeFiles/flattests.dir/requires: CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o.requires
-CMakeFiles/flattests.dir/requires: CMakeFiles/flattests.dir/src/reflection.cpp.o.requires
-CMakeFiles/flattests.dir/requires: CMakeFiles/flattests.dir/src/util.cpp.o.requires
-CMakeFiles/flattests.dir/requires: CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o.requires
-CMakeFiles/flattests.dir/requires: CMakeFiles/flattests.dir/tests/test.cpp.o.requires
-
-.PHONY : CMakeFiles/flattests.dir/requires
-
-CMakeFiles/flattests.dir/clean:
-	$(CMAKE_COMMAND) -P CMakeFiles/flattests.dir/cmake_clean.cmake
-.PHONY : CMakeFiles/flattests.dir/clean
-
-CMakeFiles/flattests.dir/depend: tests/monster_test_generated.h
-	cd /home/alain/flatbuffers && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers /home/alain/flatbuffers/CMakeFiles/flattests.dir/DependInfo.cmake --color=$(COLOR)
-.PHONY : CMakeFiles/flattests.dir/depend
-
diff --git a/third_party/flatbuffers/CMakeFiles/flattests.dir/cmake_clean.cmake b/third_party/flatbuffers/CMakeFiles/flattests.dir/cmake_clean.cmake
deleted file mode 100644
index 46f8d97..0000000
--- a/third_party/flatbuffers/CMakeFiles/flattests.dir/cmake_clean.cmake
+++ /dev/null
@@ -1,17 +0,0 @@
-file(REMOVE_RECURSE
-  "tests/monster_test_generated.h"
-  "CMakeFiles/flattests.dir/src/code_generators.cpp.o"
-  "CMakeFiles/flattests.dir/src/idl_parser.cpp.o"
-  "CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o"
-  "CMakeFiles/flattests.dir/src/reflection.cpp.o"
-  "CMakeFiles/flattests.dir/src/util.cpp.o"
-  "CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o"
-  "CMakeFiles/flattests.dir/tests/test.cpp.o"
-  "flattests.pdb"
-  "flattests"
-)
-
-# Per-language clean rules from dependency scanning.
-foreach(lang CXX)
-  include(CMakeFiles/flattests.dir/cmake_clean_${lang}.cmake OPTIONAL)
-endforeach()
diff --git a/third_party/flatbuffers/CMakeFiles/flattests.dir/depend.internal b/third_party/flatbuffers/CMakeFiles/flattests.dir/depend.internal
deleted file mode 100644
index 8329ea0..0000000
--- a/third_party/flatbuffers/CMakeFiles/flattests.dir/depend.internal
+++ /dev/null
@@ -1,60 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-CMakeFiles/flattests.dir/src/code_generators.cpp.o
- /home/alain/flatbuffers/src/code_generators.cpp
- include/flatbuffers/code_generators.h
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o
- /home/alain/flatbuffers/src/idl_gen_fbs.cpp
- include/flatbuffers/code_generators.h
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o
- /home/alain/flatbuffers/src/idl_gen_text.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flattests.dir/src/idl_parser.cpp.o
- /home/alain/flatbuffers/src/idl_parser.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flattests.dir/src/reflection.cpp.o
- /home/alain/flatbuffers/src/reflection.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
-CMakeFiles/flattests.dir/src/util.cpp.o
- /home/alain/flatbuffers/src/util.cpp
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/util.h
-CMakeFiles/flattests.dir/tests/test.cpp.o
- /home/alain/flatbuffers/tests/monster_test_generated.h
- /home/alain/flatbuffers/tests/namespace_test/namespace_test1_generated.h
- /home/alain/flatbuffers/tests/namespace_test/namespace_test2_generated.h
- /home/alain/flatbuffers/tests/test.cpp
- /home/alain/flatbuffers/tests/union_vector/union_vector_generated.h
- include/flatbuffers/flatbuffers.h
- include/flatbuffers/flexbuffers.h
- include/flatbuffers/hash.h
- include/flatbuffers/idl.h
- include/flatbuffers/reflection.h
- include/flatbuffers/reflection_generated.h
- include/flatbuffers/util.h
diff --git a/third_party/flatbuffers/CMakeFiles/flattests.dir/depend.make b/third_party/flatbuffers/CMakeFiles/flattests.dir/depend.make
deleted file mode 100644
index 41f54fc..0000000
--- a/third_party/flatbuffers/CMakeFiles/flattests.dir/depend.make
+++ /dev/null
@@ -1,60 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-CMakeFiles/flattests.dir/src/code_generators.cpp.o: src/code_generators.cpp
-CMakeFiles/flattests.dir/src/code_generators.cpp.o: include/flatbuffers/code_generators.h
-CMakeFiles/flattests.dir/src/code_generators.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flattests.dir/src/code_generators.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flattests.dir/src/code_generators.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flattests.dir/src/code_generators.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flattests.dir/src/code_generators.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flattests.dir/src/code_generators.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o: src/idl_gen_fbs.cpp
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o: include/flatbuffers/code_generators.h
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o: src/idl_gen_text.cpp
-CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flattests.dir/src/idl_parser.cpp.o: src/idl_parser.cpp
-CMakeFiles/flattests.dir/src/idl_parser.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flattests.dir/src/idl_parser.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flattests.dir/src/idl_parser.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flattests.dir/src/idl_parser.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flattests.dir/src/idl_parser.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flattests.dir/src/idl_parser.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flattests.dir/src/reflection.cpp.o: src/reflection.cpp
-CMakeFiles/flattests.dir/src/reflection.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flattests.dir/src/reflection.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flattests.dir/src/reflection.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flattests.dir/src/reflection.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flattests.dir/src/util.cpp.o: src/util.cpp
-CMakeFiles/flattests.dir/src/util.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flattests.dir/src/util.cpp.o: include/flatbuffers/util.h
-
-CMakeFiles/flattests.dir/tests/test.cpp.o: tests/monster_test_generated.h
-CMakeFiles/flattests.dir/tests/test.cpp.o: tests/namespace_test/namespace_test1_generated.h
-CMakeFiles/flattests.dir/tests/test.cpp.o: tests/namespace_test/namespace_test2_generated.h
-CMakeFiles/flattests.dir/tests/test.cpp.o: tests/test.cpp
-CMakeFiles/flattests.dir/tests/test.cpp.o: tests/union_vector/union_vector_generated.h
-CMakeFiles/flattests.dir/tests/test.cpp.o: include/flatbuffers/flatbuffers.h
-CMakeFiles/flattests.dir/tests/test.cpp.o: include/flatbuffers/flexbuffers.h
-CMakeFiles/flattests.dir/tests/test.cpp.o: include/flatbuffers/hash.h
-CMakeFiles/flattests.dir/tests/test.cpp.o: include/flatbuffers/idl.h
-CMakeFiles/flattests.dir/tests/test.cpp.o: include/flatbuffers/reflection.h
-CMakeFiles/flattests.dir/tests/test.cpp.o: include/flatbuffers/reflection_generated.h
-CMakeFiles/flattests.dir/tests/test.cpp.o: include/flatbuffers/util.h
-
diff --git a/third_party/flatbuffers/CMakeFiles/flattests.dir/flags.make b/third_party/flatbuffers/CMakeFiles/flattests.dir/flags.make
deleted file mode 100644
index c56d648..0000000
--- a/third_party/flatbuffers/CMakeFiles/flattests.dir/flags.make
+++ /dev/null
@@ -1,10 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# compile CXX with /usr/bin/c++
-CXX_FLAGS =  -std=c++0x -Wall -pedantic -Werror -Wextra -Werror=shadow -fsigned-char  
-
-CXX_DEFINES = -DFLATBUFFERS_DEBUG_VERIFICATION_FAILURE=1 -DFLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE
-
-CXX_INCLUDES = -I/home/alain/flatbuffers/include -I/home/alain/flatbuffers/grpc -I/home/alain/flatbuffers/tests -I/home/alain/flatbuffers/samples 
-
diff --git a/third_party/flatbuffers/CMakeFiles/flattests.dir/link.txt b/third_party/flatbuffers/CMakeFiles/flattests.dir/link.txt
deleted file mode 100644
index 1b6d013..0000000
--- a/third_party/flatbuffers/CMakeFiles/flattests.dir/link.txt
+++ /dev/null
@@ -1 +0,0 @@
-/usr/bin/c++    -std=c++0x -Wall -pedantic -Werror -Wextra -Werror=shadow -fsigned-char   CMakeFiles/flattests.dir/src/code_generators.cpp.o CMakeFiles/flattests.dir/src/idl_parser.cpp.o CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o CMakeFiles/flattests.dir/src/reflection.cpp.o CMakeFiles/flattests.dir/src/util.cpp.o CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o CMakeFiles/flattests.dir/tests/test.cpp.o  -o flattests -rdynamic 
diff --git a/third_party/flatbuffers/CMakeFiles/flattests.dir/progress.make b/third_party/flatbuffers/CMakeFiles/flattests.dir/progress.make
deleted file mode 100644
index b1d90db..0000000
--- a/third_party/flatbuffers/CMakeFiles/flattests.dir/progress.make
+++ /dev/null
@@ -1,10 +0,0 @@
-CMAKE_PROGRESS_1 = 38
-CMAKE_PROGRESS_2 = 39
-CMAKE_PROGRESS_3 = 40
-CMAKE_PROGRESS_4 = 41
-CMAKE_PROGRESS_5 = 42
-CMAKE_PROGRESS_6 = 43
-CMAKE_PROGRESS_7 = 44
-CMAKE_PROGRESS_8 = 45
-CMAKE_PROGRESS_9 = 46
-
diff --git a/third_party/flatbuffers/CMakeFiles/progress.marks b/third_party/flatbuffers/CMakeFiles/progress.marks
deleted file mode 100644
index 9e5feb5..0000000
--- a/third_party/flatbuffers/CMakeFiles/progress.marks
+++ /dev/null
@@ -1 +0,0 @@
-46
diff --git a/third_party/flatbuffers/CMakeLists.txt b/third_party/flatbuffers/CMakeLists.txt
deleted file mode 100644
index 5d3c44d..0000000
--- a/third_party/flatbuffers/CMakeLists.txt
+++ /dev/null
@@ -1,254 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-
-project(FlatBuffers)
-
-# NOTE: Code coverage only works on Linux & OSX.
-option(FLATBUFFERS_CODE_COVERAGE "Enable the code coverage build option." OFF)
-option(FLATBUFFERS_BUILD_TESTS "Enable the build of tests and samples." ON)
-option(FLATBUFFERS_INSTALL "Enable the installation of targets." ON)
-option(FLATBUFFERS_BUILD_FLATLIB "Enable the build of the flatbuffers library"
-       ON)
-option(FLATBUFFERS_BUILD_FLATC "Enable the build of the flatbuffers compiler"
-       ON)
-option(FLATBUFFERS_BUILD_FLATHASH "Enable the build of flathash" ON)
-option(FLATBUFFERS_BUILD_GRPCTEST "Enable the build of grpctest" OFF)
-option(FLATBUFFERS_BUILD_SHAREDLIB
-       "Enable the build of the flatbuffers shared library"
-       OFF)
-
-if(NOT FLATBUFFERS_BUILD_FLATC AND FLATBUFFERS_BUILD_TESTS)
-    message(WARNING
-    "Cannot build tests without building the compiler. Tests will be disabled.")
-    set(FLATBUFFERS_BUILD_TESTS OFF)
-endif()
-
-set(FlatBuffers_Library_SRCS
-  include/flatbuffers/code_generators.h
-  include/flatbuffers/flatbuffers.h
-  include/flatbuffers/hash.h
-  include/flatbuffers/idl.h
-  include/flatbuffers/util.h
-  include/flatbuffers/reflection.h
-  include/flatbuffers/reflection_generated.h
-  include/flatbuffers/flexbuffers.h
-  src/code_generators.cpp
-  src/idl_parser.cpp
-  src/idl_gen_text.cpp
-  src/reflection.cpp
-  src/util.cpp
-)
-
-set(FlatBuffers_Compiler_SRCS
-  ${FlatBuffers_Library_SRCS}
-  src/idl_gen_cpp.cpp
-  src/idl_gen_general.cpp
-  src/idl_gen_go.cpp
-  src/idl_gen_js.cpp
-  src/idl_gen_php.cpp
-  src/idl_gen_python.cpp
-  src/idl_gen_fbs.cpp
-  src/idl_gen_grpc.cpp
-  src/flatc.cpp
-  src/flatc_main.cpp
-  grpc/src/compiler/schema_interface.h
-  grpc/src/compiler/cpp_generator.h
-  grpc/src/compiler/cpp_generator.cc
-  grpc/src/compiler/go_generator.h
-  grpc/src/compiler/go_generator.cc
-)
-
-set(FlatHash_SRCS
-  include/flatbuffers/hash.h
-  src/flathash.cpp
-)
-
-set(FlatBuffers_Tests_SRCS
-  ${FlatBuffers_Library_SRCS}
-  src/idl_gen_fbs.cpp
-  tests/test.cpp
-  # file generate by running compiler on tests/monster_test.fbs
-  ${CMAKE_CURRENT_BINARY_DIR}/tests/monster_test_generated.h
-)
-
-set(FlatBuffers_Sample_Binary_SRCS
-  include/flatbuffers/flatbuffers.h
-  samples/sample_binary.cpp
-  # file generated by running compiler on samples/monster.fbs
-  ${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
-)
-
-set(FlatBuffers_Sample_Text_SRCS
-  ${FlatBuffers_Library_SRCS}
-  samples/sample_text.cpp
-  # file generated by running compiler on samples/monster.fbs
-  ${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
-)
-
-set(FlatBuffers_GRPCTest_SRCS
-  include/flatbuffers/flatbuffers.h
-  include/flatbuffers/grpc.h
-  tests/monster_test.grpc.fb.h
-  tests/monster_test.grpc.fb.cc
-  grpc/tests/grpctest.cpp
-  # file generated by running compiler on samples/monster.fbs
-  ${CMAKE_CURRENT_BINARY_DIR}/samples/monster_generated.h
-)
-
-# source_group(Compiler FILES ${FlatBuffers_Compiler_SRCS})
-# source_group(Tests FILES ${FlatBuffers_Tests_SRCS})
-
-if(EXISTS "${CMAKE_TOOLCHAIN_FILE}")
-  # do not apply any global settings if the toolchain
-  # is being configured externally
-elseif(APPLE)
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -Werror -Wextra")
-elseif(CMAKE_COMPILER_IS_GNUCXX)
-  if(CYGWIN)
-    set(CMAKE_CXX_FLAGS
-      "${CMAKE_CXX_FLAGS} -std=gnu++11")
-  else(CYGWIN)
-    set(CMAKE_CXX_FLAGS
-      "${CMAKE_CXX_FLAGS} -std=c++0x")
-  endif(CYGWIN)
-  set(CMAKE_CXX_FLAGS
-    "${CMAKE_CXX_FLAGS} -Wall -pedantic  -Wextra -Werror=shadow")
-  if (GCC_VERSION VERSION_GREATER 4.4)
-    set(CMAKE_CXX_FLAGS
-      "${CMAKE_CXX_FLAGS} -Wunused-result -Werror=unused-result \
-                          -Wunused-parameter -Werror=unused-parameter")
-  endif()
-
-  # Certain platforms such as ARM do not use signed chars by default
-  # which causes issues with certain bounds checks.
-  set(CMAKE_CXX_FLAGS
-    "${CMAKE_CXX_FLAGS} -fsigned-char")
-
-elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
-  set(CMAKE_CXX_FLAGS
-      "${CMAKE_CXX_FLAGS} -std=c++0x -Wall -pedantic \
-                          -Wextra")
-  if(NOT "${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
-    set(CMAKE_CXX_FLAGS
-        "${CMAKE_CXX_FLAGS} -stdlib=libc++")
-  endif()
-  if(NOT ("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD" OR
-          "${CMAKE_SYSTEM_NAME}" MATCHES "Linux"))
-    set(CMAKE_EXE_LINKER_FLAGS
-        "${CMAKE_EXE_LINKER_FLAGS} -lc++abi")
-  endif()
-
-  # Certain platforms such as ARM do not use signed chars by default
-  # which causes issues with certain bounds checks.
-  set(CMAKE_CXX_FLAGS
-    "${CMAKE_CXX_FLAGS} -fsigned-char")
-
-elseif(MSVC)
-  # Visual Studio pedantic build settings
-  # warning C4512: assignment operator could not be generated
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /WX /wd4512")
-endif()
-
-if(FLATBUFFERS_CODE_COVERAGE)
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fprofile-arcs -ftest-coverage")
-  set(CMAKE_EXE_LINKER_FLAGS
-      "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
-endif()
-
-if(BIICODE)
-  include(biicode/cmake/biicode.cmake)
-  return()
-endif()
-
-include_directories(include)
-include_directories(grpc)
-
-if(FLATBUFFERS_BUILD_FLATLIB)
-add_library(flatbuffers STATIC ${FlatBuffers_Library_SRCS})
-endif()
-
-if(FLATBUFFERS_BUILD_FLATC)
-  add_executable(flatc ${FlatBuffers_Compiler_SRCS})
-  if(NOT FLATBUFFERS_FLATC_EXECUTABLE)
-    set(FLATBUFFERS_FLATC_EXECUTABLE $<TARGET_FILE:flatc>)
-  endif()
-endif()
-
-if(FLATBUFFERS_BUILD_FLATHASH)
-  add_executable(flathash ${FlatHash_SRCS})
-endif()
-
-if(FLATBUFFERS_BUILD_SHAREDLIB)
-  add_library(flatbuffers_shared SHARED ${FlatBuffers_Library_SRCS})
-  set_target_properties(flatbuffers_shared PROPERTIES OUTPUT_NAME flatbuffers)
-endif()
-
-function(compile_flatbuffers_schema_to_cpp SRC_FBS)
-  get_filename_component(SRC_FBS_DIR ${SRC_FBS} PATH)
-  string(REGEX REPLACE "\\.fbs$" "_generated.h" GEN_HEADER ${SRC_FBS})
-  add_custom_command(
-    OUTPUT ${GEN_HEADER}
-    COMMAND "${FLATBUFFERS_FLATC_EXECUTABLE}" -c --no-includes --gen-mutable
-            --gen-object-api -o "${SRC_FBS_DIR}"
-            "${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FBS}"
-    DEPENDS flatc)
-endfunction()
-
-function(compile_flatbuffers_schema_to_binary SRC_FBS)
-  get_filename_component(SRC_FBS_DIR ${SRC_FBS} PATH)
-  string(REGEX REPLACE "\\.fbs$" ".bfbs" GEN_BINARY_SCHEMA ${SRC_FBS})
-  add_custom_command(
-    OUTPUT ${GEN_BINARY_SCHEMA}
-    COMMAND "${FLATBUFFERS_FLATC_EXECUTABLE}" -b --schema -o "${SRC_FBS_DIR}"
-            "${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FBS}"
-    DEPENDS flatc)
-endfunction()
-
-if(FLATBUFFERS_BUILD_TESTS)
-  compile_flatbuffers_schema_to_cpp(tests/monster_test.fbs)
-  include_directories(${CMAKE_CURRENT_BINARY_DIR}/tests)
-  add_executable(flattests ${FlatBuffers_Tests_SRCS})
-  set_property(TARGET flattests
-    PROPERTY COMPILE_DEFINITIONS FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE
-    FLATBUFFERS_DEBUG_VERIFICATION_FAILURE=1)
-
-  compile_flatbuffers_schema_to_cpp(samples/monster.fbs)
-  include_directories(${CMAKE_CURRENT_BINARY_DIR}/samples)
-  add_executable(flatsamplebinary ${FlatBuffers_Sample_Binary_SRCS})
-  add_executable(flatsampletext ${FlatBuffers_Sample_Text_SRCS})
-endif()
-
-if(FLATBUFFERS_BUILD_GRPCTEST)
-  if(CMAKE_COMPILER_IS_GNUCXX)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter")
-  endif()
-  add_executable(grpctest ${FlatBuffers_GRPCTest_SRCS})
-  target_link_libraries(grpctest grpc++_unsecure grpc pthread dl)
-endif()
-
-if(FLATBUFFERS_INSTALL)
-  install(DIRECTORY include/flatbuffers DESTINATION include)
-  if(FLATBUFFERS_BUILD_FLATLIB)
-    install(TARGETS flatbuffers DESTINATION lib)
-  endif()
-  if(FLATBUFFERS_BUILD_FLATC)
-    install(TARGETS flatc DESTINATION bin)
-  endif()
-  if(FLATBUFFERS_BUILD_SHAREDLIB)
-    install(TARGETS flatbuffers_shared DESTINATION lib)
-  endif()
-endif()
-
-if(FLATBUFFERS_BUILD_TESTS)
-  enable_testing()
-
-  file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/tests" DESTINATION
-       "${CMAKE_CURRENT_BINARY_DIR}")
-  add_test(NAME flattests COMMAND flattests)
-endif()
-
-include(CMake/BuildFlatBuffers.cmake)
-
-if(FLATBUFFERS_PACKAGE_DEBIAN)
-    include(CMake/PackageDebian.cmake)
-endif()
diff --git a/third_party/flatbuffers/CONTRIBUTING.md b/third_party/flatbuffers/CONTRIBUTING.md
deleted file mode 100644
index 17428ad..0000000
--- a/third_party/flatbuffers/CONTRIBUTING.md
+++ /dev/null
@@ -1,42 +0,0 @@
-Contributing    {#contributing}
-============
-
-Want to contribute? Great! First, read this page (including the small print at
-the end).
-
-# Before you contribute
-Before we can use your code, you must sign the
-[Google Individual Contributor License Agreement](https://developers.google.com/open-source/cla/individual?csw=1)
-(CLA), which you can do online. The CLA is necessary mainly because you own the
-copyright to your changes, even after your contribution becomes part of our
-codebase, so we need your permission to use and distribute your code. We also
-need to be sure of various other things—for instance that you'll tell us if you
-know that your code infringes on other people's patents. You don't have to sign
-the CLA until after you've submitted your code for review and a member has
-approved it, but you must do it before we can put your code into our codebase.
-Before you start working on a larger contribution, you should get in touch with
-us first through the issue tracker with your idea so that we can help out and
-possibly guide you. Coordinating up front makes it much easier to avoid
-frustration later on.
-
-# Code reviews
-All submissions, including submissions by project members, require review. We
-use Github pull requests for this purpose.
-
-Some tips for good pull requests:
-* Use our code
-  [style guide](https://google.github.io/styleguide/cppguide.html).
-  When in doubt, try to stay true to the existing code of the project.
-* Write a descriptive commit message. What problem are you solving and what
-  are the consequences? Where and what did you test? Some good tips:
-  [here](http://robots.thoughtbot.com/5-useful-tips-for-a-better-commit-message)
-  and [here](https://www.kernel.org/doc/Documentation/SubmittingPatches).
-* If your PR consists of multiple commits which are successive improvements /
-  fixes to your first commit, consider squashing them into a single commit
-  (`git rebase -i`) such that your PR is a single commit on top of the current
-  HEAD. This make reviewing the code so much easier, and our history more
-  readable.
-
-# The small print
-Contributions made by corporations are covered by a different agreement than
-the one above, the Software Grant and Corporate Contributor License Agreement.
diff --git a/third_party/flatbuffers/CTestTestfile.cmake b/third_party/flatbuffers/CTestTestfile.cmake
deleted file mode 100644
index c4fd7aa..0000000
--- a/third_party/flatbuffers/CTestTestfile.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-# CMake generated Testfile for 
-# Source directory: /home/alain/flatbuffers
-# Build directory: /home/alain/flatbuffers
-# 
-# This file includes the relevant testing commands required for 
-# testing this directory and lists subdirectories to be tested as well.
-add_test(flattests "/home/alain/flatbuffers/flattests")
diff --git a/third_party/flatbuffers/LICENSE.txt b/third_party/flatbuffers/LICENSE.txt
deleted file mode 100644
index a4c5efd..0000000
--- a/third_party/flatbuffers/LICENSE.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2014 Google Inc.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/third_party/flatbuffers/Makefile b/third_party/flatbuffers/Makefile
deleted file mode 100644
index b472e1f..0000000
--- a/third_party/flatbuffers/Makefile
+++ /dev/null
@@ -1,956 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.5
-
-# Default target executed when no arguments are given to make.
-default_target: all
-
-.PHONY : default_target
-
-# Allow only one "make -f Makefile2" at a time, but pass parallelism.
-.NOTPARALLEL:
-
-
-#=============================================================================
-# Special targets provided by cmake.
-
-# Disable implicit rules so canonical targets will work.
-.SUFFIXES:
-
-
-# Remove some rules from gmake that .SUFFIXES does not remove.
-SUFFIXES =
-
-.SUFFIXES: .hpux_make_needs_suffix_list
-
-
-# Suppress display of executed commands.
-$(VERBOSE).SILENT:
-
-
-# A target that is always out of date.
-cmake_force:
-
-.PHONY : cmake_force
-
-#=============================================================================
-# Set environment variables for the build.
-
-# The shell in which to execute make rules.
-SHELL = /bin/sh
-
-# The CMake executable.
-CMAKE_COMMAND = /usr/bin/cmake
-
-# The command to remove a file.
-RM = /usr/bin/cmake -E remove -f
-
-# Escaping for special characters.
-EQUALS = =
-
-# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /home/alain/flatbuffers
-
-# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /home/alain/flatbuffers
-
-#=============================================================================
-# Targets provided globally by CMake.
-
-# Special rule for the target rebuild_cache
-rebuild_cache:
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
-	/usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
-.PHONY : rebuild_cache
-
-# Special rule for the target rebuild_cache
-rebuild_cache/fast: rebuild_cache
-
-.PHONY : rebuild_cache/fast
-
-# Special rule for the target install
-install: preinstall
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
-	/usr/bin/cmake -P cmake_install.cmake
-.PHONY : install
-
-# Special rule for the target install
-install/fast: preinstall/fast
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
-	/usr/bin/cmake -P cmake_install.cmake
-.PHONY : install/fast
-
-# Special rule for the target list_install_components
-list_install_components:
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
-.PHONY : list_install_components
-
-# Special rule for the target list_install_components
-list_install_components/fast: list_install_components
-
-.PHONY : list_install_components/fast
-
-# Special rule for the target install/strip
-install/strip: preinstall
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
-	/usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
-.PHONY : install/strip
-
-# Special rule for the target install/strip
-install/strip/fast: install/strip
-
-.PHONY : install/strip/fast
-
-# Special rule for the target install/local
-install/local: preinstall
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
-	/usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
-.PHONY : install/local
-
-# Special rule for the target install/local
-install/local/fast: install/local
-
-.PHONY : install/local/fast
-
-# Special rule for the target test
-test:
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..."
-	/usr/bin/ctest --force-new-ctest-process $(ARGS)
-.PHONY : test
-
-# Special rule for the target test
-test/fast: test
-
-.PHONY : test/fast
-
-# Special rule for the target edit_cache
-edit_cache:
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..."
-	/usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available.
-.PHONY : edit_cache
-
-# Special rule for the target edit_cache
-edit_cache/fast: edit_cache
-
-.PHONY : edit_cache/fast
-
-# The main all target
-all: cmake_check_build_system
-	$(CMAKE_COMMAND) -E cmake_progress_start /home/alain/flatbuffers/CMakeFiles /home/alain/flatbuffers/CMakeFiles/progress.marks
-	$(MAKE) -f CMakeFiles/Makefile2 all
-	$(CMAKE_COMMAND) -E cmake_progress_start /home/alain/flatbuffers/CMakeFiles 0
-.PHONY : all
-
-# The main clean target
-clean:
-	$(MAKE) -f CMakeFiles/Makefile2 clean
-.PHONY : clean
-
-# The main clean target
-clean/fast: clean
-
-.PHONY : clean/fast
-
-# Prepare targets for installation.
-preinstall: all
-	$(MAKE) -f CMakeFiles/Makefile2 preinstall
-.PHONY : preinstall
-
-# Prepare targets for installation.
-preinstall/fast:
-	$(MAKE) -f CMakeFiles/Makefile2 preinstall
-.PHONY : preinstall/fast
-
-# clear depends
-depend:
-	$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
-.PHONY : depend
-
-#=============================================================================
-# Target rules for targets named flattests
-
-# Build rule for target.
-flattests: cmake_check_build_system
-	$(MAKE) -f CMakeFiles/Makefile2 flattests
-.PHONY : flattests
-
-# fast build rule for target.
-flattests/fast:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/build
-.PHONY : flattests/fast
-
-#=============================================================================
-# Target rules for targets named flatc
-
-# Build rule for target.
-flatc: cmake_check_build_system
-	$(MAKE) -f CMakeFiles/Makefile2 flatc
-.PHONY : flatc
-
-# fast build rule for target.
-flatc/fast:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/build
-.PHONY : flatc/fast
-
-#=============================================================================
-# Target rules for targets named flatbuffers
-
-# Build rule for target.
-flatbuffers: cmake_check_build_system
-	$(MAKE) -f CMakeFiles/Makefile2 flatbuffers
-.PHONY : flatbuffers
-
-# fast build rule for target.
-flatbuffers/fast:
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/build
-.PHONY : flatbuffers/fast
-
-#=============================================================================
-# Target rules for targets named flatsamplebinary
-
-# Build rule for target.
-flatsamplebinary: cmake_check_build_system
-	$(MAKE) -f CMakeFiles/Makefile2 flatsamplebinary
-.PHONY : flatsamplebinary
-
-# fast build rule for target.
-flatsamplebinary/fast:
-	$(MAKE) -f CMakeFiles/flatsamplebinary.dir/build.make CMakeFiles/flatsamplebinary.dir/build
-.PHONY : flatsamplebinary/fast
-
-#=============================================================================
-# Target rules for targets named flathash
-
-# Build rule for target.
-flathash: cmake_check_build_system
-	$(MAKE) -f CMakeFiles/Makefile2 flathash
-.PHONY : flathash
-
-# fast build rule for target.
-flathash/fast:
-	$(MAKE) -f CMakeFiles/flathash.dir/build.make CMakeFiles/flathash.dir/build
-.PHONY : flathash/fast
-
-#=============================================================================
-# Target rules for targets named flatsampletext
-
-# Build rule for target.
-flatsampletext: cmake_check_build_system
-	$(MAKE) -f CMakeFiles/Makefile2 flatsampletext
-.PHONY : flatsampletext
-
-# fast build rule for target.
-flatsampletext/fast:
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/build
-.PHONY : flatsampletext/fast
-
-grpc/src/compiler/cpp_generator.o: grpc/src/compiler/cpp_generator.cc.o
-
-.PHONY : grpc/src/compiler/cpp_generator.o
-
-# target to build an object file
-grpc/src/compiler/cpp_generator.cc.o:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.o
-.PHONY : grpc/src/compiler/cpp_generator.cc.o
-
-grpc/src/compiler/cpp_generator.i: grpc/src/compiler/cpp_generator.cc.i
-
-.PHONY : grpc/src/compiler/cpp_generator.i
-
-# target to preprocess a source file
-grpc/src/compiler/cpp_generator.cc.i:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.i
-.PHONY : grpc/src/compiler/cpp_generator.cc.i
-
-grpc/src/compiler/cpp_generator.s: grpc/src/compiler/cpp_generator.cc.s
-
-.PHONY : grpc/src/compiler/cpp_generator.s
-
-# target to generate assembly for a file
-grpc/src/compiler/cpp_generator.cc.s:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/grpc/src/compiler/cpp_generator.cc.s
-.PHONY : grpc/src/compiler/cpp_generator.cc.s
-
-grpc/src/compiler/go_generator.o: grpc/src/compiler/go_generator.cc.o
-
-.PHONY : grpc/src/compiler/go_generator.o
-
-# target to build an object file
-grpc/src/compiler/go_generator.cc.o:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.o
-.PHONY : grpc/src/compiler/go_generator.cc.o
-
-grpc/src/compiler/go_generator.i: grpc/src/compiler/go_generator.cc.i
-
-.PHONY : grpc/src/compiler/go_generator.i
-
-# target to preprocess a source file
-grpc/src/compiler/go_generator.cc.i:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.i
-.PHONY : grpc/src/compiler/go_generator.cc.i
-
-grpc/src/compiler/go_generator.s: grpc/src/compiler/go_generator.cc.s
-
-.PHONY : grpc/src/compiler/go_generator.s
-
-# target to generate assembly for a file
-grpc/src/compiler/go_generator.cc.s:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/grpc/src/compiler/go_generator.cc.s
-.PHONY : grpc/src/compiler/go_generator.cc.s
-
-samples/sample_binary.o: samples/sample_binary.cpp.o
-
-.PHONY : samples/sample_binary.o
-
-# target to build an object file
-samples/sample_binary.cpp.o:
-	$(MAKE) -f CMakeFiles/flatsamplebinary.dir/build.make CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.o
-.PHONY : samples/sample_binary.cpp.o
-
-samples/sample_binary.i: samples/sample_binary.cpp.i
-
-.PHONY : samples/sample_binary.i
-
-# target to preprocess a source file
-samples/sample_binary.cpp.i:
-	$(MAKE) -f CMakeFiles/flatsamplebinary.dir/build.make CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.i
-.PHONY : samples/sample_binary.cpp.i
-
-samples/sample_binary.s: samples/sample_binary.cpp.s
-
-.PHONY : samples/sample_binary.s
-
-# target to generate assembly for a file
-samples/sample_binary.cpp.s:
-	$(MAKE) -f CMakeFiles/flatsamplebinary.dir/build.make CMakeFiles/flatsamplebinary.dir/samples/sample_binary.cpp.s
-.PHONY : samples/sample_binary.cpp.s
-
-samples/sample_text.o: samples/sample_text.cpp.o
-
-.PHONY : samples/sample_text.o
-
-# target to build an object file
-samples/sample_text.cpp.o:
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.o
-.PHONY : samples/sample_text.cpp.o
-
-samples/sample_text.i: samples/sample_text.cpp.i
-
-.PHONY : samples/sample_text.i
-
-# target to preprocess a source file
-samples/sample_text.cpp.i:
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.i
-.PHONY : samples/sample_text.cpp.i
-
-samples/sample_text.s: samples/sample_text.cpp.s
-
-.PHONY : samples/sample_text.s
-
-# target to generate assembly for a file
-samples/sample_text.cpp.s:
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/samples/sample_text.cpp.s
-.PHONY : samples/sample_text.cpp.s
-
-src/code_generators.o: src/code_generators.cpp.o
-
-.PHONY : src/code_generators.o
-
-# target to build an object file
-src/code_generators.cpp.o:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/code_generators.cpp.o
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/code_generators.cpp.o
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/code_generators.cpp.o
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/code_generators.cpp.o
-.PHONY : src/code_generators.cpp.o
-
-src/code_generators.i: src/code_generators.cpp.i
-
-.PHONY : src/code_generators.i
-
-# target to preprocess a source file
-src/code_generators.cpp.i:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/code_generators.cpp.i
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/code_generators.cpp.i
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/code_generators.cpp.i
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/code_generators.cpp.i
-.PHONY : src/code_generators.cpp.i
-
-src/code_generators.s: src/code_generators.cpp.s
-
-.PHONY : src/code_generators.s
-
-# target to generate assembly for a file
-src/code_generators.cpp.s:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/code_generators.cpp.s
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/code_generators.cpp.s
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/code_generators.cpp.s
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/code_generators.cpp.s
-.PHONY : src/code_generators.cpp.s
-
-src/flatc.o: src/flatc.cpp.o
-
-.PHONY : src/flatc.o
-
-# target to build an object file
-src/flatc.cpp.o:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/flatc.cpp.o
-.PHONY : src/flatc.cpp.o
-
-src/flatc.i: src/flatc.cpp.i
-
-.PHONY : src/flatc.i
-
-# target to preprocess a source file
-src/flatc.cpp.i:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/flatc.cpp.i
-.PHONY : src/flatc.cpp.i
-
-src/flatc.s: src/flatc.cpp.s
-
-.PHONY : src/flatc.s
-
-# target to generate assembly for a file
-src/flatc.cpp.s:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/flatc.cpp.s
-.PHONY : src/flatc.cpp.s
-
-src/flatc_main.o: src/flatc_main.cpp.o
-
-.PHONY : src/flatc_main.o
-
-# target to build an object file
-src/flatc_main.cpp.o:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/flatc_main.cpp.o
-.PHONY : src/flatc_main.cpp.o
-
-src/flatc_main.i: src/flatc_main.cpp.i
-
-.PHONY : src/flatc_main.i
-
-# target to preprocess a source file
-src/flatc_main.cpp.i:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/flatc_main.cpp.i
-.PHONY : src/flatc_main.cpp.i
-
-src/flatc_main.s: src/flatc_main.cpp.s
-
-.PHONY : src/flatc_main.s
-
-# target to generate assembly for a file
-src/flatc_main.cpp.s:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/flatc_main.cpp.s
-.PHONY : src/flatc_main.cpp.s
-
-src/flathash.o: src/flathash.cpp.o
-
-.PHONY : src/flathash.o
-
-# target to build an object file
-src/flathash.cpp.o:
-	$(MAKE) -f CMakeFiles/flathash.dir/build.make CMakeFiles/flathash.dir/src/flathash.cpp.o
-.PHONY : src/flathash.cpp.o
-
-src/flathash.i: src/flathash.cpp.i
-
-.PHONY : src/flathash.i
-
-# target to preprocess a source file
-src/flathash.cpp.i:
-	$(MAKE) -f CMakeFiles/flathash.dir/build.make CMakeFiles/flathash.dir/src/flathash.cpp.i
-.PHONY : src/flathash.cpp.i
-
-src/flathash.s: src/flathash.cpp.s
-
-.PHONY : src/flathash.s
-
-# target to generate assembly for a file
-src/flathash.cpp.s:
-	$(MAKE) -f CMakeFiles/flathash.dir/build.make CMakeFiles/flathash.dir/src/flathash.cpp.s
-.PHONY : src/flathash.cpp.s
-
-src/idl_gen_cpp.o: src/idl_gen_cpp.cpp.o
-
-.PHONY : src/idl_gen_cpp.o
-
-# target to build an object file
-src/idl_gen_cpp.cpp.o:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.o
-.PHONY : src/idl_gen_cpp.cpp.o
-
-src/idl_gen_cpp.i: src/idl_gen_cpp.cpp.i
-
-.PHONY : src/idl_gen_cpp.i
-
-# target to preprocess a source file
-src/idl_gen_cpp.cpp.i:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.i
-.PHONY : src/idl_gen_cpp.cpp.i
-
-src/idl_gen_cpp.s: src/idl_gen_cpp.cpp.s
-
-.PHONY : src/idl_gen_cpp.s
-
-# target to generate assembly for a file
-src/idl_gen_cpp.cpp.s:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_cpp.cpp.s
-.PHONY : src/idl_gen_cpp.cpp.s
-
-src/idl_gen_fbs.o: src/idl_gen_fbs.cpp.o
-
-.PHONY : src/idl_gen_fbs.o
-
-# target to build an object file
-src/idl_gen_fbs.cpp.o:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.o
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.o
-.PHONY : src/idl_gen_fbs.cpp.o
-
-src/idl_gen_fbs.i: src/idl_gen_fbs.cpp.i
-
-.PHONY : src/idl_gen_fbs.i
-
-# target to preprocess a source file
-src/idl_gen_fbs.cpp.i:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.i
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.i
-.PHONY : src/idl_gen_fbs.cpp.i
-
-src/idl_gen_fbs.s: src/idl_gen_fbs.cpp.s
-
-.PHONY : src/idl_gen_fbs.s
-
-# target to generate assembly for a file
-src/idl_gen_fbs.cpp.s:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/idl_gen_fbs.cpp.s
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_fbs.cpp.s
-.PHONY : src/idl_gen_fbs.cpp.s
-
-src/idl_gen_general.o: src/idl_gen_general.cpp.o
-
-.PHONY : src/idl_gen_general.o
-
-# target to build an object file
-src/idl_gen_general.cpp.o:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_general.cpp.o
-.PHONY : src/idl_gen_general.cpp.o
-
-src/idl_gen_general.i: src/idl_gen_general.cpp.i
-
-.PHONY : src/idl_gen_general.i
-
-# target to preprocess a source file
-src/idl_gen_general.cpp.i:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_general.cpp.i
-.PHONY : src/idl_gen_general.cpp.i
-
-src/idl_gen_general.s: src/idl_gen_general.cpp.s
-
-.PHONY : src/idl_gen_general.s
-
-# target to generate assembly for a file
-src/idl_gen_general.cpp.s:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_general.cpp.s
-.PHONY : src/idl_gen_general.cpp.s
-
-src/idl_gen_go.o: src/idl_gen_go.cpp.o
-
-.PHONY : src/idl_gen_go.o
-
-# target to build an object file
-src/idl_gen_go.cpp.o:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_go.cpp.o
-.PHONY : src/idl_gen_go.cpp.o
-
-src/idl_gen_go.i: src/idl_gen_go.cpp.i
-
-.PHONY : src/idl_gen_go.i
-
-# target to preprocess a source file
-src/idl_gen_go.cpp.i:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_go.cpp.i
-.PHONY : src/idl_gen_go.cpp.i
-
-src/idl_gen_go.s: src/idl_gen_go.cpp.s
-
-.PHONY : src/idl_gen_go.s
-
-# target to generate assembly for a file
-src/idl_gen_go.cpp.s:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_go.cpp.s
-.PHONY : src/idl_gen_go.cpp.s
-
-src/idl_gen_grpc.o: src/idl_gen_grpc.cpp.o
-
-.PHONY : src/idl_gen_grpc.o
-
-# target to build an object file
-src/idl_gen_grpc.cpp.o:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.o
-.PHONY : src/idl_gen_grpc.cpp.o
-
-src/idl_gen_grpc.i: src/idl_gen_grpc.cpp.i
-
-.PHONY : src/idl_gen_grpc.i
-
-# target to preprocess a source file
-src/idl_gen_grpc.cpp.i:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.i
-.PHONY : src/idl_gen_grpc.cpp.i
-
-src/idl_gen_grpc.s: src/idl_gen_grpc.cpp.s
-
-.PHONY : src/idl_gen_grpc.s
-
-# target to generate assembly for a file
-src/idl_gen_grpc.cpp.s:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_grpc.cpp.s
-.PHONY : src/idl_gen_grpc.cpp.s
-
-src/idl_gen_js.o: src/idl_gen_js.cpp.o
-
-.PHONY : src/idl_gen_js.o
-
-# target to build an object file
-src/idl_gen_js.cpp.o:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_js.cpp.o
-.PHONY : src/idl_gen_js.cpp.o
-
-src/idl_gen_js.i: src/idl_gen_js.cpp.i
-
-.PHONY : src/idl_gen_js.i
-
-# target to preprocess a source file
-src/idl_gen_js.cpp.i:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_js.cpp.i
-.PHONY : src/idl_gen_js.cpp.i
-
-src/idl_gen_js.s: src/idl_gen_js.cpp.s
-
-.PHONY : src/idl_gen_js.s
-
-# target to generate assembly for a file
-src/idl_gen_js.cpp.s:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_js.cpp.s
-.PHONY : src/idl_gen_js.cpp.s
-
-src/idl_gen_php.o: src/idl_gen_php.cpp.o
-
-.PHONY : src/idl_gen_php.o
-
-# target to build an object file
-src/idl_gen_php.cpp.o:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_php.cpp.o
-.PHONY : src/idl_gen_php.cpp.o
-
-src/idl_gen_php.i: src/idl_gen_php.cpp.i
-
-.PHONY : src/idl_gen_php.i
-
-# target to preprocess a source file
-src/idl_gen_php.cpp.i:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_php.cpp.i
-.PHONY : src/idl_gen_php.cpp.i
-
-src/idl_gen_php.s: src/idl_gen_php.cpp.s
-
-.PHONY : src/idl_gen_php.s
-
-# target to generate assembly for a file
-src/idl_gen_php.cpp.s:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_php.cpp.s
-.PHONY : src/idl_gen_php.cpp.s
-
-src/idl_gen_python.o: src/idl_gen_python.cpp.o
-
-.PHONY : src/idl_gen_python.o
-
-# target to build an object file
-src/idl_gen_python.cpp.o:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_python.cpp.o
-.PHONY : src/idl_gen_python.cpp.o
-
-src/idl_gen_python.i: src/idl_gen_python.cpp.i
-
-.PHONY : src/idl_gen_python.i
-
-# target to preprocess a source file
-src/idl_gen_python.cpp.i:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_python.cpp.i
-.PHONY : src/idl_gen_python.cpp.i
-
-src/idl_gen_python.s: src/idl_gen_python.cpp.s
-
-.PHONY : src/idl_gen_python.s
-
-# target to generate assembly for a file
-src/idl_gen_python.cpp.s:
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_python.cpp.s
-.PHONY : src/idl_gen_python.cpp.s
-
-src/idl_gen_text.o: src/idl_gen_text.cpp.o
-
-.PHONY : src/idl_gen_text.o
-
-# target to build an object file
-src/idl_gen_text.cpp.o:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/idl_gen_text.cpp.o
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_text.cpp.o
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.o
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.o
-.PHONY : src/idl_gen_text.cpp.o
-
-src/idl_gen_text.i: src/idl_gen_text.cpp.i
-
-.PHONY : src/idl_gen_text.i
-
-# target to preprocess a source file
-src/idl_gen_text.cpp.i:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/idl_gen_text.cpp.i
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_text.cpp.i
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.i
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.i
-.PHONY : src/idl_gen_text.cpp.i
-
-src/idl_gen_text.s: src/idl_gen_text.cpp.s
-
-.PHONY : src/idl_gen_text.s
-
-# target to generate assembly for a file
-src/idl_gen_text.cpp.s:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/idl_gen_text.cpp.s
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_gen_text.cpp.s
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/idl_gen_text.cpp.s
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/idl_gen_text.cpp.s
-.PHONY : src/idl_gen_text.cpp.s
-
-src/idl_parser.o: src/idl_parser.cpp.o
-
-.PHONY : src/idl_parser.o
-
-# target to build an object file
-src/idl_parser.cpp.o:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/idl_parser.cpp.o
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_parser.cpp.o
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.o
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.o
-.PHONY : src/idl_parser.cpp.o
-
-src/idl_parser.i: src/idl_parser.cpp.i
-
-.PHONY : src/idl_parser.i
-
-# target to preprocess a source file
-src/idl_parser.cpp.i:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/idl_parser.cpp.i
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_parser.cpp.i
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.i
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.i
-.PHONY : src/idl_parser.cpp.i
-
-src/idl_parser.s: src/idl_parser.cpp.s
-
-.PHONY : src/idl_parser.s
-
-# target to generate assembly for a file
-src/idl_parser.cpp.s:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/idl_parser.cpp.s
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/idl_parser.cpp.s
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/idl_parser.cpp.s
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/idl_parser.cpp.s
-.PHONY : src/idl_parser.cpp.s
-
-src/reflection.o: src/reflection.cpp.o
-
-.PHONY : src/reflection.o
-
-# target to build an object file
-src/reflection.cpp.o:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/reflection.cpp.o
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/reflection.cpp.o
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/reflection.cpp.o
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/reflection.cpp.o
-.PHONY : src/reflection.cpp.o
-
-src/reflection.i: src/reflection.cpp.i
-
-.PHONY : src/reflection.i
-
-# target to preprocess a source file
-src/reflection.cpp.i:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/reflection.cpp.i
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/reflection.cpp.i
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/reflection.cpp.i
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/reflection.cpp.i
-.PHONY : src/reflection.cpp.i
-
-src/reflection.s: src/reflection.cpp.s
-
-.PHONY : src/reflection.s
-
-# target to generate assembly for a file
-src/reflection.cpp.s:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/reflection.cpp.s
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/reflection.cpp.s
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/reflection.cpp.s
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/reflection.cpp.s
-.PHONY : src/reflection.cpp.s
-
-src/util.o: src/util.cpp.o
-
-.PHONY : src/util.o
-
-# target to build an object file
-src/util.cpp.o:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/util.cpp.o
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/util.cpp.o
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/util.cpp.o
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/util.cpp.o
-.PHONY : src/util.cpp.o
-
-src/util.i: src/util.cpp.i
-
-.PHONY : src/util.i
-
-# target to preprocess a source file
-src/util.cpp.i:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/util.cpp.i
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/util.cpp.i
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/util.cpp.i
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/util.cpp.i
-.PHONY : src/util.cpp.i
-
-src/util.s: src/util.cpp.s
-
-.PHONY : src/util.s
-
-# target to generate assembly for a file
-src/util.cpp.s:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/src/util.cpp.s
-	$(MAKE) -f CMakeFiles/flatc.dir/build.make CMakeFiles/flatc.dir/src/util.cpp.s
-	$(MAKE) -f CMakeFiles/flatbuffers.dir/build.make CMakeFiles/flatbuffers.dir/src/util.cpp.s
-	$(MAKE) -f CMakeFiles/flatsampletext.dir/build.make CMakeFiles/flatsampletext.dir/src/util.cpp.s
-.PHONY : src/util.cpp.s
-
-tests/test.o: tests/test.cpp.o
-
-.PHONY : tests/test.o
-
-# target to build an object file
-tests/test.cpp.o:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/tests/test.cpp.o
-.PHONY : tests/test.cpp.o
-
-tests/test.i: tests/test.cpp.i
-
-.PHONY : tests/test.i
-
-# target to preprocess a source file
-tests/test.cpp.i:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/tests/test.cpp.i
-.PHONY : tests/test.cpp.i
-
-tests/test.s: tests/test.cpp.s
-
-.PHONY : tests/test.s
-
-# target to generate assembly for a file
-tests/test.cpp.s:
-	$(MAKE) -f CMakeFiles/flattests.dir/build.make CMakeFiles/flattests.dir/tests/test.cpp.s
-.PHONY : tests/test.cpp.s
-
-# Help Target
-help:
-	@echo "The following are some of the valid targets for this Makefile:"
-	@echo "... all (the default if no target is provided)"
-	@echo "... clean"
-	@echo "... depend"
-	@echo "... rebuild_cache"
-	@echo "... install"
-	@echo "... flattests"
-	@echo "... flatc"
-	@echo "... list_install_components"
-	@echo "... install/strip"
-	@echo "... install/local"
-	@echo "... flatbuffers"
-	@echo "... flatsamplebinary"
-	@echo "... flathash"
-	@echo "... flatsampletext"
-	@echo "... test"
-	@echo "... edit_cache"
-	@echo "... grpc/src/compiler/cpp_generator.o"
-	@echo "... grpc/src/compiler/cpp_generator.i"
-	@echo "... grpc/src/compiler/cpp_generator.s"
-	@echo "... grpc/src/compiler/go_generator.o"
-	@echo "... grpc/src/compiler/go_generator.i"
-	@echo "... grpc/src/compiler/go_generator.s"
-	@echo "... samples/sample_binary.o"
-	@echo "... samples/sample_binary.i"
-	@echo "... samples/sample_binary.s"
-	@echo "... samples/sample_text.o"
-	@echo "... samples/sample_text.i"
-	@echo "... samples/sample_text.s"
-	@echo "... src/code_generators.o"
-	@echo "... src/code_generators.i"
-	@echo "... src/code_generators.s"
-	@echo "... src/flatc.o"
-	@echo "... src/flatc.i"
-	@echo "... src/flatc.s"
-	@echo "... src/flatc_main.o"
-	@echo "... src/flatc_main.i"
-	@echo "... src/flatc_main.s"
-	@echo "... src/flathash.o"
-	@echo "... src/flathash.i"
-	@echo "... src/flathash.s"
-	@echo "... src/idl_gen_cpp.o"
-	@echo "... src/idl_gen_cpp.i"
-	@echo "... src/idl_gen_cpp.s"
-	@echo "... src/idl_gen_fbs.o"
-	@echo "... src/idl_gen_fbs.i"
-	@echo "... src/idl_gen_fbs.s"
-	@echo "... src/idl_gen_general.o"
-	@echo "... src/idl_gen_general.i"
-	@echo "... src/idl_gen_general.s"
-	@echo "... src/idl_gen_go.o"
-	@echo "... src/idl_gen_go.i"
-	@echo "... src/idl_gen_go.s"
-	@echo "... src/idl_gen_grpc.o"
-	@echo "... src/idl_gen_grpc.i"
-	@echo "... src/idl_gen_grpc.s"
-	@echo "... src/idl_gen_js.o"
-	@echo "... src/idl_gen_js.i"
-	@echo "... src/idl_gen_js.s"
-	@echo "... src/idl_gen_php.o"
-	@echo "... src/idl_gen_php.i"
-	@echo "... src/idl_gen_php.s"
-	@echo "... src/idl_gen_python.o"
-	@echo "... src/idl_gen_python.i"
-	@echo "... src/idl_gen_python.s"
-	@echo "... src/idl_gen_text.o"
-	@echo "... src/idl_gen_text.i"
-	@echo "... src/idl_gen_text.s"
-	@echo "... src/idl_parser.o"
-	@echo "... src/idl_parser.i"
-	@echo "... src/idl_parser.s"
-	@echo "... src/reflection.o"
-	@echo "... src/reflection.i"
-	@echo "... src/reflection.s"
-	@echo "... src/util.o"
-	@echo "... src/util.i"
-	@echo "... src/util.s"
-	@echo "... tests/test.o"
-	@echo "... tests/test.i"
-	@echo "... tests/test.s"
-.PHONY : help
-
-
-
-#=============================================================================
-# Special targets to cleanup operation of make.
-
-# Special rule to run CMake to check the build system integrity.
-# No rule that depends on this can have commands that come from listfiles
-# because they might be regenerated.
-cmake_check_build_system:
-	$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
-.PHONY : cmake_check_build_system
-
diff --git a/third_party/flatbuffers/android/.project b/third_party/flatbuffers/android/.project
deleted file mode 100755
index e7d5931..0000000
--- a/third_party/flatbuffers/android/.project
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (c) 2014 Google, Inc.
-
-     This software is provided 'as-is', without any express or implied
-     warranty.  In no event will the authors be held liable for any damages
-     arising from the use of this software.
-     Permission is granted to anyone to use this software for any purpose,
-     including commercial applications, and to alter it and redistribute it
-     freely, subject to the following restrictions:
-     1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-     2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-     3. This notice may not be removed or altered from any source distribution.
- -->
-<projectDescription>
-    <name>FlatBufferTest</name>
-</projectDescription>
diff --git a/third_party/flatbuffers/android/AndroidManifest.xml b/third_party/flatbuffers/android/AndroidManifest.xml
deleted file mode 100755
index a15f547..0000000
--- a/third_party/flatbuffers/android/AndroidManifest.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (c) 2013 Google, Inc.
-
-     This software is provided 'as-is', without any express or implied
-     warranty.  In no event will the authors be held liable for any damages
-     arising from the use of this software.
-     Permission is granted to anyone to use this software for any purpose,
-     including commercial applications, and to alter it and redistribute it
-     freely, subject to the following restrictions:
-     1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-     2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-     3. This notice may not be removed or altered from any source distribution.
- -->
-<!-- BEGIN_INCLUDE(manifest) -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.example.FlatBufferTest"
-        android:versionCode="1"
-        android:versionName="1.0">
-
-    <uses-feature android:glEsVersion="0x00020000"></uses-feature>
-    <!-- This is the platform API where NativeActivity was introduced. -->
-    <uses-sdk android:minSdkVersion="9" />
-
-    <!-- This .apk has no Java code itself, so set hasCode to false. -->
-    <application android:label="@string/app_name" android:hasCode="false">
-
-        <!-- Our activity is the built-in NativeActivity framework class.
-             This will take care of integrating with our NDK code. -->
-        <activity android:name="android.app.NativeActivity"
-                android:label="@string/app_name"
-                android:configChanges="orientation|keyboardHidden"
-                android:screenOrientation="landscape">
-            <!-- Tell NativeActivity the name of or .so -->
-            <meta-data android:name="android.app.lib_name"
-                    android:value="FlatBufferTest" />
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-    </application>
-
-</manifest>
-<!-- END_INCLUDE(manifest) -->
diff --git a/third_party/flatbuffers/android/build_apk.sh b/third_party/flatbuffers/android/build_apk.sh
deleted file mode 100755
index 1b9f4a4..0000000
--- a/third_party/flatbuffers/android/build_apk.sh
+++ /dev/null
@@ -1,511 +0,0 @@
-#!/bin/bash -eu
-#
-# Copyright (c) 2013 Google, Inc.
-#
-# This software is provided 'as-is', without any express or implied
-# warranty.  In no event will the authors be held liable for any damages
-# arising from the use of this software.
-# Permission is granted to anyone to use this software for any purpose,
-# including commercial applications, and to alter it and redistribute it
-# freely, subject to the following restrictions:
-# 1. The origin of this software must not be misrepresented; you must not
-# claim that you wrote the original software. If you use this software
-# in a product, an acknowledgment in the product documentation would be
-# appreciated but is not required.
-# 2. Altered source versions must be plainly marked as such, and must not be
-# misrepresented as being the original software.
-# 3. This notice may not be removed or altered from any source distribution.
-#
-# Build, deploy, debug / execute a native Android package based upon
-# NativeActivity.
-
-declare -r script_directory=$(dirname $0)
-declare -r android_root=${script_directory}/../../../../../../
-declare -r script_name=$(basename $0)
-declare -r android_manifest=AndroidManifest.xml
-declare -r os_name=$(uname -s)
-
-# Minimum Android target version supported by this project.
-: ${BUILDAPK_ANDROID_TARGET_MINVERSION:=10}
-# Directory containing the Android SDK
-# (http://developer.android.com/sdk/index.html).
-: ${ANDROID_SDK_HOME:=}
-# Directory containing the Android NDK
-# (http://developer.android.com/tools/sdk/ndk/index.html).
-: ${NDK_HOME:=}
-
-# Display script help and exit.
-usage() {
-  echo "
-Build the Android package in the current directory and deploy it to a
-connected device.
-
-Usage: ${script_name} \\
-         [ADB_DEVICE=serial_number] [BUILD=0] [DEPLOY=0] [RUN_DEBUGGER=1] \
-         [LAUNCH=0] [SWIG_BIN=swig_binary_directory] [SWIG_LIB=swig_include_directory] [ndk-build arguments ...]
-
-ADB_DEVICE=serial_number:
-  serial_number specifies the device to deploy the built apk to if multiple
-  Android devices are connected to the host.
-BUILD=0:
-  Disables the build of the package.
-DEPLOY=0:
-  Disables the deployment of the built apk to the Android device.
-RUN_DEBUGGER=1:
-  Launches the application in gdb after it has been deployed.  To debug in
-  gdb, NDK_DEBUG=1 must also be specified on the command line to build a
-  debug apk.
-LAUNCH=0:
-  Disable the launch of the apk on the Android device.
-SWIG_BIN=swig_binary_directory:
-  The directory where the SWIG binary lives. No need to set this if SWIG is
-  installed and point to from your PATH variable.
-SWIG_LIB=swig_include_directory:
-  The directory where SWIG shared include files are, usually obtainable from
-  commandline with \"swig -swiglib\". No need to set this if SWIG is installed
-  and point to from your PATH variable.
-ndk-build arguments...:
-  Additional arguments for ndk-build.  See ndk-build -h for more information.
-" >&2
-  exit 1
-}
-
-# Get the number of CPU cores present on the host.
-get_number_of_cores() {
-  case ${os_name} in
-    Darwin)
-      sysctl hw.ncpu | awk '{ print $2 }'
-      ;;
-    CYGWIN*|Linux)
-      awk '/^processor/ { n=$3 } END { print n + 1 }' /proc/cpuinfo
-      ;;
-    *)
-      echo 1
-      ;;
-  esac
-}
-
-# Get the package name from an AndroidManifest.xml file.
-get_package_name_from_manifest() {
-  xmllint --xpath 'string(/manifest/@package)' "${1}"
-}
-
-# Get the library name from an AndroidManifest.xml file.
-get_library_name_from_manifest() {
-  echo "\
-setns android=http://schemas.android.com/apk/res/android
-xpath string(/manifest/application/activity\
-[@android:name=\"android.app.NativeActivity\"]/meta-data\
-[@android:name=\"android.app.lib_name\"]/@android:value)" |
-  xmllint --shell "${1}" | awk '/Object is a string/ { print $NF }'
-}
-
-# Get the number of Android devices connected to the system.
-get_number_of_devices_connected() {
-  adb devices -l | \
-    awk '/^..*$/ { if (p) { print $0 } }
-         /List of devices attached/ { p = 1 }' | \
-    wc -l
-  return ${PIPESTATUS[0]}
-}
-
-# Kill a process and its' children.  This is provided for cygwin which
-# doesn't ship with pkill.
-kill_process_group() {
-  local parent_pid="${1}"
-  local child_pid=
-  for child_pid in $(ps -f | \
-                     awk '{ if ($3 == '"${parent_pid}"') { print $2 } }'); do
-    kill_process_group "${child_pid}"
-  done
-  kill "${parent_pid}" 2>/dev/null
-}
-
-# Find and run "adb".
-adb() {
-  local adb_path=
-  for path in "$(which adb 2>/dev/null)" \
-              "${ANDROID_SDK_HOME}/sdk/platform-tools/adb" \
-              "${android_root}/prebuilts/sdk/platform-tools/adb"; do
-    if [[ -e "${path}" ]]; then
-      adb_path="${path}"
-      break
-    fi
-  done
-  if [[ "${adb_path}" == "" ]]; then
-    echo -e "Unable to find adb." \
-           "\nAdd the Android ADT sdk/platform-tools directory to the" \
-           "PATH." >&2
-    exit 1
-  fi
-  "${adb_path}" "$@"
-}
-
-# Find and run "android".
-android() {
-  local android_executable=android
-  if echo "${os_name}" | grep -q CYGWIN; then
-    android_executable=android.bat
-  fi
-  local android_path=
-  for path in "$(which ${android_executable})" \
-              "${ANDROID_SDK_HOME}/sdk/tools/${android_executable}" \
-              "${android_root}/prebuilts/sdk/tools/${android_executable}"; do
-    if [[ -e "${path}" ]]; then
-      android_path="${path}"
-      break
-    fi
-  done
-  if [[ "${android_path}" == "" ]]; then
-    echo -e "Unable to find android tool." \
-           "\nAdd the Android ADT sdk/tools directory to the PATH." >&2
-    exit 1
-  fi
-  # Make sure ant is installed.
-  if [[ "$(which ant)" == "" ]]; then
-    echo -e "Unable to find ant." \
-            "\nPlease install ant and add to the PATH." >&2
-    exit 1
-  fi
-
-  "${android_path}" "$@"
-}
-
-# Find and run "ndk-build"
-ndkbuild() {
-  local ndkbuild_path=
-  for path in "$(which ndk-build 2>/dev/null)" \
-              "${NDK_HOME}/ndk-build" \
-              "${android_root}/prebuilts/ndk/current/ndk-build"; do
-    if [[ -e "${path}" ]]; then
-      ndkbuild_path="${path}"
-      break
-    fi
-  done
-  if [[ "${ndkbuild_path}" == "" ]]; then
-    echo -e "Unable to find ndk-build." \
-            "\nAdd the Android NDK directory to the PATH." >&2
-    exit 1
-  fi
-  "${ndkbuild_path}" "$@"
-}
-
-# Get file modification time of $1 in seconds since the epoch.
-stat_mtime() {
-  local filename="${1}"
-  case ${os_name} in
-    Darwin) stat -f%m "${filename}" 2>/dev/null || echo 0 ;;
-    *) stat -c%Y "${filename}" 2>/dev/null || echo 0 ;;
-  esac
-}
-
-# Build the native (C/C++) build targets in the current directory.
-build_native_targets() {
-  # Save the list of output modules in the install directory so that it's
-  # possible to restore their timestamps after the build is complete.  This
-  # works around a bug in ndk/build/core/setup-app.mk which results in the
-  # unconditional execution of the clean-installed-binaries rule.
-  restore_libraries="$(find libs -type f 2>/dev/null | \
-                       sed -E 's@^libs/(.*)@\1@')"
-
-  # Build native code.
-  ndkbuild -j$(get_number_of_cores) "$@"
-
-  # Restore installed libraries.
-  # Obviously this is a nasty hack (along with ${restore_libraries} above) as
-  # it assumes it knows where the NDK will be placing output files.
-  (
-    IFS=$'\n'
-    for libpath in ${restore_libraries}; do
-      source_library="obj/local/${libpath}"
-      target_library="libs/${libpath}"
-      if [[ -e "${source_library}" ]]; then
-        cp -a "${source_library}" "${target_library}"
-      fi
-    done
-  )
-}
-
-# Select the oldest installed android build target that is at least as new as
-# BUILDAPK_ANDROID_TARGET_MINVERSION.  If a suitable build target isn't found,
-# this function prints an error message and exits with an error.
-select_android_build_target() {
-  local -r android_targets_installed=$( \
-    android list targets | \
-    awk -F'"' '/^id:.*android/ { print $2 }')
-  local android_build_target=
-  for android_target in $(echo "${android_targets_installed}" | \
-                          awk -F- '{ print $2 }' | sort -n); do
-    local isNumber='^[0-9]+$'
-    # skip preview API releases e.g. 'android-L'
-    if [[ $android_target =~ $isNumber ]]; then
-      if [[ $((android_target)) -ge \
-          $((BUILDAPK_ANDROID_TARGET_MINVERSION)) ]]; then
-        android_build_target="android-${android_target}"
-        break
-      fi
-    # else
-      # The API version is a letter, so skip it.
-    fi
-  done
-  if [[ "${android_build_target}" == "" ]]; then
-    echo -e \
-      "Found installed Android targets:" \
-      "$(echo ${android_targets_installed} | sed 's/ /\n  /g;s/^/\n  /;')" \
-      "\nAndroid SDK platform" \
-      "android-$((BUILDAPK_ANDROID_TARGET_MINVERSION))" \
-      "must be installed to build this project." \
-      "\nUse the \"android\" application to install API" \
-      "$((BUILDAPK_ANDROID_TARGET_MINVERSION)) or newer." >&2
-    exit 1
-  fi
-  echo "${android_build_target}"
-}
-
-# Sign unsigned apk $1 and write the result to $2 with key store file $3 and
-# password $4.
-# If a key store file $3 and password $4 aren't specified, a temporary
-# (60 day) key is generated and used to sign the package.
-sign_apk() {
-  local unsigned_apk="${1}"
-  local signed_apk="${2}"
-  if [[ $(stat_mtime "${unsigned_apk}") -gt \
-          $(stat_mtime "${signed_apk}") ]]; then
-    local -r key_alias=$(basename ${signed_apk} .apk)
-    local keystore="${3}"
-    local key_password="${4}"
-    [[ "${keystore}" == "" ]] && keystore="${unsigned_apk}.keystore"
-    [[ "${key_password}" == "" ]] && \
-      key_password="${key_alias}123456"
-    if [[ ! -e ${keystore} ]]; then
-      keytool -genkey -v -dname "cn=, ou=${key_alias}, o=fpl" \
-        -storepass ${key_password} \
-        -keypass ${key_password} -keystore ${keystore} \
-        -alias ${key_alias} -keyalg RSA -keysize 2048 -validity 60
-    fi
-    cp "${unsigned_apk}" "${signed_apk}"
-    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 \
-      -keystore ${keystore} -storepass ${key_password} \
-      -keypass ${key_password} "${signed_apk}" ${key_alias}
-  fi
-}
-
-# Build the apk $1 for package filename $2 in the current directory using the
-# ant build target $3.
-build_apk() {
-  local -r output_apk="${1}"
-  local -r package_filename="${2}"
-  local -r ant_target="${3}"
-  # Get the list of installed android targets and select the oldest target
-  # that is at least as new as BUILDAPK_ANDROID_TARGET_MINVERSION.
-  local -r android_build_target=$(select_android_build_target)
-  [[ "${android_build_target}" == "" ]] && exit 1
-  echo "Building ${output_apk} for target ${android_build_target}" >&2
-
-  # Create / update build.xml and local.properties files.
-  if [[ $(stat_mtime "${android_manifest}") -gt \
-          $(stat_mtime build.xml) ]]; then
-    android update project --target "${android_build_target}" \
-                           -n ${package_filename} --path .
-  fi
-
-  # Use ant to build the apk.
-  ant -quiet ${ant_target}
-
-  # Sign release apks with a temporary key as these packages will not be
-  # redistributed.
-  local unsigned_apk="bin/${package_filename}-${ant_target}-unsigned.apk"
-  if [[ "${ant_target}" == "release" ]]; then
-    sign_apk "${unsigned_apk}" "${output_apk}" "" ""
-  fi
-}
-
-# Uninstall package $1 and install apk $2 on device $3 where $3 is "-s device"
-# or an empty string.  If $3 is an empty string adb will fail when multiple
-# devices are connected to the host system.
-install_apk() {
-  local -r uninstall_package_name="${1}"
-  local -r install_apk="${2}"
-  local -r adb_device="${3}"
-  # Uninstall the package if it's already installed.
-  adb ${adb_device} uninstall "${uninstall_package_name}" 1>&2 > /dev/null || \
-    true # no error check
-
-  # Install the apk.
-  # NOTE: The following works around adb not returning an error code when
-  # it fails to install an apk.
-  echo "Install ${install_apk}" >&2
-  local -r adb_install_result=$(adb ${adb_device} install "${install_apk}")
-  echo "${adb_install_result}"
-  if echo "${adb_install_result}" | grep -qF 'Failure ['; then
-    exit 1
-  fi
-}
-
-# Launch previously installed package $1 on device $2.
-# If $2 is an empty string adb will fail when multiple devices are connected
-# to the host system.
-launch_package() {
-  (
-    # Determine the SDK version of Android on the device.
-    local -r android_sdk_version=$(
-      adb ${adb_device} shell cat system/build.prop | \
-      awk -F= '/ro.build.version.sdk/ {
-                 v=$2; sub(/[ \r\n]/, "", v); print v
-               }')
-
-    # Clear logs from previous runs.
-    # Note that logcat does not just 'tail' the logs, it dumps the entire log
-    # history.
-    adb ${adb_device} logcat -c
-
-    local finished_msg='Displayed '"${package_name}"
-    local timeout_msg='Activity destroy timeout.*'"${package_name}"
-    # Maximum time to wait before stopping log monitoring.  0 = infinity.
-    local launch_timeout=0
-    # If this is a Gingerbread device, kill log monitoring after 10 seconds.
-    if [[ $((android_sdk_version)) -le 10 ]]; then
-      launch_timeout=10
-    fi
-    # Display logcat in the background.
-    # Stop displaying the log when the app launch / execution completes or the
-    # logcat
-    (
-      adb ${adb_device} logcat | \
-        awk "
-          {
-            print \$0
-          }
-
-          /ActivityManager.*: ${finished_msg}/ {
-            exit 0
-          }
-
-          /ActivityManager.*: ${timeout_msg}/ {
-            exit 0
-          }" &
-      adb_logcat_pid=$!;
-      if [[ $((launch_timeout)) -gt 0 ]]; then
-        sleep $((launch_timeout));
-        kill ${adb_logcat_pid};
-      else
-        wait ${adb_logcat_pid};
-      fi
-    ) &
-    logcat_pid=$!
-    # Kill adb logcat if this shell exits.
-    trap "kill_process_group ${logcat_pid}" SIGINT SIGTERM EXIT
-
-    # If the SDK is newer than 10, "am" supports stopping an activity.
-    adb_stop_activity=
-    if [[ $((android_sdk_version)) -gt 10 ]]; then
-      adb_stop_activity=-S
-    fi
-
-    # Launch the activity and wait for it to complete.
-    adb ${adb_device} shell am start ${adb_stop_activity} -n \
-      ${package_name}/android.app.NativeActivity
-
-    wait "${logcat_pid}"
-  )
-}
-
-# See usage().
-main() {
-  # Parse arguments for this script.
-  local adb_device=
-  local ant_target=release
-  local disable_deploy=0
-  local disable_build=0
-  local run_debugger=0
-  local launch=1
-  local build_package=1
-  for opt; do
-    case ${opt} in
-      # NDK_DEBUG=0 tells ndk-build to build this as debuggable but to not
-      # modify the underlying code whereas NDK_DEBUG=1 also builds as debuggable
-      # but does modify the code
-      NDK_DEBUG=1) ant_target=debug ;;
-      NDK_DEBUG=0) ant_target=debug ;;
-      ADB_DEVICE*) adb_device="$(\
-        echo "${opt}" | sed -E 's/^ADB_DEVICE=([^ ]+)$/-s \1/;t;s/.*//')" ;;
-      BUILD=0) disable_build=1 ;;
-      DEPLOY=0) disable_deploy=1 ;;
-      RUN_DEBUGGER=1) run_debugger=1 ;;
-      LAUNCH=0) launch=0 ;;
-      clean) build_package=0 disable_deploy=1 launch=0 ;;
-      -h|--help|help) usage ;;
-    esac
-  done
-
-  # If a target device hasn't been specified and multiple devices are connected
-  # to the host machine, display an error.
-  local -r devices_connected=$(get_number_of_devices_connected)
-  if [[ "${adb_device}" == "" && $((devices_connected)) -gt 1 && \
-        ($((disable_deploy)) -eq 0 || $((launch)) -ne 0 || \
-         $((run_debugger)) -ne 0) ]]; then
-    if [[ $((disable_deploy)) -ne 0 ]]; then
-      echo "Deployment enabled, disable using DEPLOY=0" >&2
-    fi
-    if [[ $((launch)) -ne 0 ]]; then
-     echo "Launch enabled." >&2
-    fi
-    if [[ $((disable_deploy)) -eq 0 ]]; then
-      echo "Deployment enabled." >&2
-    fi
-    if [[ $((run_debugger)) -ne 0 ]]; then
-      echo "Debugger launch enabled." >&2
-    fi
-    echo "
-Multiple Android devices are connected to this host.  Either disable deployment
-and execution of the built .apk using:
-  \"${script_name} DEPLOY=0 LAUNCH=0\"
-
-or specify a device to deploy to using:
-  \"${script_name} ADB_DEVICE=\${device_serial}\".
-
-The Android devices connected to this machine are:
-$(adb devices -l)
-" >&2
-    exit 1
-  fi
-
-  if [[ $((disable_build)) -eq 0 ]]; then
-    # Build the native target.
-    build_native_targets "$@"
-  fi
-
-  # Get the package name from the manifest.
-  local -r package_name=$(get_package_name_from_manifest "${android_manifest}")
-  if [[ "${package_name}" == "" ]]; then
-    echo -e "No package name specified in ${android_manifest},"\
-            "skipping apk build, deploy"
-            "\nand launch steps." >&2
-    exit 0
-  fi
-  local -r package_basename=${package_name/*./}
-  local package_filename=$(get_library_name_from_manifest ${android_manifest})
-  [[ "${package_filename}" == "" ]] && package_filename="${package_basename}"
-
-  # Output apk name.
-  local -r output_apk="bin/${package_filename}-${ant_target}.apk"
-
-  if [[ $((disable_build)) -eq 0 && $((build_package)) -eq 1 ]]; then
-    # Build the apk.
-    build_apk "${output_apk}" "${package_filename}" "${ant_target}"
-  fi
-
-  # Deploy to the device.
-  if [[ $((disable_deploy)) -eq 0 ]]; then
-    install_apk "${package_name}" "${output_apk}" "${adb_device}"
-  fi
-
-  if [[ "${ant_target}" == "debug" && $((run_debugger)) -eq 1 ]]; then
-    # Start debugging.
-    ndk-gdb ${adb_device} --start
-  elif [[ $((launch)) -eq 1 ]]; then
-    launch_package "${package_name}" "${adb_device}"
-  fi
-}
-
-main "$@"
diff --git a/third_party/flatbuffers/android/jni/Android.mk b/third_party/flatbuffers/android/jni/Android.mk
deleted file mode 100755
index 0269dd3..0000000
--- a/third_party/flatbuffers/android/jni/Android.mk
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright (c) 2013 Google, Inc.
-#
-# This software is provided 'as-is', without any express or implied
-# warranty.  In no event will the authors be held liable for any damages
-# arising from the use of this software.
-# Permission is granted to anyone to use this software for any purpose,
-# including commercial applications, and to alter it and redistribute it
-# freely, subject to the following restrictions:
-# 1. The origin of this software must not be misrepresented; you must not
-# claim that you wrote the original software. If you use this software
-# in a product, an acknowledgment in the product documentation would be
-# appreciated but is not required.
-# 2. Altered source versions must be plainly marked as such, and must not be
-# misrepresented as being the original software.
-# 3. This notice may not be removed or altered from any source distribution.
-
-LOCAL_PATH := $(call my-dir)/../..
-
-include $(LOCAL_PATH)/android/jni/include.mk
-LOCAL_PATH := $(call realpath-portable,$(LOCAL_PATH))
-
-# Empty static library so that other projects can include just the basic
-# FlatBuffers headers as a module.
-include $(CLEAR_VARS)
-LOCAL_MODULE := flatbuffers
-LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
-LOCAL_EXPORT_CPPFLAGS := -std=c++11 -fexceptions -Wall \
-    -DFLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE
-
-include $(BUILD_STATIC_LIBRARY)
-
-# static library that additionally includes text parsing/generation/reflection
-# for projects that want richer functionality.
-include $(CLEAR_VARS)
-LOCAL_MODULE := flatbuffers_extra
-LOCAL_SRC_FILES := src/idl_parser.cpp \
-                   src/idl_gen_text.cpp \
-                   src/reflection.cpp \
-                   src/util.cpp \
-                   src/code_generators.cpp
-LOCAL_STATIC_LIBRARIES := flatbuffers
-include $(BUILD_STATIC_LIBRARY)
-
-# FlatBuffers test
-include $(CLEAR_VARS)
-LOCAL_MODULE := FlatBufferTest
-LOCAL_SRC_FILES := android/jni/main.cpp \
-                   tests/test.cpp \
-                   src/idl_gen_fbs.cpp \
-                   src/idl_gen_general.cpp
-LOCAL_LDLIBS := -llog -landroid
-LOCAL_STATIC_LIBRARIES := android_native_app_glue flatbuffers_extra
-LOCAL_ARM_MODE := arm
-include $(BUILD_SHARED_LIBRARY)
-
-$(call import-module,android/native_app_glue)
-
-$(call import-add-path,$(LOCAL_PATH)/../..)
diff --git a/third_party/flatbuffers/android/jni/Application.mk b/third_party/flatbuffers/android/jni/Application.mk
deleted file mode 100755
index 2fc9c73..0000000
--- a/third_party/flatbuffers/android/jni/Application.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2014 Google, Inc.
-#
-# This software is provided 'as-is', without any express or implied
-# warranty.  In no event will the authors be held liable for any damages
-# arising from the use of this software.
-# Permission is granted to anyone to use this software for any purpose,
-# including commercial applications, and to alter it and redistribute it
-# freely, subject to the following restrictions:
-# 1. The origin of this software must not be misrepresented; you must not
-# claim that you wrote the original software. If you use this software
-# in a product, an acknowledgment in the product documentation would be
-# appreciated but is not required.
-# 2. Altered source versions must be plainly marked as such, and must not be
-# misrepresented as being the original software.
-# 3. This notice may not be removed or altered from any source distribution.
-APP_PLATFORM := android-10
-APP_PROJECT_PATH := $(call my-dir)/..
-APP_STL := gnustl_static
-
-APP_ABI := armeabi-v7a
-
-APP_CPPFLAGS += -std=c++11
diff --git a/third_party/flatbuffers/android/jni/build_flatc.bat b/third_party/flatbuffers/android/jni/build_flatc.bat
deleted file mode 100755
index 0b3f2ad..0000000
--- a/third_party/flatbuffers/android/jni/build_flatc.bat
+++ /dev/null
@@ -1,68 +0,0 @@
-@rem Copyright (c) 2013 Google, Inc.
-@rem
-@rem This software is provided 'as-is', without any express or implied
-@rem warranty.  In no event will the authors be held liable for any damages
-@rem arising from the use of this software.
-@rem Permission is granted to anyone to use this software for any purpose,
-@rem including commercial applications, and to alter it and redistribute it
-@rem freely, subject to the following restrictions:
-@rem 1. The origin of this software must not be misrepresented; you must not
-@rem claim that you wrote the original software. If you use this software
-@rem in a product, an acknowledgment in the product documentation would be
-@rem appreciated but is not required.
-@rem 2. Altered source versions must be plainly marked as such, and must not be
-@rem misrepresented as being the original software.
-@rem 3. This notice may not be removed or altered from any source distribution.
-@echo off
-
-setlocal enabledelayedexpansion
-
-set thispath=%~dp0
-
-rem Path to cmake passed in by caller.
-set cmake=%1
-rem Path to cmake project to build.
-set cmake_project_path=%2
-
-rem Newest and oldest version of Visual Studio that it's possible to select.
-set visual_studio_version_max=20
-set visual_studio_version_min=8
-
-rem Determine the newest version of Visual Studio installed on this machine.
-set visual_studio_version=
-for /L %%a in (%visual_studio_version_max%,-1,%visual_studio_version_min%) do (
-  echo Searching for Visual Studio %%a >&2
-  reg query HKLM\SOFTWARE\Microsoft\VisualStudio\%%a.0 /ve 1>NUL 2>NUL
-  if !ERRORLEVEL! EQU 0 (
-    set visual_studio_version=%%a
-    goto found_vs
-  )
-)
-echo Unable to determine whether Visual Studio is installed. >&2
-exit /B 1
-:found_vs
-
-rem Map Visual Studio version to cmake generator name.
-if "%visual_studio_version%"=="8" (
-  set cmake_generator=Visual Studio 8 2005
-)
-if "%visual_studio_version%"=="9" (
-  set cmake_generator=Visual Studio 9 2008
-)
-if %visual_studio_version% GEQ 10 (
-  set cmake_generator=Visual Studio %visual_studio_version%
-)
-rem Set visual studio version variable for msbuild.
-set VisualStudioVersion=%visual_studio_version%.0
-
-rem Generate Visual Studio solution.
-echo Generating solution for %cmake_generator%. >&2
-cd "%cmake_project_path%"
-%cmake% -G"%cmake_generator%"
-if %ERRORLEVEL% NEQ 0 (
-  exit /B %ERRORLEVEL%
-)
-
-rem Build flatc
-python %thispath%\msbuild.py flatc.vcxproj
-if ERRORLEVEL 1 exit /B 1
diff --git a/third_party/flatbuffers/android/jni/include.mk b/third_party/flatbuffers/android/jni/include.mk
deleted file mode 100644
index b53e257..0000000
--- a/third_party/flatbuffers/android/jni/include.mk
+++ /dev/null
@@ -1,237 +0,0 @@
-# Copyright 2014 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# This file contains utility functions for Android projects using Flatbuffers.
-# To use this file, include it in your project's Android.mk by calling near the
-# top of your android makefile like so:
-#
-#     include $(FLATBUFFERS_DIR)/android/jni/include.mk
-#
-# You will also need to import the flatbuffers module using the standard
-# import-module function.
-#
-# The main functionality this file provides are the following functions:
-# flatbuffers_fbs_to_h: Converts flatbuffer schema paths to header paths.
-# flatbuffers_header_build_rule:
-#     Creates a build rule for a schema's generated header. This build rule
-#     has a dependency on the flatc compiler which will be built if necessary.
-# flatbuffers_header_build_rules:
-#     Creates build rules for generated headers for each schema listed and sets
-#     up depenedendies.
-#
-# More information and example usage can be found in the comments preceeding
-# each function.
-
-# Targets to build the Flatbuffers compiler as well as some utility definitions
-ifeq (,$(FLATBUFFERS_INCLUDE_MK_))
-FLATBUFFERS_INCLUDE_MK_ := 1
-
-# Portable version of $(realpath) that omits drive letters on Windows.
-realpath-portable = $(join $(filter %:,$(subst :,: ,$1)),\
-                      $(realpath $(filter-out %:,$(subst :,: ,$1))))
-
-PROJECT_OS := $(OS)
-ifeq (,$(OS))
-PROJECT_OS := $(shell uname -s)
-else
-ifneq ($(findstring Windows,$(PROJECT_OS)),)
-PROJECT_OS := Windows
-endif
-endif
-
-# The following block generates build rules which result in headers being
-# rebuilt from flatbuffers schemas.
-
-FLATBUFFERS_CMAKELISTS_DIR := \
-  $(call realpath-portable,$(dir $(lastword $(MAKEFILE_LIST)))/../..)
-
-# Directory that contains the FlatBuffers compiler.
-ifeq (Windows,$(PROJECT_OS))
-FLATBUFFERS_FLATC_PATH?=$(FLATBUFFERS_CMAKELISTS_DIR)
-FLATBUFFERS_FLATC := $(lastword \
-                       $(wildcard $(FLATBUFFERS_FLATC_PATH)/*/flatc.exe) \
-                       $(wildcard $(FLATBUFFERS_FLATC_PATH)/flatc.exe))
-endif
-ifeq (Linux,$(PROJECT_OS))
-FLATBUFFERS_FLATC_PATH?=$(FLATBUFFERS_CMAKELISTS_DIR)
-FLATBUFFERS_FLATC := $(FLATBUFFERS_FLATC_PATH)/flatc
-endif
-ifeq (Darwin,$(PROJECT_OS))
-FLATBUFFERS_FLATC_PATH?=$(FLATBUFFERS_CMAKELISTS_DIR)
-FLATBUFFERS_FLATC := $(lastword \
-                       $(wildcard $(FLATBUFFERS_FLATC_PATH)/*/flatc) \
-                       $(wildcard $(FLATBUFFERS_FLATC_PATH)/flatc))
-endif
-
-FLATBUFFERS_FLATC_ARGS?=
-
-# Search for cmake.
-CMAKE_ROOT := \
-  $(call realpath-portable,$(LOCAL_PATH)/../../../../../../prebuilts/cmake)
-ifeq (,$(CMAKE))
-ifeq (Linux,$(PROJECT_OS))
-CMAKE := $(wildcard $(CMAKE_ROOT)/linux-x86/current/bin/cmake*)
-endif
-ifeq (Darwin,$(PROJECT_OS))
-CMAKE := \
-  $(wildcard $(CMAKE_ROOT)/darwin-x86_64/current/*.app/Contents/bin/cmake)
-endif
-ifeq (Windows,$(PROJECT_OS))
-CMAKE := $(wildcard $(CMAKE_ROOT)/windows/current/bin/cmake*)
-endif
-endif
-ifeq (,$(CMAKE))
-CMAKE := cmake
-endif
-
-# Windows friendly portable local path.
-# GNU-make doesn't like : in paths, must use relative paths on Windows.
-ifeq (Windows,$(PROJECT_OS))
-PORTABLE_LOCAL_PATH =
-else
-PORTABLE_LOCAL_PATH = $(LOCAL_PATH)/
-endif
-
-# Generate a host build rule for the flatbuffers compiler.
-ifeq (Windows,$(PROJECT_OS))
-define build_flatc_recipe
-	$(FLATBUFFERS_CMAKELISTS_DIR)\android\jni\build_flatc.bat \
-        $(CMAKE) $(FLATBUFFERS_CMAKELISTS_DIR)
-endef
-endif
-ifeq (Linux,$(PROJECT_OS))
-define build_flatc_recipe
-	+cd $(FLATBUFFERS_CMAKELISTS_DIR) && \
-      $(CMAKE) . && \
-      $(MAKE) flatc
-endef
-endif
-ifeq (Darwin,$(PROJECT_OS))
-define build_flatc_recipe
-	cd $(FLATBUFFERS_CMAKELISTS_DIR) && "$(CMAKE)" -GXcode . && \
-        xcodebuild -target flatc
-endef
-endif
-ifeq (,$(build_flatc_recipe))
-ifeq (,$(FLATBUFFERS_FLATC))
-$(error flatc binary not found!)
-endif
-endif
-
-# Generate a build rule for flatc.
-ifeq ($(strip $(FLATBUFFERS_FLATC)),)
-flatc_target := build_flatc
-.PHONY: $(flatc_target)
-FLATBUFFERS_FLATC := \
-  python $(FLATBUFFERS_CMAKELISTS_DIR)/android/jni/run_flatc.py \
-    $(FLATBUFFERS_CMAKELISTS_DIR)
-else
-flatc_target := $(FLATBUFFERS_FLATC)
-endif
-$(flatc_target):
-	$(call build_flatc_recipe)
-
-# $(flatbuffers_fbs_to_h schema_dir,output_dir,path)
-#
-# Convert the specified schema path to a Flatbuffers generated header path.
-# For example:
-#
-# $(call flatbuffers_fbs_to_h,$(MY_PROJ_DIR)/schemas,\
-#   $(MY_PROJ_DIR)/gen/include,$(MY_PROJ_DIR)/schemas/example.fbs)
-#
-# This will convert the file path `$(MY_PROJ_DIR)/schemas/example.fbs)` to
-# `$(MY_PROJ_DIR)/gen/include/example_generated.h`
-define flatbuffers_fbs_to_h
-$(subst $(1),$(2),$(patsubst %.fbs,%_generated.h,$(3)))
-endef
-
-# $(flatbuffers_header_build_rule schema_file,schema_dir,output_dir,\
-#   schema_include_dirs)
-#
-# Generate a build rule that will convert a Flatbuffers schema to a generated
-# header derived from the schema filename using flatbuffers_fbs_to_h. For
-# example:
-#
-# $(call flatbuffers_header_build_rule,$(MY_PROJ_DIR)/schemas/example.fbs,\
-#   $(MY_PROJ_DIR)/schemas,$(MY_PROJ_DIR)/gen/include)
-#
-# The final argument, schema_include_dirs, is optional and is only needed when
-# the schema files depend on other schema files outside their own directory.
-define flatbuffers_header_build_rule
-$(eval \
-  $(call flatbuffers_fbs_to_h,$(2),$(3),$(1)): $(1) $(flatc_target)
-	$(call host-echo-build-step,generic,Generate) \
-      $(subst $(LOCAL_PATH)/,,$(call flatbuffers_fbs_to_h,$(2),$(3),$(1)))
-	$(hide) $$(FLATBUFFERS_FLATC) $(FLATBUFFERS_FLATC_ARGS) \
-      $(foreach include,$(4),-I $(include)) -o $$(dir $$@) -c $$<)
-endef
-
-# TODO: Remove when the LOCAL_PATH expansion bug in the NDK is fixed.
-# Override the default behavior of local-source-file-path to workaround
-# a bug which prevents the build of deeply nested projects when NDK_OUT is
-# set.
-local-source-file-path=\
-$(if $(call host-path-is-absolute,$1),$1,$(call \
-    realpath-portable,$(LOCAL_PATH)/$1))
-
-
-# $(flatbuffers_header_build_rules schema_files,schema_dir,output_dir,\
-#   schema_include_dirs,src_files,[build_target],[dependencies]))
-#
-# $(1) schema_files: Space separated list of flatbuffer schema files.
-# $(2) schema_dir: Directory containing the flatbuffer schemas.
-# $(3) output_dir: Where to place the generated files.
-# $(4) schema_include_dirs: Directories to include when generating schemas.
-# $(5) src_files: Files that should depend upon the headers generated from the
-#   flatbuffer schemas.
-# $(6) build_target: Name of a build target that depends upon all generated
-#   headers.
-# $(7) dependencies: Space seperated list of additional build targets src_files
-#   should depend upon.
-#
-# Use this in your own Android.mk file to generate build rules that will
-# generate header files for your flatbuffer schemas as well as automatically
-# set your source files to be dependent on the generated headers. For example:
-#
-# $(call flatbuffers_header_build_rules,$(MY_PROJ_SCHEMA_FILES),\
-#   $(MY_PROJ_SCHEMA_DIR),$(MY_PROJ_GENERATED_OUTPUT_DIR),
-#   $(MY_PROJ_SCHEMA_INCLUDE_DIRS),$(LOCAL_SRC_FILES))
-#
-# NOTE: Due problesm with path processing in ndk-build when presented with
-# deeply nested projects must redefine LOCAL_PATH after include this makefile
-# using:
-#
-# LOCAL_PATH := $(call realpath-portable,$(LOCAL_PATH))
-#
-define flatbuffers_header_build_rules
-$(foreach schema,$(1),\
-  $(call flatbuffers_header_build_rule,\
-    $(schema),$(strip $(2)),$(strip $(3)),$(strip $(4))))\
-$(foreach src,$(strip $(5)),\
-  $(eval $(call local-source-file-path,$(src)): \
-    $(foreach schema,$(strip $(1)),\
-      $(call flatbuffers_fbs_to_h,$(strip $(2)),$(strip $(3)),$(schema)))))\
-$(if $(6),\
-  $(foreach schema,$(strip $(1)),\
-    $(eval $(6): \
-      $(call flatbuffers_fbs_to_h,$(strip $(2)),$(strip $(3)),$(schema)))),)\
-$(if $(7),\
-  $(foreach src,$(strip $(5)),\
-      $(eval $(call local-source-file-path,$(src)): $(strip $(7)))),)\
-$(if $(7),\
-  $(foreach dependency,$(strip $(7)),\
-      $(eval $(6): $(dependency))),)
-endef
-
-endif  # FLATBUFFERS_INCLUDE_MK_
diff --git a/third_party/flatbuffers/android/jni/main.cpp b/third_party/flatbuffers/android/jni/main.cpp
deleted file mode 100644
index 0d64349..0000000
--- a/third_party/flatbuffers/android/jni/main.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <android_native_app_glue.h>
-
-extern int main(int argc, char **argv);
-
-void android_main(android_app *app) {
-  // Make sure glue isn't stripped.
-  app_dummy();
-
-  main(0, NULL);
-}
diff --git a/third_party/flatbuffers/android/jni/msbuild.py b/third_party/flatbuffers/android/jni/msbuild.py
deleted file mode 100644
index 5f92d70..0000000
--- a/third_party/flatbuffers/android/jni/msbuild.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/python
-# Copyright 2014 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Simple script that locates the newest MSBuild in one of several locations.
-
-This script will find the highest version number of MSBuild and run it,
-passing its arguments through to MSBuild.
-"""
-
-import glob
-import os
-import re
-import string
-import subprocess
-import sys
-
-SYSTEMROOT = os.getenv("SYSTEMROOT", "c:\\windows")
-PROGRAM_FILES = os.getenv("ProgramFiles", "c:\\Program Files")
-PROGRAM_FILES_X86 = os.getenv("ProgramFiles(x86)", "c:\\Program Files (x86)")
-
-SEARCH_FOLDERS = [ PROGRAM_FILES + "\\MSBuild\\*\\Bin\\MSBuild.exe",
-                   PROGRAM_FILES_X86 + "\\MSBuild\\*\\Bin\\MSBuild.exe",
-                   SYSTEMROOT + "\\Microsoft.NET\Framework\\*\\MSBuild.exe" ]
-
-def compare_version(a, b):
-  """Compare two version number strings of the form W.X.Y.Z.
-
-  The numbers are compared most-significant to least-significant.
-  For example, 12.345.67.89 > 2.987.88.99.
-
-  Args:
-    a: First version number string to compare
-    b: Second version number string to compare
-
-  Returns:
-    0 if the numbers are identical, a positive number if 'a' is larger, and
-    a negative number if 'b' is larger.
-  """
-  aa = string.split(a, ".")
-  bb = string.split(b, ".")
-  for i in range(0, 4):
-    if aa[i] != bb[i]:
-      return cmp(int(aa[i]), int(bb[i]))
-  return 0
-
-def main():
-  msbuilds = []
-
-  for folder in SEARCH_FOLDERS:
-    for file in glob.glob(folder):
-      p = subprocess.Popen([file, "/version"], stdout=subprocess.PIPE)
-      out, err = p.communicate()
-      match = re.search("^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+$", out, re.M)
-      if match:
-        msbuilds.append({ 'ver':match.group(), 'exe':file })
-  msbuilds.sort(lambda x, y: compare_version(x['ver'], y['ver']), reverse=True)
-  if len(msbuilds) == 0:
-    print "Unable to find MSBuild.\n"
-    return -1;
-  cmd = [msbuilds[0]['exe']]
-  cmd.extend(sys.argv[1:])
-  return subprocess.call(cmd)
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/third_party/flatbuffers/android/jni/run_flatc.py b/third_party/flatbuffers/android/jni/run_flatc.py
deleted file mode 100755
index cda13bb..0000000
--- a/third_party/flatbuffers/android/jni/run_flatc.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/python
-# Copyright 2015 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import os
-import platform
-import subprocess
-import sys
-
-EXECUTABLE_EXTENSION = '.exe' if platform.system() == 'Windows' else ''
-# Paths to search for flatc relative to the current working directory.
-FLATC_SEARCH_PATHS = [os.path.curdir, 'Release', 'Debug']
-
-def main():
-  """Script that finds and runs flatc built from source."""
-  if len(sys.argv) < 2:
-    sys.stderr.write('Usage: run_flatc.py flatbuffers_dir [flatc_args]\n')
-    return 1
-  cwd = os.getcwd()
-  flatc = ''
-  flatbuffers_dir = sys.argv[1]
-  for path in FLATC_SEARCH_PATHS:
-    current = os.path.join(flatbuffers_dir, path,
-                           'flatc' + EXECUTABLE_EXTENSION)
-    if os.path.exists(current):
-      flatc = current
-      break
-  if not flatc:
-    sys.stderr.write('flatc not found\n')
-    return 1
-  command = [flatc] + sys.argv[2:]
-  return subprocess.call(command)
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/third_party/flatbuffers/android/res/values/strings.xml b/third_party/flatbuffers/android/res/values/strings.xml
deleted file mode 100755
index ec75239..0000000
--- a/third_party/flatbuffers/android/res/values/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (c) 2014 Google, Inc.
-
-     This software is provided 'as-is', without any express or implied
-     warranty.  In no event will the authors be held liable for any damages
-     arising from the use of this software.
-     Permission is granted to anyone to use this software for any purpose,
-     including commercial applications, and to alter it and redistribute it
-     freely, subject to the following restrictions:
-     1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-     2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-     3. This notice may not be removed or altered from any source distribution.
- -->
-<resources>
-    <string name="app_name">FlatBufferTest</string>
-</resources>
diff --git a/third_party/flatbuffers/appveyor.yml b/third_party/flatbuffers/appveyor.yml
deleted file mode 100644
index f350f06..0000000
--- a/third_party/flatbuffers/appveyor.yml
+++ /dev/null
@@ -1,46 +0,0 @@
-branches:
-  only:
-    - master
-
-os: Visual Studio 2015
-
-platform:
-  - x86
-  - x64
-
-configuration:
-  - Debug
-  - Release
-
-before_build:
-  - cmake -G"Visual Studio 10 2010"
-  # This cuts down on a lot of noise generated by xamarin warnings.
-  - del "C:\Program Files (x86)\MSBuild\14.0\Microsoft.Common.targets\ImportAfter\Xamarin.Common.targets"
-
-build:
-  project: ALL_BUILD.vcxproj
-  verbosity: minimal
-
-test_script:
-  - rem "---------------- C++ -----------------"
-  - "%CONFIGURATION%\\flattests.exe"
-  - rem "---------------- Java -----------------"
-  - "cd tests"
-  - "java -version"
-  - "JavaTest.bat"
-  - rem "---------------- JS -----------------"
-  - "node --version"
-  - "..\\%CONFIGURATION%\\flatc -b monster_test.fbs unicode_test.json"
-  - "node JavaScriptTest ./monster_test_generated"
-  - rem "---------------- C# -----------------"
-  # Have to compile this here rather than in "build" above because AppVeyor only
-  # supports building one project??
-  - "cd FlatBuffers.Test"
-  - "msbuild.exe /property:Configuration=Release;OutputPath=tempcs /verbosity:minimal FlatBuffers.Test.csproj"
-  - "tempcs\\FlatBuffers.Test.exe"
-  # TODO: add more languages.
-  - "cd ..\\.."
-
-artifacts:
-  - path: $(CONFIGURATION)\\flatc.exe
-    name: flatc.exe
diff --git a/third_party/flatbuffers/biicode.conf b/third_party/flatbuffers/biicode.conf
deleted file mode 100644
index b205168..0000000
--- a/third_party/flatbuffers/biicode.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-# Biicode configuration file
-[paths]
-	include
-[mains]
-	!android/*
-[tests]
-	tests/*
diff --git a/third_party/flatbuffers/biicode/README.md b/third_party/flatbuffers/biicode/README.md
deleted file mode 100644
index 8b0a185..0000000
--- a/third_party/flatbuffers/biicode/README.md
+++ /dev/null
@@ -1,21 +0,0 @@
-Biicode C/C++ dependency manager
-=================================
-
-[![Build Status](https://webapi.biicode.com/v1/badges/fenix/fenix/flatbuffers/master)](https://www.biicode.com/fenix/flatbuffers)
-
-New with biicode? Check the [Getting Started Guide](http://docs.biicode.com/c++/gettingstarted.html).
-
-How to build it?
-------------------
-Building it is too easy:
-
-    $ git clone git@github.com:google/flatbuffers.git
-    $ cd flatbuffers
-    $ bii init -L && bii build
-    $ ./bin/any_executable
-
-Or run its tests:
-
-    $ bii test
-
-You can check [the examples/flatbuffers block](https://www.biicode.com/examples/flatbuffers).
\ No newline at end of file
diff --git a/third_party/flatbuffers/biicode/cmake/biicode.cmake b/third_party/flatbuffers/biicode/cmake/biicode.cmake
deleted file mode 100644
index 85b15ed..0000000
--- a/third_party/flatbuffers/biicode/cmake/biicode.cmake
+++ /dev/null
@@ -1,18 +0,0 @@
-set(BII_TESTS_WORKING_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-# Copying data files to project/bin folder
-if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/samples")
-  file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/samples/monster.fbs"
-            "${CMAKE_CURRENT_SOURCE_DIR}/samples/monsterdata.json"
-      DESTINATION
-            "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/samples")
-endif()
-if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/tests")
-  file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/tests"
-       DESTINATION
-            "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
-endif()
-
-ADD_BIICODE_TARGETS()
-
-string(REPLACE " " ";" REPLACED_FLAGS ${CMAKE_CXX_FLAGS})
-target_compile_options(${BII_BLOCK_TARGET} INTERFACE ${REPLACED_FLAGS})
\ No newline at end of file
diff --git a/third_party/flatbuffers/biicode/support/bii-travis.sh b/third_party/flatbuffers/biicode/support/bii-travis.sh
deleted file mode 100755
index 67854c7..0000000
--- a/third_party/flatbuffers/biicode/support/bii-travis.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2016 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-sudo apt-get update -qq
-sudo apt-get install libglu1-mesa-dev xorg-dev
-wget http://www.biicode.com/downloads/latest/ubuntu64
-mv ubuntu64 bii-ubuntu64.deb
-(sudo dpkg -i bii-ubuntu64.deb) && sudo apt-get -f install
-rm bii-ubuntu64.deb
-wget https://s3.amazonaws.com/biibinaries/thirdparty/cmake-3.0.2-Linux-64.tar.gz
-tar -xzf cmake-3.0.2-Linux-64.tar.gz
-sudo cp -fR cmake-3.0.2-Linux-64/* /usr
-rm -rf cmake-3.0.2-Linux-64
-rm cmake-3.0.2-Linux-64.tar.gz
-
-cmake --version
-bii init -l && bii configure -DCMAKE_BUILD_TYPE=$1 && bii test
\ No newline at end of file
diff --git a/third_party/flatbuffers/cmake_install.cmake b/third_party/flatbuffers/cmake_install.cmake
deleted file mode 100644
index 6feae12..0000000
--- a/third_party/flatbuffers/cmake_install.cmake
+++ /dev/null
@@ -1,68 +0,0 @@
-# Install script for directory: /home/alain/flatbuffers
-
-# Set the install prefix
-if(NOT DEFINED CMAKE_INSTALL_PREFIX)
-  set(CMAKE_INSTALL_PREFIX "/usr/local")
-endif()
-string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
-
-# Set the install configuration name.
-if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
-  if(BUILD_TYPE)
-    string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
-           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
-  else()
-    set(CMAKE_INSTALL_CONFIG_NAME "")
-  endif()
-  message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
-endif()
-
-# Set the component getting installed.
-if(NOT CMAKE_INSTALL_COMPONENT)
-  if(COMPONENT)
-    message(STATUS "Install component: \"${COMPONENT}\"")
-    set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
-  else()
-    set(CMAKE_INSTALL_COMPONENT)
-  endif()
-endif()
-
-# Install shared libraries without execute permission?
-if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
-  set(CMAKE_INSTALL_SO_NO_EXE "1")
-endif()
-
-if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified")
-  file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/include" TYPE DIRECTORY FILES "/home/alain/flatbuffers/include/flatbuffers")
-endif()
-
-if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified")
-  file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/home/alain/flatbuffers/libflatbuffers.a")
-endif()
-
-if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified")
-  if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/flatc" AND
-     NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/flatc")
-    file(RPATH_CHECK
-         FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/flatc"
-         RPATH "")
-  endif()
-  file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/alain/flatbuffers/flatc")
-  if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/flatc" AND
-     NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/flatc")
-    if(CMAKE_INSTALL_DO_STRIP)
-      execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/flatc")
-    endif()
-  endif()
-endif()
-
-if(CMAKE_INSTALL_COMPONENT)
-  set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt")
-else()
-  set(CMAKE_INSTALL_MANIFEST "install_manifest.txt")
-endif()
-
-string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT
-       "${CMAKE_INSTALL_MANIFEST_FILES}")
-file(WRITE "/home/alain/flatbuffers/${CMAKE_INSTALL_MANIFEST}"
-     "${CMAKE_INSTALL_MANIFEST_CONTENT}")
diff --git a/third_party/flatbuffers/composer.json b/third_party/flatbuffers/composer.json
deleted file mode 100644
index 807709c..0000000
--- a/third_party/flatbuffers/composer.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-  "name": "google/flatbuffers",
-  "type": "library",
-  "description": "FlatBuffers for PHP",
-  "keywords": ["google", "flatbuffers", "serialization"],
-  "homepage": "https://github.com/google/flatbuffers",
-  "license": "Apache-2.0",
-  "require": {
-    "php": ">=5.4"
-  },
-  "require-dev": {
-  },
-  "autoload": {
-    "psr-4": {
-      "Google\\FlatBuffers\\": "php"
-    }
-  }
-}
\ No newline at end of file
diff --git a/third_party/flatbuffers/docs/footer.html b/third_party/flatbuffers/docs/footer.html
deleted file mode 100755
index 42bc5f2..0000000
--- a/third_party/flatbuffers/docs/footer.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- Google Analytics -->
-<script>
-  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
-  ga('create', 'UA-49880327-7', 'auto');
-  ga('send', 'pageview');
-
-</script>
-
-</body>
-</html>
diff --git a/third_party/flatbuffers/docs/header.html b/third_party/flatbuffers/docs/header.html
deleted file mode 100644
index 0266e7c..0000000
--- a/third_party/flatbuffers/docs/header.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!-- HTML header for doxygen 1.8.6-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen $doxygenversion"/>
-<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
-<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
-<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="$relpath^jquery.js"></script>
-<script type="text/javascript" src="$relpath^dynsections.js"></script>
-$treeview
-$search
-$mathjax
-<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
-<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,700" rel="stylesheet">
-$extrastylesheet
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-
-<!--BEGIN TITLEAREA-->
-<div id="titlearea" style="height: 110px;">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <!--BEGIN PROJECT_LOGO-->
-  <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
-  <!--END PROJECT_LOGO-->
-  <td id="commonprojectlogo">
-    <img alt="Logo" src="$relpath^fpl_logo_small.png"/>
-  </td>
-  <!--BEGIN PROJECT_NAME-->
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">$projectname
-   <!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
-   </div>
-   <div style="font-size:12px;">
-    An open source project by <a href="https://developers.google.com/games/#Tools">FPL</a>.
-   </div>
-   <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
-  </td>
-  <!--END PROJECT_NAME-->
-  <!--BEGIN !PROJECT_NAME-->
-   <!--BEGIN PROJECT_BRIEF-->
-    <td style="padding-left: 0.5em;">
-    <div id="projectbrief">$projectbrief</div>
-    </td>
-   <!--END PROJECT_BRIEF-->
-  <!--END !PROJECT_NAME-->
-  <!--BEGIN DISABLE_INDEX-->
-   <!--BEGIN SEARCHENGINE-->
-   <td>$searchbox</td>
-   <!--END SEARCHENGINE-->
-  <!--END DISABLE_INDEX-->
- </tr>
- </tbody>
-</table>
-</div>
-<!--END TITLEAREA-->
-<!-- end header part -->
diff --git a/third_party/flatbuffers/docs/images/fpl_logo_small.png b/third_party/flatbuffers/docs/images/fpl_logo_small.png
deleted file mode 100644
index 2c728f3..0000000
--- a/third_party/flatbuffers/docs/images/fpl_logo_small.png
+++ /dev/null
Binary files differ
diff --git a/third_party/flatbuffers/docs/images/ftv2mnode.png b/third_party/flatbuffers/docs/images/ftv2mnode.png
deleted file mode 100644
index 3caf47d..0000000
--- a/third_party/flatbuffers/docs/images/ftv2mnode.png
+++ /dev/null
Binary files differ
diff --git a/third_party/flatbuffers/docs/images/ftv2pnode.png b/third_party/flatbuffers/docs/images/ftv2pnode.png
deleted file mode 100644
index f1aaad3..0000000
--- a/third_party/flatbuffers/docs/images/ftv2pnode.png
+++ /dev/null
Binary files differ
diff --git a/third_party/flatbuffers/docs/source/Benchmarks.md b/third_party/flatbuffers/docs/source/Benchmarks.md
deleted file mode 100755
index e5e5847..0000000
--- a/third_party/flatbuffers/docs/source/Benchmarks.md
+++ /dev/null
@@ -1,63 +0,0 @@
-Benchmarks    {#flatbuffers_benchmarks}
-==========
-
-Comparing against other serialization solutions, running on Windows 7
-64bit. We use the LITE runtime for Protocol Buffers (less code / lower
-overhead), Rapid JSON (one of the fastest C++ JSON parsers around),
-and pugixml, also one of the fastest XML parsers.
-
-We also compare against code that doesn't use a serialization library
-at all (the column "Raw structs"), which is what you get if you write
-hardcoded code that just writes structs. This is the fastest possible,
-but of course is not cross platform nor has any kind of forwards /
-backwards compatibility.
-
-We compare against Flatbuffers with the binary wire format (as
-intended), and also with JSON as the wire format with the optional JSON
-parser (which, using a schema, parses JSON into a binary buffer that can
-then be accessed as before).
-
-The benchmark object is a set of about 10 objects containing an array, 4
-strings, and a large variety of int/float scalar values of all sizes,
-meant to be representative of game data, e.g. a scene format.
-
-|                                                        | FlatBuffers (binary)  | Protocol Buffers LITE | Rapid JSON            | FlatBuffers (JSON)     | pugixml               | Raw structs           |
-|--------------------------------------------------------|-----------------------|-----------------------|-----------------------|------------------------| ----------------------| ----------------------|
-| Decode + Traverse + Dealloc (1 million times, seconds) | 0.08                  | 302                   | 583                   | 105                    | 196                   | 0.02                  |
-| Decode / Traverse / Dealloc (breakdown)                | 0 / 0.08 / 0          | 220 / 0.15 / 81       | 294 / 0.9 / 287       | 70 / 0.08 / 35         | 41 / 3.9 / 150        | 0 / 0.02 / 0          |
-| Encode (1 million times, seconds)                      | 3.2                   | 185                   | 650                   | 169                    | 273                   | 0.15                  |
-| Wire format size (normal / zlib, bytes)                | 344 / 220             | 228 / 174             | 1475 / 322            | 1029 / 298             | 1137 / 341            | 312 / 187             |
-| Memory needed to store decoded wire (bytes / blocks)   | 0 / 0                 | 760 / 20              | 65689 / 4             | 328 / 1                | 34194 / 3             | 0 / 0                 |
-| Transient memory allocated during decode (KB)          | 0                     | 1                     | 131                   | 4                      | 34                    | 0                     |
-| Generated source code size (KB)                        | 4                     | 61                    | 0                     | 4                      | 0                     | 0                     |
-| Field access in handwritten traversal code             | typed accessors       | typed accessors       | manual error checking | typed accessors        | manual error checking | typed but no safety   |
-| Library source code (KB)                               | 15                    | some subset of 3800   | 87                    | 43                     | 327                   | 0                     |
-
-### Some other serialization systems we compared against but did not benchmark (yet), in rough order of applicability:
-
--   Cap'n'Proto promises to reduce Protocol Buffers much like FlatBuffers does,
-    though with a more complicated binary encoding and less flexibility (no
-    optional fields to allow deprecating fields or serializing with missing
-    fields for which defaults exist).
-    It currently also isn't fully cross-platform portable (lack of VS support).
--   msgpack: has very minimal forwards/backwards compatibility support when used
-    with the typed C++ interface. Also lacks VS2010 support.
--   Thrift: very similar to Protocol Buffers, but appears to be less efficient,
-    and have more dependencies.
--   YAML: a superset of JSON and otherwise very similar. Used by e.g. Unity.
--   C# comes with built-in serialization functionality, as used by Unity also.
-    Being tied to the language, and having no automatic versioning support
-    limits its applicability.
--   Project Anarchy (the free mobile engine by Havok) comes with a serialization
-    system, that however does no automatic versioning (have to code around new
-    fields manually), is very much tied to the rest of the engine, and works
-    without a schema to generate code (tied to your C++ class definition).
-
-### Code for benchmarks
-
-Code for these benchmarks sits in `benchmarks/` in git branch `benchmarks`.
-It sits in its own branch because it has submodule dependencies that the main
-project doesn't need, and the code standards do not meet those of the main
-project. Please read `benchmarks/cpp/README.txt` before working with the code.
-
-<br>
diff --git a/third_party/flatbuffers/docs/source/Building.md b/third_party/flatbuffers/docs/source/Building.md
deleted file mode 100755
index daeeb1e..0000000
--- a/third_party/flatbuffers/docs/source/Building.md
+++ /dev/null
@@ -1,67 +0,0 @@
-Building    {#flatbuffers_guide_building}
-========
-
-## Building with CMake
-
-The distribution comes with a `cmake` file that should allow
-you to build project/make files for any platform. For details on `cmake`, see
-<http://www.cmake.org>. In brief, depending on your platform, use one of
-e.g.:
-
-    cmake -G "Unix Makefiles"
-    cmake -G "Visual Studio 10"
-    cmake -G "Xcode"
-
-Then, build as normal for your platform. This should result in a `flatc`
-executable, essential for the next steps.
-Note that to use clang instead of gcc, you may need to set up your environment
-variables, e.g.
-`CC=/usr/bin/clang CXX=/usr/bin/clang++ cmake -G "Unix Makefiles"`.
-
-Optionally, run the `flattests` executable from the root `flatbuffers/`
-directory to ensure everything is working correctly on your system. If this
-fails, please contact us!
-
-Building should also produce two sample executables, `flatsamplebinary` and
-`flatsampletext`, see the corresponding `.cpp` files in the
-`flatbuffers/samples` directory.
-
-*Note that you MUST be in the root of the FlatBuffers distribution when you
-run 'flattests' or `flatsampletext`, or it will fail to load its files.*
-
-## Building for Android
-
-There is a `flatbuffers/android` directory that contains all you need to build
-the test executable on android (use the included `build_apk.sh` script, or use
-`ndk_build` / `adb` etc. as usual). Upon running, it will output to the log
-if tests succeeded or not.
-
-You may also run an android sample from inside the `flatbuffers/samples`, by
-running the `android_sample.sh` script. Optionally, you may go to the
-`flatbuffers/samples/android` folder and build the sample with the
-`build_apk.sh` script or `ndk_build` / `adb` etc.
-
-## Using FlatBuffers in your own projects.
-
-For C++, there is usually no runtime to compile, as the code consists of a
-single header, `include/flatbuffers/flatbuffers.h`. You should add the
-`include` folder to your include paths. If you wish to be
-able to load schemas and/or parse text into binary buffers at runtime,
-you additionally need the other headers in `include/flatbuffers`. You must
-also compile/link `src/idl_parser.cpp` (and `src/idl_gen_text.cpp` if you
-also want to be able convert binary to text).
-
-To see how to include FlatBuffers in any of our supported languages, please
-view the [Tutorial](@ref flatbuffers_guide_tutorial) and select your appropriate
-language using the radio buttons.
-
-#### For Google Play apps
-
-For applications on Google Play that integrate this library, usage is tracked.
-This tracking is done automatically using the embedded version string
-(flatbuffer_version_string), and helps us continue to optimize it.
-Aside from consuming a few extra bytes in your application binary, it shouldn't
-affect your application at all. We use this information to let us know if
-FlatBuffers is useful and if we should continue to invest in it. Since this is
-open source, you are free to remove the version string but we would appreciate
-if you would leave it in.
diff --git a/third_party/flatbuffers/docs/source/CONTRIBUTING.md b/third_party/flatbuffers/docs/source/CONTRIBUTING.md
deleted file mode 120000
index f939e75..0000000
--- a/third_party/flatbuffers/docs/source/CONTRIBUTING.md
+++ /dev/null
@@ -1 +0,0 @@
-../../CONTRIBUTING.md
\ No newline at end of file
diff --git a/third_party/flatbuffers/docs/source/CUsage.md b/third_party/flatbuffers/docs/source/CUsage.md
deleted file mode 100644
index 9aafa6f..0000000
--- a/third_party/flatbuffers/docs/source/CUsage.md
+++ /dev/null
@@ -1,224 +0,0 @@
-Use in C    {#flatbuffers_guide_use_c}
-==========
-
-The C language binding exists in a separate project named [FlatCC](https://github.com/dvidelabs/flatcc).
-
-The `flatcc` C schema compiler can generate code offline as well as
-online via a C library. It can also generate buffer verifiers and fast
-JSON parsers, printers.
-
-Great care has been taken to ensure compatibily with the main `flatc`
-project.
-
-## General Documention
-
-- [Tutorial](@ref flatbuffers_guide_tutorial) - select C as language
-  when scrolling down
-- [FlatCC Guide](https://github.com/dvidelabs/flatcc#flatcc-flatbuffers-in-c-for-c)
-- [The C Builder Interface](https://github.com/dvidelabs/flatcc/blob/master/doc/builder.md#the-builder-interface)
-- [The Monster Sample in C](https://github.com/dvidelabs/flatcc/blob/master/samples/monster/monster.c)
-- [GitHub](https://github.com/dvidelabs/flatcc)
-
-
-## Supported Platforms
-
-- Ubuntu (clang / gcc, ninja / gnu make)
-- OS-X (clang / gcc, ninja / gnu make)
-- Windows MSVC 2010, 2013, 2015
-
-CI builds recent versions of gcc, clang and MSVC on OS-X, Ubuntu, and
-Windows, and occasionally older compiler versions. See main project [Status](https://github.com/dvidelabs/flatcc#status).
-
-Other platforms may well work, including Centos, but are not tested
-regularly.
-
-The monster sample project was specifically written for C99 in order to
-follow the C++ version and for that reason it will not work with MSVC
-2010.
-
-## Modular Object Creation
-
-In the tutorial we used the call `Monster_create_as_root` to create the
-root buffer object since this is easier in simple use cases. Sometimes
-we need more modularity so we can reuse a function to create nested
-tables and root tables the same way. For this we need the
-`flatcc_builder_buffer_create_call`. It is best to keep `flatcc_builder`
-calls isolated at the top driver level, so we get:
-
-<div class="language-c">
-~~~{.c}
-  ns(Monster_ref_t) create_orc(flatcc_builder_t *B)
-  {
-    // ... same as in the tutorial.
-    return s(Monster_create(B, ...));
-  }
-
-  void create_monster_buffer()
-  {
-      uint8_t *buf;
-      size_t size;
-      flatcc_builder_t builder, *B;
-
-      // Initialize the builder object.
-      B = &builder;
-      flatcc_builder_init(B);
-      // Only use `buffer_create` without `create/start/end_as_root`.
-      flatcc_builder_buffer_create(create_orc(B));
-      // Allocate and copy buffer to user memory.
-      buf = flatcc_builder_finalize_buffer(B, &size);
-      // ... write the buffer to disk or network, or something.
-
-      free(buf);
-      flatcc_builder_clear(B);
-  }
-~~~
-</div>
-
-The same principle applies with `start/end` vs `start/end_as_root` in
-the top-down approach.
-
-
-## Top Down Example
-
-The tutorial uses a bottom up approach. In C it is also possible to use
-a top-down approach by starting and ending objects nested within each
-other. In the tutorial there is no deep nesting, so the difference is
-limited, but it shows the idea:
-
-<div class="language-c">
-<br>
-~~~{.c}
-  uint8_t treasure[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  size_t treasure_count = c_vec_len(treasure);
-  ns(Weapon_ref_t) axe;
-
-  // NOTE: if we use end_as_root, we MUST also start as root.
-  ns(Monster_start_as_root(B));
-  ns(Monster_pos_create(B, 1.0f, 2.0f, 3.0f));
-  ns(Monster_hp_add(B, 300));
-  ns(Monster_mana_add(B, 150));
-  // We use create_str instead of add because we have no existing string reference.
-  ns(Monster_name_create_str(B, "Orc"));
-  // Again we use create because we no existing vector object, only a C-array.
-  ns(Monster_inventory_create(B, treasure, treasure_count));
-  ns(Monster_color_add(B, ns(Color_Red)));
-  if (1) {
-      ns(Monster_weapons_start(B));
-      ns(Monster_weapons_push_create(B, flatbuffers_string_create_str(B, "Sword"), 3));
-      // We reuse the axe object later. Note that we dereference a pointer
-      // because push always returns a short-term pointer to the stored element.
-      // We could also have created the axe object first and simply pushed it.
-      axe = *ns(Monster_weapons_push_create(B, flatbuffers_string_create_str(B, "Axe"), 5));
-      ns(Monster_weapons_end(B));
-  } else {
-      // We can have more control with the table elements added to a vector:
-      //
-      ns(Monster_weapons_start(B));
-      ns(Monster_weapons_push_start(B));
-      ns(Weapon_name_create_str(B, "Sword"));
-      ns(Weapon_damage_add(B, 3));
-      ns(Monster_weapons_push_end(B));
-      ns(Monster_weapons_push_start(B));
-      ns(Monster_weapons_push_start(B));
-      ns(Weapon_name_create_str(B, "Axe"));
-      ns(Weapon_damage_add(B, 5));
-      axe = *ns(Monster_weapons_push_end(B));
-      ns(Monster_weapons_end(B));
-  }
-  // Unions can get their type by using a type-specific add/create/start method.
-  ns(Monster_equipped_Weapon_add(B, axe));
-
-  ns(Monster_end_as_root(B));
-~~~
-</div>
-
-
-## Basic Reflection
-
-The C-API does support reading binary schema (.bfbs)
-files via code generated from the `reflection.fbs` schema, and an
-[example usage](https://github.com/dvidelabs/flatcc/tree/master/samples/reflection)
-shows how to use this. The reflection schema files are pre-generated
-in the [runtime distribution](https://github.com/dvidelabs/flatcc/tree/master/include/flatcc/reflection).
-
-
-## Mutations and Reflection
-
-The C-API does not support mutating reflection like C++ does, nor does
-the reader interface support mutating scalars (and it is generally
-unsafe to do so even after verification).
-
-The generated reader interface supports sorting vectors in-place after
-casting them to a mutating type because it is not practical to do so
-while building a buffer. This is covered in the builder documentation.  
-The reflection example makes use of this feature to look up objects by
-name.
-
-It is possible to build new buffers using complex objects from existing
-buffers as source. This can be very efficient due to direct copy
-semantics without endian conversion or temporary stack allocation.
-
-Scalars, structs and strings can be used as source, as well vectors of
-these.
-
-It is currently not possible to use an existing table or vector of table
-as source, but it would be possible to add support for this at some
-point.
-
-
-## Namespaces
-
-The `FLATBUFFERS_WRAP_NAMESPACE` approach used in the tutorial is convenient
-when each function has a very long namespace prefix. But it isn't always
-the best approach. If the namespace is absent, or simple and
-informative, we might as well use the prefix directly. The
-[reflection example](https://github.com/dvidelabs/flatcc/blob/master/samples/reflection/bfbs2json.c)
-mentioned above uses this approach.
-
-
-## Checking for Present Members
-
-Not all languages support testing if a field is present, but in C we can
-elaborate the reader section of the tutorial with tests for this. Recall
-that `mana` was set to the default value `150` and therefore shouldn't
-be present.
-
-<div class="language-c">
-~~~{.c}
-  int hp_present = ns(Monster_hp_is_present(monster)); // 1
-  int mana_present = ns(Monster_mana_is_present(monster)); // 0
-~~~
-</div>
-
-## Alternative ways to add a Union
-
-In the tutorial we used a single call to add a union.  Here we show
-different ways to accomplish the same thing. The last form is rarely
-used, but is the low-level way to do it. It can be used to group small
-values together in the table by adding type and data at different
-points in time.
-
-<div class="language-c">
-~~~{.c}
-   ns(Equipment_union_ref_t) equipped = ns(Equipment_as_Weapon(axe));
-   ns(Monster_equipped_add(B, equipped));
-   // or alternatively
-   ns(Monster_equipped_Weapon_add(B, axe);
-   // or alternatively
-   ns(Monster_equipped_add_type(B, ns(Equipment_Weapon));
-   ns(Monster_equipped_add_member(B, axe));
-~~~
-</div>
-
-## Why not integrate with the `flatc` tool?
-
-[It was considered how the C code generator could be integrated into the
-`flatc` tool](https://github.com/dvidelabs/flatcc/issues/1), but it
-would either require that the standalone C implementation of the schema
-compiler was dropped, or it would lead to excessive code duplication, or
-a complicated intermediate representation would have to be invented.
-Neither of these alternatives are very attractive, and it isn't a big
-deal to use the `flatcc` tool instead of `flatc` given that the
-FlatBuffers C runtime library needs to be made available regardless.
-
-
diff --git a/third_party/flatbuffers/docs/source/Compiler.md b/third_party/flatbuffers/docs/source/Compiler.md
deleted file mode 100755
index 2be5a66..0000000
--- a/third_party/flatbuffers/docs/source/Compiler.md
+++ /dev/null
@@ -1,127 +0,0 @@
-Using the schema compiler    {#flatbuffers_guide_using_schema_compiler}
-=========================
-
-Usage:
-
-    flatc [ GENERATOR OPTIONS ] [ -o PATH ] [ -I PATH ] [ -S ] FILES...
-          [ -- FILES...]
-
-The files are read and parsed in order, and can contain either schemas
-or data (see below). Data files are processed according to the definitions of
-the most recent schema specified.
-
-`--` indicates that the following files are binary files in
-FlatBuffer format conforming to the schema indicated before it.
-
-Depending on the flags passed, additional files may
-be generated for each file processed:
-
-For any schema input files, one or more generators can be specified:
-
--   `--cpp`, `-c` : Generate a C++ header for all definitions in this file (as
-    `filename_generated.h`).
-
--   `--java`, `-j` : Generate Java code.
-
--   `--csharp`, `-n` : Generate C# code.
-
--   `--go`, `-g` : Generate Go code.
-
--   `--python`, `-p`: Generate Python code.
-
--   `--js`, `-s`: Generate JavaScript code.
-
--   `--php`: Generate PHP code.
-
--   `--grpc`: Generate RPC stub code for GRPC.
-
-For any data input files:
-
--   `--binary`, `-b` : If data is contained in this file, generate a
-    `filename.bin` containing the binary flatbuffer (or a different extension
-    if one is specified in the schema).
-
--   `--json`, `-t` : If data is contained in this file, generate a
-    `filename.json` representing the data in the flatbuffer.
-
-Additional options:
-
--   `-o PATH` : Output all generated files to PATH (either absolute, or
-    relative to the current directory). If omitted, PATH will be the
-    current directory. PATH should end in your systems path separator,
-    e.g. `/` or `\`.
-
--   `-I PATH` : when encountering `include` statements, attempt to load the
-    files from this path. Paths will be tried in the order given, and if all
-    fail (or none are specified) it will try to load relative to the path of
-    the schema file being parsed.
-
--   `-M` : Print make rules for generated files.
-
--   `--strict-json` : Require & generate strict JSON (field names are enclosed
-    in quotes, no trailing commas in tables/vectors). By default, no quotes are
-    required/generated, and trailing commas are allowed.
-
--   `--defaults-json` : Output fields whose value is equal to the default value
-    when writing JSON text.
-
--   `--no-prefix` : Don't prefix enum values in generated C++ by their enum
-    type.
-
--   `--scoped-enums` : Use C++11 style scoped and strongly typed enums in
-    generated C++. This also implies `--no-prefix`.
-
--   `--gen-includes` : (deprecated), this is the default behavior.
-                       If the original behavior is required (no include
-	                   statements) use `--no-includes.`
-
--   `--no-includes` : Don't generate include statements for included schemas the
-    generated file depends on (C++).
-
--   `--gen-mutable` : Generate additional non-const accessors for mutating
-    FlatBuffers in-place.
-
-    `--gen-object-api` : Generate an additional object-based API. This API is
-    more convenient for object construction and mutation than the base API,
-    at the cost of efficiency (object allocation). Recommended only to be used
-    if other options are insufficient.
-
--   `--gen-onefile` :  Generate single output file (useful for C#)
-
--   `--gen-all`: Generate not just code for the current schema files, but
-    for all files it includes as well. If the language uses a single file for
-    output (by default the case for C++ and JS), all code will end up in
-    this one file.
-
--   `--no-js-exports` :  Removes Node.js style export lines (useful for JS)
-
--   `--goog-js-export` :  Uses goog.exportsSymbol and goog.exportsProperty
-    instead of Node.js style exporting.  Needed for compatibility with the
-    Google closure compiler (useful for JS).
-
--   `--raw-binary` : Allow binaries without a file_indentifier to be read.
-    This may crash flatc given a mismatched schema.
-
--   `--proto`: Expect input files to be .proto files (protocol buffers).
-    Output the corresponding .fbs file.
-    Currently supports: `package`, `message`, `enum`, nested declarations,
-    `import` (use `-I` for paths), `extend`, `oneof`, `group`.
-    Does not support, but will skip without error: `option`, `service`,
-    `extensions`, and most everything else.
-
--   `--schema`: Serialize schemas instead of JSON (use with -b). This will
-    output a binary version of the specified schema that itself corresponds
-    to the reflection/reflection.fbs schema. Loading this binary file is the
-    basis for reflection functionality.
-
--   `--bfbs-comments`: Add doc comments to the binary schema files.
-
--   `--conform FILE` : Specify a schema the following schemas should be
-    an evolution of. Gives errors if not. Useful to check if schema
-    modifications don't break schema evolution rules.
-
--   `--include-prefix PATH` : Prefix this path to any generated include
-    statements.
-
-NOTE: short-form options for generators are deprecated, use the long form
-whenever possible.
diff --git a/third_party/flatbuffers/docs/source/CppUsage.md b/third_party/flatbuffers/docs/source/CppUsage.md
deleted file mode 100755
index cff3071..0000000
--- a/third_party/flatbuffers/docs/source/CppUsage.md
+++ /dev/null
@@ -1,432 +0,0 @@
-Use in C++    {#flatbuffers_guide_use_cpp}
-==========
-
-## Before you get started
-
-Before diving into the FlatBuffers usage in C++, it should be noted that
-the [Tutorial](@ref flatbuffers_guide_tutorial) page has a complete guide
-to general FlatBuffers usage in all of the supported languages (including C++).
-This page is designed to cover the nuances of FlatBuffers usage, specific to
-C++.
-
-#### Prerequisites
-
-This page assumes you have written a FlatBuffers schema and compiled it
-with the Schema Compiler. If you have not, please see
-[Using the schema compiler](@ref flatbuffers_guide_using_schema_compiler)
-and [Writing a schema](@ref flatbuffers_guide_writing_schema).
-
-Assuming you wrote a schema, say `mygame.fbs` (though the extension doesn't
-matter), you've generated a C++ header called `mygame_generated.h` using the
-compiler (e.g. `flatc -c mygame.fbs`), you can now start using this in
-your program by including the header. As noted, this header relies on
-`flatbuffers/flatbuffers.h`, which should be in your include path.
-
-## FlatBuffers C++ library code location
-
-The code for the FlatBuffers C++ library can be found at
-`flatbuffers/include/flatbuffers`. You can browse the library code on the
-[FlatBuffers GitHub page](https://github.com/google/flatbuffers/tree/master/include/flatbuffers).
-
-## Testing the FlatBuffers C++ library
-
-The code to test the C++ library can be found at `flatbuffers/tests`.
-The test code itself is located in
-[test.cpp](https://github.com/google/flatbuffers/blob/master/tests/test.cpp).
-
-This test file is built alongside `flatc`. To review how to build the project,
-please read the [Building](@ref flatbuffers_guide_building) documenation.
-
-To run the tests, execute `flattests` from the root `flatbuffers/` directory.
-For example, on [Linux](https://en.wikipedia.org/wiki/Linux), you would simply
-run: `./flattests`.
-
-## Using the FlatBuffers C++ library
-
-*Note: See [Tutorial](@ref flatbuffers_guide_tutorial) for a more in-depth
-example of how to use FlatBuffers in C++.*
-
-FlatBuffers supports both reading and writing FlatBuffers in C++.
-
-To use FlatBuffers in your code, first generate the C++ classes from your
-schema with the `--cpp` option to `flatc`. Then you can include both FlatBuffers
-and the generated code to read or write FlatBuffers.
-
-For example, here is how you would read a FlatBuffer binary file in C++:
-First, include the library and generated code. Then read the file into
-a `char *` array, which you pass to `GetMonster()`.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
-    #include "flatbuffers/flatbuffers.h"
-    #include "monster_test_generate.h"
-    #include <cstdio> // For printing and file access.
-
-    FILE* file = fopen("monsterdata_test.mon", "rb");
-    fseek(file, 0L, SEEK_END);
-    int length = ftell(file);
-    fseek(file, 0L, SEEK_SET);
-    char *data = new char[length];
-    fread(data, sizeof(char), length, file);
-    fclose(file);
-
-    auto monster = GetMonster(data);
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-`monster` is of type `Monster *`, and points to somewhere *inside* your
-buffer (root object pointers are not the same as `buffer_pointer` !).
-If you look in your generated header, you'll see it has
-convenient accessors for all fields, e.g. `hp()`, `mana()`, etc:
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
-    printf("%d\n", monster->hp());            // `80`
-    printf("%d\n", monster->mana());          // default value of `150`
-    printf("%s\n", monster->name()->c_str()); // "MyMonster"
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-*Note: That we never stored a `mana` value, so it will return the default.*
-
-## Object based API.  {#flatbuffers_cpp_object_based_api}
-
-FlatBuffers is all about memory efficiency, which is why its base API is written
-around using as little as possible of it. This does make the API clumsier
-(requiring pre-order construction of all data, and making mutation harder).
-
-For times when efficiency is less important a more convenient object based API
-can be used (through `--gen-object-api`) that is able to unpack & pack a
-FlatBuffer into objects and standard STL containers, allowing for convenient
-construction, access and mutation.
-
-To use:
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
-    // Autogenerated class from table Monster.
-    MonsterT monsterobj;
-
-    // Deserialize from buffer into object.
-    UnPackTo(&monsterobj, flatbuffer);
-
-    // Update object directly like a C++ class instance.
-    cout << monsterobj->name;  // This is now a std::string!
-    monsterobj->name = "Bob";  // Change the name.
-
-    // Serialize into new flatbuffer.
-    FlatBufferBuilder fbb;
-    Pack(fbb, &monsterobj);
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The following attributes are specific to the object-based API code generation:
-
--   `native_inline` (on a field): Because FlatBuffer tables and structs are
-    optionally present in a given buffer, they are best represented as pointers
-    (specifically std::unique_ptrs) in the native class since they can be null.
-    This attribute changes the member declaration to use the type directly
-    rather than wrapped in a unique_ptr.
-
--   `native_default`: "value" (on a field): For members that are declared
-    "native_inline", the value specified with this attribute will be included
-    verbatim in the class constructor initializer list for this member.
-
--   `native_type`' "type" (on a struct): In some cases, a more optimal C++ data
-    type exists for a given struct.  For example, the following schema:
-
-      struct Vec2 {
-        x: float;
-        y: float;
-      }
-
-    generates the following Object-Based API class:
-
-      struct Vec2T : flatbuffers::NativeTable {
-        float x;
-        float y;
-      };
-
-    However, it can be useful to instead use a user-defined C++ type since it
-    can provide more functionality, eg.
-
-      struct vector2 {
-        float x = 0, y = 0;
-        vector2 operator+(vector2 rhs) const { ... }
-        vector2 operator-(vector2 rhs) const { ... }
-        float length() const { ... }
-        // etc.
-      };
-
-    The `native_type` attribute will replace the usage of the generated class
-    with the given type.  So, continuing with the example, the generated
-    code would use |vector2| in place of |Vec2T| for all generated code.
-
-    However, becuase the native_type is unknown to flatbuffers, the user must
-    provide the following functions to aide in the serialization process:
-
-      namespace flatbuffers {
-        FlatbufferStruct Pack(const native_type& obj);
-        native_type UnPack(const FlatbufferStruct& obj);
-      }
-
-Finally, the following top-level attribute
-
--   native_include: "path" (at file level): Because the `native_type` attribute
-    can be used to introduce types that are unknown to flatbuffers, it may be
-    necessary to include "external" header files in the generated code.  This
-    attribute can be used to directly add an #include directive to the top of
-    the generated code that includes the specified path directly.
-
-# External references.
-
-An additional feature of the object API is the ability to allow you to load
-multiple independent FlatBuffers, and have them refer to eachothers objects
-using hashes which are then represented as typed pointers in the object API.
-
-To make this work have a field in the objects you want to referred to which is
-using the string hashing feature (see `hash` attribute in the
-[schema](@ref flatbuffers_guide_writing_schema) documentation). Then you have
-a similar hash in the field referring to it, along with a `cpp_type`
-attribute specifying the C++ type this will refer to (this can be any C++
-type, and will get a `*` added).
-
-Then, in JSON or however you create these buffers, make sure they use the
-same string (or hash).
-
-When you call `UnPack` (or `Create`), you'll need a function that maps from
-hash to the object (see `resolver_function_t` for details).
-
-# Using different pointer types.
-
-By default the object tree is built out of `std::unique_ptr`, but you can
-influence this either globally (using the `--cpp-ptr-type` argument to
-`flatc`) or per field (using the `cpp_ptr_type` attribute) to by any smart
-pointer type (`my_ptr<T>`), or by specifying `naked` as the type to get `T *`
-pointers. Unlike the smart pointers, naked pointers do not manage memory for
-you, so you'll have to manage their lifecycles manually.
-
-
-# Using different string type.
-
-By default the object tree is built out of `std::string`, but you can
-influence this either globally (using the `--cpp-str-type` argument to
-`flatc`) or per field using the `cpp_str_type` attribute.
-
-The type must support T::c_str() and T::length() as member functions.
-
-## Reflection (& Resizing)
-
-There is experimental support for reflection in FlatBuffers, allowing you to
-read and write data even if you don't know the exact format of a buffer, and
-even allows you to change sizes of strings and vectors in-place.
-
-The way this works is very elegant; there is actually a FlatBuffer schema that
-describes schemas (!) which you can find in `reflection/reflection.fbs`.
-The compiler, `flatc`, can write out any schemas it has just parsed as a binary
-FlatBuffer, corresponding to this meta-schema.
-
-Loading in one of these binary schemas at runtime allows you traverse any
-FlatBuffer data that corresponds to it without knowing the exact format. You
-can query what fields are present, and then read/write them after.
-
-For convenient field manipulation, you can include the header
-`flatbuffers/reflection.h` which includes both the generated code from the meta
-schema, as well as a lot of helper functions.
-
-And example of usage, for the time being, can be found in
-`test.cpp/ReflectionTest()`.
-
-## Storing maps / dictionaries in a FlatBuffer
-
-FlatBuffers doesn't support maps natively, but there is support to
-emulate their behavior with vectors and binary search, which means you
-can have fast lookups directly from a FlatBuffer without having to unpack
-your data into a `std::map` or similar.
-
-To use it:
--   Designate one of the fields in a table as they "key" field. You do this
-    by setting the `key` attribute on this field, e.g.
-    `name:string (key)`.
-    You may only have one key field, and it must be of string or scalar type.
--   Write out tables of this type as usual, collect their offsets in an
-    array or vector.
--   Instead of `CreateVector`, call `CreateVectorOfSortedTables`,
-    which will first sort all offsets such that the tables they refer to
-    are sorted by the key field, then serialize it.
--   Now when you're accessing the FlatBuffer, you can use `Vector::LookupByKey`
-    instead of just `Vector::Get` to access elements of the vector, e.g.:
-    `myvector->LookupByKey("Fred")`, which returns a pointer to the
-    corresponding table type, or `nullptr` if not found.
-    `LookupByKey` performs a binary search, so should have a similar speed to
-    `std::map`, though may be faster because of better caching. `LookupByKey`
-    only works if the vector has been sorted, it will likely not find elements
-    if it hasn't been sorted.
-
-## Direct memory access
-
-As you can see from the above examples, all elements in a buffer are
-accessed through generated accessors. This is because everything is
-stored in little endian format on all platforms (the accessor
-performs a swap operation on big endian machines), and also because
-the layout of things is generally not known to the user.
-
-For structs, layout is deterministic and guaranteed to be the same
-accross platforms (scalars are aligned to their
-own size, and structs themselves to their largest member), and you
-are allowed to access this memory directly by using `sizeof()` and
-`memcpy` on the pointer to a struct, or even an array of structs.
-
-To compute offsets to sub-elements of a struct, make sure they
-are a structs themselves, as then you can use the pointers to
-figure out the offset without having to hardcode it. This is
-handy for use of arrays of structs with calls like `glVertexAttribPointer`
-in OpenGL or similar APIs.
-
-It is important to note is that structs are still little endian on all
-machines, so only use tricks like this if you can guarantee you're not
-shipping on a big endian machine (an `assert(FLATBUFFERS_LITTLEENDIAN)`
-would be wise).
-
-## Access of untrusted buffers
-
-The generated accessor functions access fields over offsets, which is
-very quick. These offsets are not verified at run-time, so a malformed
-buffer could cause a program to crash by accessing random memory.
-
-When you're processing large amounts of data from a source you know (e.g.
-your own generated data on disk), this is acceptable, but when reading
-data from the network that can potentially have been modified by an
-attacker, this is undesirable.
-
-For this reason, you can optionally use a buffer verifier before you
-access the data. This verifier will check all offsets, all sizes of
-fields, and null termination of strings to ensure that when a buffer
-is accessed, all reads will end up inside the buffer.
-
-Each root type will have a verification function generated for it,
-e.g. for `Monster`, you can call:
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
-	bool ok = VerifyMonsterBuffer(Verifier(buf, len));
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-if `ok` is true, the buffer is safe to read.
-
-Besides untrusted data, this function may be useful to call in debug
-mode, as extra insurance against data being corrupted somewhere along
-the way.
-
-While verifying a buffer isn't "free", it is typically faster than
-a full traversal (since any scalar data is not actually touched),
-and since it may cause the buffer to be brought into cache before
-reading, the actual overhead may be even lower than expected.
-
-In specialized cases where a denial of service attack is possible,
-the verifier has two additional constructor arguments that allow
-you to limit the nesting depth and total amount of tables the
-verifier may encounter before declaring the buffer malformed. The default is
-`Verifier(buf, len, 64 /* max depth */, 1000000, /* max tables */)` which
-should be sufficient for most uses.
-
-## Text & schema parsing
-
-Using binary buffers with the generated header provides a super low
-overhead use of FlatBuffer data. There are, however, times when you want
-to use text formats, for example because it interacts better with source
-control, or you want to give your users easy access to data.
-
-Another reason might be that you already have a lot of data in JSON
-format, or a tool that generates JSON, and if you can write a schema for
-it, this will provide you an easy way to use that data directly.
-
-(see the schema documentation for some specifics on the JSON format
-accepted).
-
-There are two ways to use text formats:
-
-#### Using the compiler as a conversion tool
-
-This is the preferred path, as it doesn't require you to add any new
-code to your program, and is maximally efficient since you can ship with
-binary data. The disadvantage is that it is an extra step for your
-users/developers to perform, though you might be able to automate it.
-
-    flatc -b myschema.fbs mydata.json
-
-This will generate the binary file `mydata_wire.bin` which can be loaded
-as before.
-
-#### Making your program capable of loading text directly
-
-This gives you maximum flexibility. You could even opt to support both,
-i.e. check for both files, and regenerate the binary from text when
-required, otherwise just load the binary.
-
-This option is currently only available for C++, or Java through JNI.
-
-As mentioned in the section "Building" above, this technique requires
-you to link a few more files into your program, and you'll want to include
-`flatbuffers/idl.h`.
-
-Load text (either a schema or json) into an in-memory buffer (there is a
-convenient `LoadFile()` utility function in `flatbuffers/util.h` if you
-wish). Construct a parser:
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
-    flatbuffers::Parser parser;
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Now you can parse any number of text files in sequence:
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
-    parser.Parse(text_file.c_str());
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-This works similarly to how the command-line compiler works: a sequence
-of files parsed by the same `Parser` object allow later files to
-reference definitions in earlier files. Typically this means you first
-load a schema file (which populates `Parser` with definitions), followed
-by one or more JSON files.
-
-As optional argument to `Parse`, you may specify a null-terminated list of
-include paths. If not specified, any include statements try to resolve from
-the current directory.
-
-If there were any parsing errors, `Parse` will return `false`, and
-`Parser::err` contains a human readable error string with a line number
-etc, which you should present to the creator of that file.
-
-After each JSON file, the `Parser::fbb` member variable is the
-`FlatBufferBuilder` that contains the binary buffer version of that
-file, that you can access as described above.
-
-`samples/sample_text.cpp` is a code sample showing the above operations.
-
-## Threading
-
-Reading a FlatBuffer does not touch any memory outside the original buffer,
-and is entirely read-only (all const), so is safe to access from multiple
-threads even without synchronisation primitives.
-
-Creating a FlatBuffer is not thread safe. All state related to building
-a FlatBuffer is contained in a FlatBufferBuilder instance, and no memory
-outside of it is touched. To make this thread safe, either do not
-share instances of FlatBufferBuilder between threads (recommended), or
-manually wrap it in synchronisation primites. There's no automatic way to
-accomplish this, by design, as we feel multithreaded construction
-of a single buffer will be rare, and synchronisation overhead would be costly.
-
-## Advanced union features
-
-The C++ implementation currently supports vectors of unions (i.e. you can
-declare a field as `[T]` where `T` is a union type instead of a table type). It
-also supports structs and strings in unions, besides tables.
-
-For an example of these features, see `tests/union_vector`, and
-`UnionVectorTest` in `test.cpp`.
-
-Since these features haven't been ported to other languages yet, if you
-choose to use them, you won't be able to use these buffers in other languages
-(`flatc` will refuse to compile a schema that uses these features).
-
-These features reduce the amount of "table wrapping" that was previously
-needed to use unions.
-
-To use scalars, simply wrap them in a struct.
-
-<br>
diff --git a/third_party/flatbuffers/docs/source/FlatBuffers.md b/third_party/flatbuffers/docs/source/FlatBuffers.md
deleted file mode 100644
index d228bd4..0000000
--- a/third_party/flatbuffers/docs/source/FlatBuffers.md
+++ /dev/null
@@ -1,168 +0,0 @@
-FlatBuffers    {#flatbuffers_index}
-===========
-
-# Overview {#flatbuffers_overview}
-
-[FlatBuffers](@ref flatbuffers_overview) is an efficient cross platform
-serialization library for C++, C#, C, Go, Java, JavaScript, PHP, and Python.
-It was originally created at Google for game development and other
-performance-critical applications.
-
-It is available as Open Source on [GitHub](http://github.com/google/flatbuffers)
-under the Apache license, v2 (see LICENSE.txt).
-
-## Why use FlatBuffers?
-
--   **Access to serialized data without parsing/unpacking** - What sets
-    FlatBuffers apart is that it represents hierarchical data in a flat
-    binary buffer in such a way that it can still be accessed directly
-    without parsing/unpacking, while also still supporting data
-    structure evolution (forwards/backwards compatibility).
-
--   **Memory efficiency and speed** - The only memory needed to access
-    your data is that of the buffer. It requires 0 additional allocations
-    (in C++, other languages may vary). FlatBuffers is also very
-    suitable for use with mmap (or streaming), requiring only part of the
-    buffer to be in memory. Access is close to the speed of raw
-    struct access with only one extra indirection (a kind of vtable) to
-    allow for format evolution and optional fields. It is aimed at
-    projects where spending time and space (many memory allocations) to
-    be able to access or construct serialized data is undesirable, such
-    as in games or any other performance sensitive applications. See the
-    [benchmarks](@ref flatbuffers_benchmarks) for details.
-
--   **Flexible** - Optional fields means not only do you get great
-    forwards and backwards compatibility (increasingly important for
-    long-lived games: don't have to update all data with each new
-    version!). It also means you have a lot of choice in what data you
-    write and what data you don't, and how you design data structures.
-
--   **Tiny code footprint** - Small amounts of generated code, and just
-    a single small header as the minimum dependency, which is very easy
-    to integrate. Again, see the benchmark section for details.
-
--   **Strongly typed** - Errors happen at compile time rather than
-    manually having to write repetitive and error prone run-time checks.
-    Useful code can be generated for you.
-
--   **Convenient to use** - Generated C++ code allows for terse access
-    & construction code. Then there's optional functionality for parsing
-    schemas and JSON-like text representations at runtime efficiently if
-    needed (faster and more memory efficient than other JSON
-    parsers).
-
-    Java and Go code supports object-reuse. C# has efficient struct based
-    accessors.
-
--   **Cross platform code with no dependencies** - C++ code will work
-    with any recent gcc/clang and VS2010. Comes with build files for the tests &
-    samples (Android .mk files, and cmake for all other platforms).
-
-### Why not use Protocol Buffers, or .. ?
-
-Protocol Buffers is indeed relatively similar to FlatBuffers,
-with the primary difference being that FlatBuffers does not need a parsing/
-unpacking step to a secondary representation before you can
-access data, often coupled with per-object memory allocation. The code
-is an order of magnitude bigger, too. Protocol Buffers has neither optional
-text import/export nor schema language features like unions.
-
-### But all the cool kids use JSON!
-
-JSON is very readable (which is why we use it as our optional text
-format) and very convenient when used together with dynamically typed
-languages (such as JavaScript). When serializing data from statically
-typed languages, however, JSON not only has the obvious drawback of runtime
-inefficiency, but also forces you to write *more* code to access data
-(counterintuitively) due to its dynamic-typing serialization system.
-In this context, it is only a better choice for systems that have very
-little to no information ahead of time about what data needs to be stored.
-
-If you do need to store data that doesn't fit a schema, FlatBuffers also
-offers a schema-less (self-describing) version!
-
-Read more about the "why" of FlatBuffers in the
-[white paper](@ref flatbuffers_white_paper).
-
-### Who uses FlatBuffers?
--   [Cocos2d-x](http://www.cocos2d-x.org/), the #1 open source mobile game
-    engine, uses it to serialize all their
-    [game data](http://www.cocos2d-x.org/reference/native-cpp/V3.5/d7/d2d/namespaceflatbuffers.html).
--   [Facebook](http://facebook.com/) uses it for client-server communication in
-    their Android app. They have a nice
-    [article](https://code.facebook.com/posts/872547912839369/improving-facebook-s-performance-on-android-with-flatbuffers/)
-    explaining how it speeds up loading their posts.
--   [Fun Propulsion Labs](https://developers.google.com/games/#Tools)
-    at Google uses it extensively in all their libraries and games.
-
-## Usage in brief
-
-This section is a quick rundown of how to use this system. Subsequent
-sections provide a more in-depth usage guide.
-
--   Write a schema file that allows you to define the data structures
-    you may want to serialize. Fields can have a scalar type
-    (ints/floats of all sizes), or they can be a: string; array of any type;
-    reference to yet another object; or, a set of possible objects (unions).
-    Fields are optional and have defaults, so they don't need to be
-    present for every object instance.
-
--   Use `flatc` (the FlatBuffer compiler) to generate a C++ header (or
-    Java/C#/Go/Python.. classes) with helper classes to access and construct
-    serialized data. This header (say `mydata_generated.h`) only depends on
-    `flatbuffers.h`, which defines the core functionality.
-
--   Use the `FlatBufferBuilder` class to construct a flat binary buffer.
-    The generated functions allow you to add objects to this
-    buffer recursively, often as simply as making a single function call.
-
--   Store or send your buffer somewhere!
-
--   When reading it back, you can obtain the pointer to the root object
-    from the binary buffer, and from there traverse it conveniently
-    in-place with `object->field()`.
-
-## In-depth documentation
-
--   How to [build the compiler](@ref flatbuffers_guide_building) and samples on
-    various platforms.
--   How to [use the compiler](@ref flatbuffers_guide_using_schema_compiler).
--   How to [write a schema](@ref flatbuffers_guide_writing_schema).
--   How to [use the generated C++ code](@ref flatbuffers_guide_use_cpp) in your
-    own programs.
--   How to [use the generated Java/C# code](@ref flatbuffers_guide_use_java_c-sharp)
-    in your own programs.
--   How to [use the generated Go code](@ref flatbuffers_guide_use_go) in your
-    own programs.
--   How to [use FlatBuffers in C with `flatcc`](@ref flatbuffers_guide_use_c) in your
-    own programs.
--   [Support matrix](@ref flatbuffers_support) for platforms/languages/features.
--   Some [benchmarks](@ref flatbuffers_benchmarks) showing the advantage of
-    using FlatBuffers.
--   A [white paper](@ref flatbuffers_white_paper) explaining the "why" of
-    FlatBuffers.
--   How to use the [schema-less](@ref flexbuffers) version of
-    FlatBuffers.
--   A description of the [internals](@ref flatbuffers_internals) of FlatBuffers.
--   A formal [grammar](@ref flatbuffers_grammar) of the schema language.
-
-## Online resources
-
--   [GitHub repository](http://github.com/google/flatbuffers)
--   [Landing page](http://google.github.io/flatbuffers)
--   [FlatBuffers Google Group](https://groups.google.com/forum/#!forum/flatbuffers)
--   [FlatBuffers Issues Tracker](http://github.com/google/flatbuffers/issues)
--   Independent implementations & tools:
-    - [FlatCC](https://github.com/dvidelabs/flatcc) Alternative FlatBuffers
-      parser, code generator and runtime all in C.
--   Videos:
-    - Colt's [DevByte](https://www.youtube.com/watch?v=iQTxMkSJ1dQ).
-    - GDC 2015 [Lightning Talk](https://www.youtube.com/watch?v=olmL1fUnQAQ).
-    - FlatBuffers for [Go](https://www.youtube.com/watch?v=-BPVId_lA5w).
-    - Evolution of FlatBuffers
-      [visualization](https://www.youtube.com/watch?v=a0QE0xS8rKM).
--   Useful documentation created by others:
-    - [FlatBuffers in Go](https://rwinslow.com/tags/flatbuffers/)
-    - [FlatBuffers in Android](http://frogermcs.github.io/flatbuffers-in-android-introdution/)
-    - [Parsing JSON to FlatBuffers in Java](http://frogermcs.github.io/json-parsing-with-flatbuffers-in-android/)
-    - [FlatBuffers in Unity](http://exiin.com/blog/flatbuffers-for-unity-sample-code/)
diff --git a/third_party/flatbuffers/docs/source/FlexBuffers.md b/third_party/flatbuffers/docs/source/FlexBuffers.md
deleted file mode 100644
index 5d592fe..0000000
--- a/third_party/flatbuffers/docs/source/FlexBuffers.md
+++ /dev/null
@@ -1,156 +0,0 @@
-FlexBuffers    {#flexbuffers}
-==========
-
-FlatBuffers was designed around schemas, because when you want maximum
-performance and data consistency, strong typing is helpful.
-
-There are however times when you want to store data that doesn't fit a
-schema, because you can't know ahead of time what all needs to be stored.
-
-For this, FlatBuffers has a dedicated format, called FlexBuffers.
-This is a binary format that can be used in conjunction
-with FlatBuffers (by storing a part of a buffer in FlexBuffers
-format), or also as its own independent serialization format.
-
-While it loses the strong typing, you retain the most unique advantage
-FlatBuffers has over other serialization formats (schema-based or not):
-FlexBuffers can also be accessed without parsing / copying / object allocation.
-This is a huge win in efficiency / memory friendly-ness, and allows unique
-use cases such as mmap-ing large amounts of free-form data.
-
-FlexBuffers' design and implementation allows for a very compact encoding,
-combining automatic pooling of strings with automatic sizing of containers to
-their smallest possible representation (8/16/32/64 bits). Many values and
-offsets can be encoded in just 8 bits. While a schema-less representation is
-usually more bulky because of the need to be self-descriptive, FlexBuffers
-generates smaller binaries for many cases than regular FlatBuffers.
-
-FlexBuffers is still slower than regular FlatBuffers though, so we recommend to
-only use it if you need it.
-
-
-# Usage
-
-This is for C++, other languages may follow.
-
-Include the header `flexbuffers.h`, which in turn depends on `flatbuffers.h`
-and `util.h`.
-
-To create a buffer:
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
-flexbuffers::Builder fbb;
-fbb.Int(13);
-fbb.Finish();
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-You create any value, followed by `Finish`. Unlike FlatBuffers which requires
-the root value to be a table, here any value can be the root, including a lonely
-int value.
-
-You can now access the `std::vector<uint8_t>` that contains the encoded value
-as `fbb.GetBuffer()`. Write it, send it, or store it in a parent FlatBuffer. In
-this case, the buffer is just 3 bytes in size.
-
-To read this value back, you could just say:
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
-auto root = flexbuffers::GetRoot(my_buffer);
-int64_t i = root.AsInt64();
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-FlexBuffers stores ints only as big as needed, so it doesn't differentiate
-between different sizes of ints. You can ask for the 64 bit version,
-regardless of what you put in. In fact, since you demand to read the root
-as an int, if you supply a buffer that actually contains a float, or a
-string with numbers in it, it will convert it for you on the fly as well,
-or return 0 if it can't. If instead you actually want to know what is inside
-the buffer before you access it, you can call `root.GetType()` or `root.IsInt()`
-etc.
-
-Here's a slightly more complex value you could write instead of `fbb.Int` above:
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
-fbb.Map([&]() {
-  fbb.Vector("vec", [&]() {
-    fbb.Int(-100);
-    fbb.String("Fred");
-    fbb.IndirectFloat(4.0f);
-  });
-  fbb.UInt("foo", 100);
-});
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-This stores the equivalent of the JSON value
-`{ vec: [ -100, "Fred", 4.0 ], foo: 100 }`. The root is a dictionary that has
-just two key-value pairs, with keys `vec` and `foo`. Unlike FlatBuffers, it
-actually has to store these keys in the buffer (which it does only once if
-you store multiple such objects, by pooling key values), but also unlike
-FlatBuffers it has no restriction on the keys (fields) that you use.
-
-The map constructor uses a C++11 Lambda to group its children, but you can
-also use more conventional start/end calls if you prefer.
-
-The first value in the map is a vector. You'll notice that unlike FlatBuffers,
-you can use mixed types. There is also a `TypedVector` variant that only
-allows a single type, and uses a bit less memory.
-
-`IndirectFloat` is an interesting feature that allows you to store values
-by offset rather than inline. Though that doesn't make any visible change
-to the user, the consequence is that large values (especially doubles or
-64 bit ints) that occur more than once can be shared. Another use case is
-inside of vectors, where the largest element makes up the size of all elements
-(e.g. a single double forces all elements to 64bit), so storing a lot of small
-integers together with a double is more efficient if the double is indirect.
-
-Accessing it:
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
-auto map = flexbuffers::GetRoot(my_buffer).AsMap();
-map.size();  // 2
-auto vec = map["vec"].AsVector();
-vec.size();  // 3
-vec[0].AsInt64();  // -100;
-vec[1].AsString().c_str();  // "Fred";
-vec[1].AsInt64();  // 0 (Number parsing failed).
-vec[2].AsDouble();  // 4.0
-vec[2].AsString().IsTheEmptyString();  // true (Wrong Type).
-vec[2].AsString().c_str();  // "" (This still works though).
-vec[2].ToString().c_str();  // "4" (Or have it converted).
-map["foo"].AsUInt8();  // 100
-map["unknown"].IsNull();  // true
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-
-# Binary encoding
-
-A description of how FlexBuffers are encoded is in the
-[internals](Internals.md#flexbuffers) document.
-
-
-# Efficiency tips
-
-* Vectors generally are a lot more efficient than maps, so prefer them over maps
-  when possible for small objects. Instead of a map with keys `x`, `y` and `z`,
-  use a vector. Better yet, use a typed vector. Or even better, use a fixed
-  size typed vector.
-* Maps are backwards compatible with vectors, and can be iterated as such.
-  You can iterate either just the values (`map.Values()`), or in parallel with
-  the keys vector (`map.Keys()`). If you intend
-  to access most or all elements, this is faster than looking up each element
-  by key, since that involves a binary search of the key vector.
-* When possible, don't mix values that require a big bit width (such as double)
-  in a large vector of smaller values, since all elements will take on this
-  width. Use `IndirectDouble` when this is a possibility. Note that
-  integers automatically use the smallest width possible, i.e. if you ask
-  to serialize an int64_t whose value is actually small, you will use less
-  bits. Doubles are represented as floats whenever possible losslessly, but
-  this is only possible for few values.
-  Since nested vectors/maps are stored over offsets, they typically don't
-  affect the vector width.
-* To store large arrays of byte data, use a blob. If you'd use a typed
-  vector, the bit width of the size field may make it use more space than
-  expected, and may not be compatible with `memcpy`.
-  Similarly, large arrays of (u)int16_t may be better off stored as a
-  binary blob if their size could exceed 64k elements.
-  Construction and use are otherwise similar to strings.
diff --git a/third_party/flatbuffers/docs/source/GoApi.md b/third_party/flatbuffers/docs/source/GoApi.md
deleted file mode 100644
index 98be2b6..0000000
--- a/third_party/flatbuffers/docs/source/GoApi.md
+++ /dev/null
@@ -1,26 +0,0 @@
-Go API
-======
-
-\addtogroup flatbuffers_go_api
-
-<!-- Note: The `GoApi_generate.txt` code snippet was generated using `godoc` and
-     customized for use with this markdown file. To regenerate the file, use the
-     `godoc` tool (http://godoc.org) with the files in the `flatbuffers/go`
-     folder.
-
-     You may need to ensure that copies of the files exist in the `src/`
-     subfolder at the path set by the `$GOROOT` environment variable. You can
-     either move the files to `$GOROOT/src/flatbuffers` manually, if `$GOROOT`
-     is already set, otherwise you will need to manually set the `$GOROOT`
-     variable to a path and create `src/flatbuffers` subfolders at that path.
-     Then copy the flatbuffers files into `$GOROOT/src/flatbuffers`. (Some
-     versions of `godoc` include a `-path` flag. This could be used instead, if
-     available).
-
-     Once the files exist at the `$GOROOT/src/flatbuffers` location, you can
-     regenerate this doc using the following command:
-     `godoc flatbuffers > GoApi_generated.txt`.
-
-     After the documentation is generated, you will have to manually remove any
-     non-user facing documentation from this file. -->
-\snippet GoApi_generated.txt Go API
diff --git a/third_party/flatbuffers/docs/source/GoApi_generated.txt b/third_party/flatbuffers/docs/source/GoApi_generated.txt
deleted file mode 100644
index 3d4e0fc..0000000
--- a/third_party/flatbuffers/docs/source/GoApi_generated.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-// This file was generated using `godoc` and customized for use with the
-// API Reference documentation. To recreate this file, use the `godoc` tool
-// (http://godoc.org) with the files in the `flatbuffers/go` folder.
-//
-// Note: You may need to ensure that copies of the files exist in the
-// `src/` subfolder at the path set by the `$GOROOT` environment variable.
-// You can either move the files to `$GOROOT/src/flatbuffers` manually, if
-// `$GOROOT` is already set, otherwise you will need to manually set the
-// `$GOROOT` variable to a path and create `src/flatbuffers` subfolders at that
-// path. Then copy these files into `$GOROOT/src/flatbuffers`. (Some versions of
-// `godoc` include a `-path` flag. This could be used instead, if available).
-//
-// Once the files exist at the `$GOROOT/src/flatbuffers` location, you can
-// regenerate this doc using the following command:
-// `godoc flatbuffers > GoApi_generated.txt`.
-//
-// After the documentation is generated, you will have to manually remove any
-// non-user facing documentation from this file.
-
-/// [Go API]
-PACKAGE DOCUMENTATION
-
-package flatbuffers
-    Package flatbuffers provides facilities to read and write flatbuffers
-    objects.
-
-TYPES
-
-type Builder struct {
-    // `Bytes` gives raw access to the buffer. Most users will want to use
-    // FinishedBytes() instead.
-    Bytes []byte
-}
-    Builder is a state machine for creating FlatBuffer objects. Use a
-    Builder to construct object(s) starting from leaf nodes.
-
-    A Builder constructs byte buffers in a last-first manner for simplicity
-    and performance.
-
-FUNCTIONS
-
-func NewBuilder(initialSize int) *Builder
-    NewBuilder initializes a Builder of size `initial_size`. The internal
-    buffer is grown as needed.
-
-func (b *Builder) CreateByteString(s []byte) UOffsetT
-    CreateByteString writes a byte slice as a string (null-terminated).
-
-func (b *Builder) CreateByteVector(v []byte) UOffsetT
-    CreateByteVector writes a ubyte vector
-
-func (b *Builder) CreateString(s string) UOffsetT
-    CreateString writes a null-terminated string as a vector.
-
-func (b *Builder) EndVector(vectorNumElems int) UOffsetT
-    EndVector writes data necessary to finish vector construction.
-
-func (b *Builder) Finish(rootTable UOffsetT)
-    Finish finalizes a buffer, pointing to the given `rootTable`.
-
-func (b *Builder) FinishedBytes() []byte
-    FinishedBytes returns a pointer to the written data in the byte buffer.
-    Panics if the builder is not in a finished state (which is caused by
-    calling `Finish()`).
-
-func (b *Builder) Head() UOffsetT
-    Head gives the start of useful data in the underlying byte buffer. Note:
-    unlike other functions, this value is interpreted as from the left.
-
-func (b *Builder) PrependBool(x bool)
-    PrependBool prepends a bool to the Builder buffer. Aligns and checks for
-    space.
-
-func (b *Builder) PrependByte(x byte)
-    PrependByte prepends a byte to the Builder buffer. Aligns and checks for
-    space.
-
-func (b *Builder) PrependFloat32(x float32)
-    PrependFloat32 prepends a float32 to the Builder buffer. Aligns and
-    checks for space.
-
-func (b *Builder) PrependFloat64(x float64)
-    PrependFloat64 prepends a float64 to the Builder buffer. Aligns and
-    checks for space.
-
-func (b *Builder) PrependInt16(x int16)
-    PrependInt16 prepends a int16 to the Builder buffer. Aligns and checks
-    for space.
-
-func (b *Builder) PrependInt32(x int32)
-    PrependInt32 prepends a int32 to the Builder buffer. Aligns and checks
-    for space.
-
-func (b *Builder) PrependInt64(x int64)
-    PrependInt64 prepends a int64 to the Builder buffer. Aligns and checks
-    for space.
-
-func (b *Builder) PrependInt8(x int8)
-    PrependInt8 prepends a int8 to the Builder buffer. Aligns and checks for
-    space.
-
-func (b *Builder) PrependUOffsetT(off UOffsetT)
-    PrependUOffsetT prepends an UOffsetT, relative to where it will be
-    written.
-
-func (b *Builder) PrependUint16(x uint16)
-    PrependUint16 prepends a uint16 to the Builder buffer. Aligns and checks
-    for space.
-
-func (b *Builder) PrependUint32(x uint32)
-    PrependUint32 prepends a uint32 to the Builder buffer. Aligns and checks
-    for space.
-
-func (b *Builder) PrependUint64(x uint64)
-    PrependUint64 prepends a uint64 to the Builder buffer. Aligns and checks
-    for space.
-
-func (b *Builder) PrependUint8(x uint8)
-    PrependUint8 prepends a uint8 to the Builder buffer. Aligns and checks
-    for space.
-
-func (b *Builder) Reset()
-    Reset truncates the underlying Builder buffer, facilitating alloc-free
-    reuse of a Builder. It also resets bookkeeping data.
-/// [Go API]
diff --git a/third_party/flatbuffers/docs/source/GoUsage.md b/third_party/flatbuffers/docs/source/GoUsage.md
deleted file mode 100644
index ab6ddbd..0000000
--- a/third_party/flatbuffers/docs/source/GoUsage.md
+++ /dev/null
@@ -1,99 +0,0 @@
-Use in Go    {#flatbuffers_guide_use_go}
-=========
-
-## Before you get started
-
-Before diving into the FlatBuffers usage in Go, it should be noted that
-the [Tutorial](@ref flatbuffers_guide_tutorial) page has a complete guide
-to general FlatBuffers usage in all of the supported languages (including Go).
-This page is designed to cover the nuances of FlatBuffers usage, specific to
-Go.
-
-You should also have read the [Building](@ref flatbuffers_guide_building)
-documentation to build `flatc` and should be familiar with
-[Using the schema compiler](@ref flatbuffers_guide_using_schema_compiler) and
-[Writing a schema](@ref flatbuffers_guide_writing_schema).
-
-## FlatBuffers Go library code location
-
-The code for the FlatBuffers Go library can be found at
-`flatbuffers/go`. You can browse the library code on the [FlatBuffers
-GitHub page](https://github.com/google/flatbuffers/tree/master/go).
-
-## Testing the FlatBuffers Go library
-
-The code to test the Go library can be found at `flatbuffers/tests`.
-The test code itself is located in [go_test.go](https://github.com/google/
-flatbuffers/blob/master/tests/go_test.go).
-
-To run the tests, use the [GoTest.sh](https://github.com/google/flatbuffers/
-blob/master/tests/GoTest.sh) shell script.
-
-*Note: The shell script requires [Go](https://golang.org/doc/install) to
-be installed.*
-
-## Using the FlatBuffers Go library
-
-*Note: See [Tutorial](@ref flatbuffers_guide_tutorial) for a more in-depth
-example of how to use FlatBuffers in Go.*
-
-FlatBuffers supports reading and writing binary FlatBuffers in Go.
-
-To use FlatBuffers in your own code, first generate Go classes from your
-schema with the `--go` option to `flatc`. Then you can include both FlatBuffers
-and the generated code to read or write a FlatBuffer.
-
-For example, here is how you would read a FlatBuffer binary file in Go: First,
-include the library and generated code. Then read a FlatBuffer binary file into
-a `[]byte`, which you pass to the `GetRootAsMonster` function:
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.go}
-    import (
-       example "MyGame/Example"
-       flatbuffers "github.com/google/flatbuffers/go"
-
-       io/ioutil
-    )
-
-    buf, err := ioutil.ReadFile("monster.dat")
-    // handle err
-    monster := example.GetRootAsMonster(buf, 0)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Now you can access values like this:
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.go}
-    hp := monster.Hp()
-    pos := monster.Pos(nil)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-
-In some cases it's necessary to modify values in an existing FlatBuffer in place (without creating a copy). For this reason, scalar fields of a Flatbuffer table or struct can be mutated.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.go}
-    monster := example.GetRootAsMonster(buf, 0)
-
-    // Set table field.
-    if ok := monster.MutateHp(10); !ok {
-      panic("failed to mutate Hp")
-    }
-
-    // Set struct field.
-    monster.Pos().MutateZ(4)
-
-    // This mutation will fail because the mana field is not available in
-    // the buffer. It should be set when creating the buffer.
-    if ok := monster.MutateMana(20); !ok {
-      panic("failed to mutate Hp")
-    }
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The term `mutate` is used instead of `set` to indicate that this is a special use case. All mutate functions return a boolean value which is false if the field we're trying to mutate is not available in the buffer.
-
-## Text Parsing
-
-There currently is no support for parsing text (Schema's and JSON) directly
-from Go, though you could use the C++ parser through cgo. Please see the
-C++ documentation for more on text parsing.
-
-<br>
diff --git a/third_party/flatbuffers/docs/source/Grammar.md b/third_party/flatbuffers/docs/source/Grammar.md
deleted file mode 100755
index b6b48c0..0000000
--- a/third_party/flatbuffers/docs/source/Grammar.md
+++ /dev/null
@@ -1,48 +0,0 @@
-Grammar of the schema language    {#flatbuffers_grammar}
-==============================
-
-schema = include*
-         ( namespace\_decl | type\_decl | enum\_decl | root\_decl |
-           file_extension_decl | file_identifier_decl |
-           attribute\_decl | object )*
-
-include = `include` string\_constant `;`
-
-namespace\_decl = `namespace` ident ( `.` ident )* `;`
-
-attribute\_decl = `attribute` string\_constant `;`
-
-type\_decl = ( `table` | `struct` ) ident metadata `{` field\_decl+ `}`
-
-enum\_decl = ( `enum` | `union` ) ident [ `:` type ] metadata `{` commasep(
-enumval\_decl ) `}`
-
-root\_decl = `root_type` ident `;`
-
-field\_decl = ident `:` type [ `=` scalar ] metadata `;`
-
-type = `bool` | `byte` | `ubyte` | `short` | `ushort` | `int` | `uint` |
-`float` | `long` | `ulong` | `double`
- | `string` | `[` type `]` | ident
-
-enumval\_decl = ident [ `=` integer\_constant ]
-
-metadata = [ `(` commasep( ident [ `:` single\_value ] ) `)` ]
-
-scalar = integer\_constant | float\_constant
-
-object = { commasep( ident `:` value ) }
-
-single\_value = scalar | string\_constant
-
-value = single\_value | object | `[` commasep( value ) `]`
-
-commasep(x) = [ x ( `,` x )\* ]
-
-file_extension_decl = `file_extension` string\_constant `;`
-
-file_identifier_decl = `file_identifier` string\_constant `;`
-
-integer\_constant = -?[0-9]+ | `true` | `false`
-
-float\_constant = -?[0-9]+.[0-9]+((e|E)(+|-)?[0-9]+)?
diff --git a/third_party/flatbuffers/docs/source/Internals.md b/third_party/flatbuffers/docs/source/Internals.md
deleted file mode 100755
index de7a07e..0000000
--- a/third_party/flatbuffers/docs/source/Internals.md
+++ /dev/null
@@ -1,439 +0,0 @@
-FlatBuffer Internals    {#flatbuffers_internals}
-====================
-
-This section is entirely optional for the use of FlatBuffers. In normal
-usage, you should never need the information contained herein. If you're
-interested however, it should give you more of an appreciation of why
-FlatBuffers is both efficient and convenient.
-
-### Format components
-
-A FlatBuffer is a binary file and in-memory format consisting mostly of
-scalars of various sizes, all aligned to their own size. Each scalar is
-also always represented in little-endian format, as this corresponds to
-all commonly used CPUs today. FlatBuffers will also work on big-endian
-machines, but will be slightly slower because of additional
-byte-swap intrinsics.
-
-On purpose, the format leaves a lot of details about where exactly
-things live in memory undefined, e.g. fields in a table can have any
-order, and objects to some extent can be stored in many orders. This is
-because the format doesn't need this information to be efficient, and it
-leaves room for optimization and extension (for example, fields can be
-packed in a way that is most compact). Instead, the format is defined in
-terms of offsets and adjacency only. This may mean two different
-implementations may produce different binaries given the same input
-values, and this is perfectly valid.
-
-### Format identification
-
-The format also doesn't contain information for format identification
-and versioning, which is also by design. FlatBuffers is a statically typed
-system, meaning the user of a buffer needs to know what kind of buffer
-it is. FlatBuffers can of course be wrapped inside other containers
-where needed, or you can use its union feature to dynamically identify
-multiple possible sub-objects stored. Additionally, it can be used
-together with the schema parser if full reflective capabilities are
-desired.
-
-Versioning is something that is intrinsically part of the format (the
-optionality / extensibility of fields), so the format itself does not
-need a version number (it's a meta-format, in a sense). We're hoping
-that this format can accommodate all data needed. If format breaking
-changes are ever necessary, it would become a new kind of format rather
-than just a variation.
-
-### Offsets
-
-The most important and generic offset type (see `flatbuffers.h`) is
-`uoffset_t`, which is currently always a `uint32_t`, and is used to
-refer to all tables/unions/strings/vectors (these are never stored
-in-line). 32bit is
-intentional, since we want to keep the format binary compatible between
-32 and 64bit systems, and a 64bit offset would bloat the size for almost
-all uses. A version of this format with 64bit (or 16bit) offsets is easy to set
-when needed. Unsigned means they can only point in one direction, which
-typically is forward (towards a higher memory location). Any backwards
-offsets will be explicitly marked as such.
-
-The format starts with an `uoffset_t` to the root object in the buffer.
-
-We have two kinds of objects, structs and tables.
-
-### Structs
-
-These are the simplest, and as mentioned, intended for simple data that
-benefits from being extra efficient and doesn't need versioning /
-extensibility. They are always stored inline in their parent (a struct,
-table, or vector) for maximum compactness. Structs define a consistent
-memory layout where all components are aligned to their size, and
-structs aligned to their largest scalar member. This is done independent
-of the alignment rules of the underlying compiler to guarantee a cross
-platform compatible layout. This layout is then enforced in the generated
-code.
-
-### Tables
-
-Unlike structs, these are not stored in inline in their parent, but are
-referred to by offset.
-
-They start with an `soffset_t` to a vtable. This is a signed version of
-`uoffset_t`, since vtables may be stored anywhere relative to the object.
-This offset is substracted (not added) from the object start to arrive at
-the vtable start. This offset is followed by all the
-fields as aligned scalars (or offsets). Unlike structs, not all fields
-need to be present. There is no set order and layout.
-
-To be able to access fields regardless of these uncertainties, we go
-through a vtable of offsets. Vtables are shared between any objects that
-happen to have the same vtable values.
-
-The elements of a vtable are all of type `voffset_t`, which is
-a `uint16_t`. The first element is the size of the vtable in bytes,
-including the size element. The second one is the size of the object, in bytes
-(including the vtable offset). This size could be used for streaming, to know
-how many bytes to read to be able to access all *inline* fields of the object.
-The remaining elements are the N offsets, where N is the amount of fields
-declared in the schema when the code that constructed this buffer was
-compiled (thus, the size of the table is N + 2).
-
-All accessor functions in the generated code for tables contain the
-offset into this table as a constant. This offset is checked against the
-first field (the number of elements), to protect against newer code
-reading older data. If this offset is out of range, or the vtable entry
-is 0, that means the field is not present in this object, and the
-default value is return. Otherwise, the entry is used as offset to the
-field to be read.
-
-### Strings and Vectors
-
-Strings are simply a vector of bytes, and are always
-null-terminated. Vectors are stored as contiguous aligned scalar
-elements prefixed by a 32bit element count (not including any
-null termination). Neither is stored inline in their parent, but are referred to
-by offset.
-
-### Construction
-
-The current implementation constructs these buffers backwards (starting
-at the highest memory address of the buffer), since
-that significantly reduces the amount of bookkeeping and simplifies the
-construction API.
-
-### Code example
-
-Here's an example of the code that gets generated for the `samples/monster.fbs`.
-What follows is the entire file, broken up by comments:
-
-    // automatically generated, do not modify
-
-    #include "flatbuffers/flatbuffers.h"
-
-    namespace MyGame {
-    namespace Sample {
-
-Nested namespace support.
-
-    enum {
-      Color_Red = 0,
-      Color_Green = 1,
-      Color_Blue = 2,
-    };
-
-    inline const char **EnumNamesColor() {
-      static const char *names[] = { "Red", "Green", "Blue", nullptr };
-      return names;
-    }
-
-    inline const char *EnumNameColor(int e) { return EnumNamesColor()[e]; }
-
-Enums and convenient reverse lookup.
-
-    enum {
-      Any_NONE = 0,
-      Any_Monster = 1,
-    };
-
-    inline const char **EnumNamesAny() {
-      static const char *names[] = { "NONE", "Monster", nullptr };
-      return names;
-    }
-
-    inline const char *EnumNameAny(int e) { return EnumNamesAny()[e]; }
-
-Unions share a lot with enums.
-
-    struct Vec3;
-    struct Monster;
-
-Predeclare all data types since circular references between types are allowed
-(circular references between object are not, though).
-
-    MANUALLY_ALIGNED_STRUCT(4) Vec3 {
-     private:
-      float x_;
-      float y_;
-      float z_;
-
-     public:
-      Vec3(float x, float y, float z)
-        : x_(flatbuffers::EndianScalar(x)), y_(flatbuffers::EndianScalar(y)), z_(flatbuffers::EndianScalar(z)) {}
-
-      float x() const { return flatbuffers::EndianScalar(x_); }
-      float y() const { return flatbuffers::EndianScalar(y_); }
-      float z() const { return flatbuffers::EndianScalar(z_); }
-    };
-    STRUCT_END(Vec3, 12);
-
-These ugly macros do a couple of things: they turn off any padding the compiler
-might normally do, since we add padding manually (though none in this example),
-and they enforce alignment chosen by FlatBuffers. This ensures the layout of
-this struct will look the same regardless of compiler and platform. Note that
-the fields are private: this is because these store little endian scalars
-regardless of platform (since this is part of the serialized data).
-`EndianScalar` then converts back and forth, which is a no-op on all current
-mobile and desktop platforms, and a single machine instruction on the few
-remaining big endian platforms.
-
-    struct Monster : private flatbuffers::Table {
-      const Vec3 *pos() const { return GetStruct<const Vec3 *>(4); }
-      int16_t mana() const { return GetField<int16_t>(6, 150); }
-      int16_t hp() const { return GetField<int16_t>(8, 100); }
-      const flatbuffers::String *name() const { return GetPointer<const flatbuffers::String *>(10); }
-      const flatbuffers::Vector<uint8_t> *inventory() const { return GetPointer<const flatbuffers::Vector<uint8_t> *>(14); }
-      int8_t color() const { return GetField<int8_t>(16, 2); }
-    };
-
-Tables are a bit more complicated. A table accessor struct is used to point at
-the serialized data for a table, which always starts with an offset to its
-vtable. It derives from `Table`, which contains the `GetField` helper functions.
-GetField takes a vtable offset, and a default value. It will look in the vtable
-at that offset. If the offset is out of bounds (data from an older version) or
-the vtable entry is 0, the field is not present and the default is returned.
-Otherwise, it uses the entry as an offset into the table to locate the field.
-
-    struct MonsterBuilder {
-      flatbuffers::FlatBufferBuilder &fbb_;
-      flatbuffers::uoffset_t start_;
-      void add_pos(const Vec3 *pos) { fbb_.AddStruct(4, pos); }
-      void add_mana(int16_t mana) { fbb_.AddElement<int16_t>(6, mana, 150); }
-      void add_hp(int16_t hp) { fbb_.AddElement<int16_t>(8, hp, 100); }
-      void add_name(flatbuffers::Offset<flatbuffers::String> name) { fbb_.AddOffset(10, name); }
-      void add_inventory(flatbuffers::Offset<flatbuffers::Vector<uint8_t>> inventory) { fbb_.AddOffset(14, inventory); }
-      void add_color(int8_t color) { fbb_.AddElement<int8_t>(16, color, 2); }
-      MonsterBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
-      flatbuffers::Offset<Monster> Finish() { return flatbuffers::Offset<Monster>(fbb_.EndTable(start_, 7)); }
-    };
-
-`MonsterBuilder` is the base helper struct to construct a table using a
-`FlatBufferBuilder`. You can add the fields in any order, and the `Finish`
-call will ensure the correct vtable gets generated.
-
-    inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder &_fbb,
-                                                      const Vec3 *pos, int16_t mana,
-                                                      int16_t hp,
-                                                      flatbuffers::Offset<flatbuffers::String> name,
-                                                      flatbuffers::Offset<flatbuffers::Vector<uint8_t>> inventory,
-                                                      int8_t color) {
-      MonsterBuilder builder_(_fbb);
-      builder_.add_inventory(inventory);
-      builder_.add_name(name);
-      builder_.add_pos(pos);
-      builder_.add_hp(hp);
-      builder_.add_mana(mana);
-      builder_.add_color(color);
-      return builder_.Finish();
-    }
-
-`CreateMonster` is a convenience function that calls all functions in
-`MonsterBuilder` above for you. Note that if you pass values which are
-defaults as arguments, it will not actually construct that field, so
-you can probably use this function instead of the builder class in
-almost all cases.
-
-    inline const Monster *GetMonster(const void *buf) { return flatbuffers::GetRoot<Monster>(buf); }
-
-This function is only generated for the root table type, to be able to
-start traversing a FlatBuffer from a raw buffer pointer.
-
-    }; // namespace MyGame
-    }; // namespace Sample
-
-### Encoding example.
-
-Below is a sample encoding for the following JSON corresponding to the above
-schema:
-
-    { pos: { x: 1, y: 2, z: 3 }, name: "fred", hp: 50 }
-
-Resulting in this binary buffer:
-
-    // Start of the buffer:
-    uint32_t 20  // Offset to the root table.
-
-    // Start of the vtable. Not shared in this example, but could be:
-    uint16_t 16 // Size of table, starting from here.
-    uint16_t 22 // Size of object inline data.
-    uint16_t 4, 0, 20, 16, 0, 0  // Offsets to fields from start of (root) table, 0 for not present.
-
-    // Start of the root table:
-    int32_t 16     // Offset to vtable used (default negative direction)
-    float 1, 2, 3  // the Vec3 struct, inline.
-    uint32_t 8     // Offset to the name string.
-    int16_t 50     // hp field.
-    int16_t 0      // Padding for alignment.
-
-    // Start of name string:
-    uint32_t 4  // Length of string.
-    int8_t 'f', 'r', 'e', 'd', 0, 0, 0, 0  // Text + 0 termination + padding.
-
-Note that this not the only possible encoding, since the writer has some
-flexibility in which of the children of root object to write first (though in
-this case there's only one string), and what order to write the fields in.
-Different orders may also cause different alignments to happen.
-
-# FlexBuffers
-
-The [schema-less](@ref flexbuffers) version of FlatBuffers have their
-own encoding, detailed here.
-
-It shares many properties mentioned above, in that all data is accessed
-over offsets, all scalars are aligned to their own size, and
-all data is always stored in little endian format.
-
-One difference is that FlexBuffers are built front to back, so children are
-stored before parents, and the root of the data starts at the last byte.
-
-Another difference is that scalar data is stored with a variable number of bits
-(8/16/32/64). The current width is always determined by the *parent*, i.e. if
-the scalar sits in a vector, the vector determines the bit width for all
-elements at once. Selecting the minimum bit width for a particular vector is
-something the encoder does automatically and thus is typically of no concern
-to the user, though being aware of this feature (and not sticking a double in
-the same vector as a bunch of byte sized elements) is helpful for efficiency.
-
-Unlike FlatBuffers there is only one kind of offset, and that is an unsigned
-integer indicating the number of bytes in a negative direction from the address
-of itself (where the offset is stored).
-
-### Vectors
-
-The representation of the vector is at the core of how FlexBuffers works (since
-maps are really just a combination of 2 vectors), so it is worth starting there.
-
-As mentioned, a vector is governed by a single bit width (supplied by its
-parent). This includes the size field. For example, a vector that stores the
-integer values `1, 2, 3` is encoded as follows:
-
-    uint8_t 3, 1, 2, 3, 4, 4, 4
-
-The first `3` is the size field, and is placed before the vector (an offset
-from the parent to this vector points to the first element, not the size
-field, so the size field is effectively at index -1).
-Since this is an untyped vector `SL_VECTOR`, it is followed by 3 type
-bytes (one per element of the vector), which are always following the vector,
-and are always a uint8_t even if the vector is made up of bigger scalars.
-
-### Types
-
-A type byte is made up of 2 components (see flexbuffers.h for exact values):
-
-* 2 lower bits representing the bit-width of the child (8, 16, 32, 64).
-  This is only used if the child is accessed over an offset, such as a child
-  vector. It is ignored for inline types.
-* 6 bits representing the actual type (see flexbuffers.h).
-
-Thus, in this example `4` means 8 bit child (value 0, unused, since the value is
-in-line), type `SL_INT` (value 1).
-
-### Typed Vectors
-
-These are like the Vectors above, but omit the type bytes. The type is instead
-determined by the vector type supplied by the parent. Typed vectors are only
-available for a subset of types for which these savings can be significant,
-namely inline signed/unsigned integers (`TYPE_VECTOR_INT` / `TYPE_VECTOR_UINT`),
-floats (`TYPE_VECTOR_FLOAT`), and keys (`TYPE_VECTOR_KEY`, see below).
-
-Additionally, for scalars, there are fixed length vectors of sizes 2 / 3 / 4
-that don't store the size (`TYPE_VECTOR_INT2` etc.), for an additional savings
-in space when storing common vector or color data.
-
-### Scalars
-
-FlexBuffers supports integers (`TYPE_INT` and `TYPE_UINT`) and floats
-(`TYPE_FLOAT`), available in the bit-widths mentioned above. They can be stored
-both inline and over an offset (`TYPE_INDIRECT_*`).
-
-The offset version is useful to encode costly 64bit (or even 32bit) quantities
-into vectors / maps of smaller sizes, and to share / repeat a value multiple
-times.
-
-### Blobs, Strings and Keys.
-
-A blob (`TYPE_BLOB`) is encoded similar to a vector, with one difference: the
-elements are always `uint8_t`. The parent bit width only determines the width of
-the size field, allowing blobs to be large without the elements being large.
-
-Strings (`TYPE_STRING`) are similar to blobs, except they have an additional 0
-termination byte for convenience, and they MUST be UTF-8 encoded (since an
-accessor in a language that does not support pointers to UTF-8 data may have to
-convert them to a native string type).
-
-A "Key" (`TYPE_KEY`) is similar to a string, but doesn't store the size
-field. They're so named because they are used with maps, which don't care
-for the size, and can thus be even more compact. Unlike strings, keys cannot
-contain bytes of value 0 as part of their data (size can only be determined by
-`strlen`), so while you can use them outside the context of maps if you so
-desire, you're usually better off with strings.
-
-### Maps
-
-A map (`TYPE_MAP`) is like an (untyped) vector, but with 2 prefixes before the
-size field:
-
-| index | field                                                        |
-| ----: | :----------------------------------------------------------- |
-| -3    | An offset to the keys vector (may be shared between tables). |
-| -2    | Byte width of the keys vector.                               |
-| -1    | Size (from here on it is compatible with `TYPE_VECTOR`)      |
-| 0     | Elements.                                                    |
-| Size  | Types.                                                       |
-
-Since a map is otherwise the same as a vector, it can be iterated like
-a vector (which is probably faster than lookup by key).
-
-The keys vector is a typed vector of keys. Both the keys and corresponding
-values *have* to be stored in sorted order (as determined by `strcmp`), such
-that lookups can be made using binary search.
-
-The reason the key vector is a seperate structure from the value vector is
-such that it can be shared between multiple value vectors, and also to
-allow it to be treated as its own indivual vector in code.
-
-An example map { foo: 13, bar: 14 } would be encoded as:
-
-    0 : uint8_t 'f', 'o', 'o', 0
-    4 : uint8_t 'b', 'a', 'r', 0
-    8 : uint8_t 2      // key vector of size 2
-    // key vector offset points here
-    9 : uint8_t 9, 6   // offsets to foo_key and bar_key
-    11: uint8_t 3, 1   // offset to key vector, and its byte width
-    13: uint8_t 2      // value vector of size
-    // value vector offset points here
-    14: uint8_t 13, 14 // values
-    16: uint8_t 4, 4   // types
-
-### The root
-
-As mentioned, the root starts at the end of the buffer.
-The last uint8_t is the width in bytes of the root (normally the parent
-determines the width, but the root has no parent). The uint8_t before this is
-the type of the root, and the bytes before that are the root value (of the
-number of bytes specified by the last byte).
-
-So for example, the integer value `13` as root would be:
-
-    uint8_t 13, 4, 1    // Value, type, root byte width.
-
-
-<br>
diff --git a/third_party/flatbuffers/docs/source/JavaCsharpUsage.md b/third_party/flatbuffers/docs/source/JavaCsharpUsage.md
deleted file mode 100755
index cc58f85..0000000
--- a/third_party/flatbuffers/docs/source/JavaCsharpUsage.md
+++ /dev/null
@@ -1,171 +0,0 @@
-Use in Java/C#    {#flatbuffers_guide_use_java_c-sharp}
-==============
-
-## Before you get started
-
-Before diving into the FlatBuffers usage in Java or C#, it should be noted that
-the [Tutorial](@ref flatbuffers_guide_tutorial) page has a complete guide to
-general FlatBuffers usage in all of the supported languages (including both Java
-and C#). This page is designed to cover the nuances of FlatBuffers usage,
-specific to Java and C#.
-
-You should also have read the [Building](@ref flatbuffers_guide_building)
-documentation to build `flatc` and should be familiar with
-[Using the schema compiler](@ref flatbuffers_guide_using_schema_compiler) and
-[Writing a schema](@ref flatbuffers_guide_writing_schema).
-
-## FlatBuffers Java and C-sharp code location
-
-#### Java
-
-The code for the FlatBuffers Java library can be found at
-`flatbuffers/java/com/google/flatbuffers`. You can browse the library on the
-[FlatBuffers GitHub page](https://github.com/google/flatbuffers/tree/master/
-java/com/google/flatbuffers).
-
-#### C-sharp
-
-The code for the FlatBuffers C# library can be found at
-`flatbuffers/net/FlatBuffers`. You can browse the library on the
-[FlatBuffers GitHub page](https://github.com/google/flatbuffers/tree/master/net/
-FlatBuffers).
-
-## Testing the FlatBuffers Java and C-sharp libraries
-
-The code to test the libraries can be found at `flatbuffers/tests`.
-
-#### Java
-
-The test code for Java is located in [JavaTest.java](https://github.com/google
-/flatbuffers/blob/master/tests/JavaTest.java).
-
-To run the tests, use either [JavaTest.sh](https://github.com/google/
-flatbuffers/blob/master/tests/JavaTest.sh) or [JavaTest.bat](https://github.com/
-google/flatbuffers/blob/master/tests/JavaTest.bat), depending on your operating
-system.
-
-*Note: These scripts require that [Java](https://www.oracle.com/java/index.html)
-is installed.*
-
-#### C-sharp
-
-The test code for C# is located in the [FlatBuffers.Test](https://github.com/
-google/flatbuffers/tree/master/tests/FlatBuffers.Test) subfolder. To run the
-tests, open `FlatBuffers.Test.csproj` in [Visual Studio](
-https://www.visualstudio.com), and compile/run the project.
-
-Optionally, you can run this using [Mono](http://www.mono-project.com/) instead.
-Once you have installed `Mono`, you can run the tests from the command line
-by running the following commands from inside the `FlatBuffers.Test` folder:
-
-~~~{.sh}
-  mcs *.cs ../MyGame/Example/*.cs ../../net/FlatBuffers/*.cs
-  mono Assert.exe
-~~~
-
-## Using the FlatBuffers Java (and C#) library
-
-*Note: See [Tutorial](@ref flatbuffers_guide_tutorial) for a more in-depth
-example of how to use FlatBuffers in Java or C#.*
-
-FlatBuffers supports reading and writing binary FlatBuffers in Java and C#.
-
-To use FlatBuffers in your own code, first generate Java classes from your
-schema with the `--java` option to `flatc`. (Or for C# with `--csharp`).
-Then you can include both FlatBuffers and the generated code to read
-or write a FlatBuffer.
-
-For example, here is how you would read a FlatBuffer binary file in Java:
-First, import the library and generated code. Then, you read a FlatBuffer binary
-file into a `byte[]`.  You then turn the `byte[]` into a `ByteBuffer`, which you
-pass to the `getRootAsMyRootType` function:
-
-*Note: The code here is written from the perspective of Java. Code for both
-languages is both generated and used in nearly the exact same way, with only
-minor differences. These differences are
-[explained in a section below](#differences_in_c-sharp).*
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.java}
-    import MyGame.Example.*;
-    import com.google.flatbuffers.FlatBufferBuilder;
-
-    // This snippet ignores exceptions for brevity.
-    File file = new File("monsterdata_test.mon");
-    RandomAccessFile f = new RandomAccessFile(file, "r");
-    byte[] data = new byte[(int)f.length()];
-    f.readFully(data);
-    f.close();
-
-    ByteBuffer bb = ByteBuffer.wrap(data);
-    Monster monster = Monster.getRootAsMonster(bb);
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Now you can access the data from the `Monster monster`:
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.java}
-    short hp = monster.hp();
-    Vec3 pos = monster.pos();
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-<a name="differences_in_c-sharp">
-#### Differences in C-sharp
-</a>
-
-C# code works almost identically to Java, with only a few minor differences.
-You can see an example of C# code in
-`tests/FlatBuffers.Test/FlatBuffersExampleTests.cs` or
-`samples/SampleBinary.cs`.
-
-First of all, naming follows standard C# style with `PascalCasing` identifiers,
-e.g. `GetRootAsMyRootType`. Also, values (except vectors and unions) are
-available as properties instead of parameterless accessor methods as in Java.
-The performance-enhancing methods to which you can pass an already created
-object are prefixed with `Get`, e.g.:
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cs}
-    // property
-    var pos = monster.Pos;
-
-    // method filling a preconstructed object
-    var preconstructedPos = new Vec3();
-    monster.GetPos(preconstructedPos);
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-## Storing dictionaries in a FlatBuffer
-
-FlatBuffers doesn't support dictionaries natively, but there is support to
-emulate their behavior with vectors and binary search, which means you
-can have fast lookups directly from a FlatBuffer without having to unpack
-your data into a `Dictionary` or similar.
-
-To use it:
--   Designate one of the fields in a table as they "key" field. You do this
-    by setting the `key` attribute on this field, e.g.
-    `name:string (key)`.
-    You may only have one key field, and it must be of string or scalar type.
--   Write out tables of this type as usual, collect their offsets in an
-    array.
--   Instead of calling standard generated method,
-    e.g.: `Monster.createTestarrayoftablesVector`,
-    call `CreateMySortedVectorOfTables` in C# or
-    `createSortedVectorOfTables` (from the `FlatBufferBuilder` object) in Java,
-    which will first sort all offsets such that the tables they refer to
-    are sorted by the key field, then serialize it.
--   Now when you're accessing the FlatBuffer, you can use `LookupByKey`
-    to access elements of the vector, e.g.:
-    `Monster.lookupByKey(tablesVectorOffset, "Frodo", dataBuffer)`,
-    which returns an object of the corresponding table type,
-    or `null` if not found.
-    `LookupByKey` performs a binary search, so should have a similar speed to
-    `Dictionary`, though may be faster because of better caching. `LookupByKey`
-    only works if the vector has been sorted, it will likely not find elements
-    if it hasn't been sorted.
-
-## Text parsing
-
-There currently is no support for parsing text (Schema's and JSON) directly
-from Java or C#, though you could use the C++ parser through native call
-interfaces available to each language. Please see the
-C++ documentation for more on text parsing.
-
-<br>
diff --git a/third_party/flatbuffers/docs/source/JavaScriptUsage.md b/third_party/flatbuffers/docs/source/JavaScriptUsage.md
deleted file mode 100755
index c321c95..0000000
--- a/third_party/flatbuffers/docs/source/JavaScriptUsage.md
+++ /dev/null
@@ -1,105 +0,0 @@
-Use in JavaScript    {#flatbuffers_guide_use_javascript}
-=================
-
-## Before you get started
-
-Before diving into the FlatBuffers usage in JavaScript, it should be noted that
-the [Tutorial](@ref flatbuffers_guide_tutorial) page has a complete guide to
-general FlatBuffers usage in all of the supported languages
-(including JavaScript). This page is specifically designed to cover the nuances
-of FlatBuffers usage in JavaScript.
-
-You should also have read the [Building](@ref flatbuffers_guide_building)
-documentation to build `flatc` and should be familiar with
-[Using the schema compiler](@ref flatbuffers_guide_using_schema_compiler) and
-[Writing a schema](@ref flatbuffers_guide_writing_schema).
-
-## FlatBuffers JavaScript library code location
-
-The code for the FlatBuffers JavaScript library can be found at
-`flatbuffers/js`. You can browse the library code on the [FlatBuffers
-GitHub page](https://github.com/google/flatbuffers/tree/master/js).
-
-## Testing the FlatBuffers JavaScript library
-
-The code to test the JavaScript library can be found at `flatbuffers/tests`.
-The test code itself is located in [JavaScriptTest.js](https://github.com/
-google/flatbuffers/blob/master/tests/JavaScriptTest.js).
-
-To run the tests, use the [JavaScriptTest.sh](https://github.com/google/
-flatbuffers/blob/master/tests/JavaScriptTest.sh) shell script.
-
-*Note: The JavaScript test file requires [Node.js](https://nodejs.org/en/).*
-
-## Using the FlatBuffers JavaScript libary
-
-*Note: See [Tutorial](@ref flatbuffers_guide_tutorial) for a more in-depth
-example of how to use FlatBuffers in JavaScript.*
-
-FlatBuffers supports both reading and writing FlatBuffers in JavaScript.
-
-To use FlatBuffers in your own code, first generate JavaScript classes from your
-schema with the `--js` option to `flatc`. Then you can include both FlatBuffers
-and the generated code to read or write a FlatBuffer.
-
-For example, here is how you would read a FlatBuffer binary file in Javascript:
-First, include the library and generated code. Then read the file into an
-`Uint8Array`. Make a `flatbuffers.ByteBuffer` out of the `Uint8Array`, and pass
-the ByteBuffer to the `getRootAsMonster` function.
-
-*Note: Both JavaScript module loaders (e.g. Node.js) and browser-based
-HTML/JavaScript code segments are shown below in the following snippet:*
-
-~~~{.js}
-  // Note: These require functions are specific to JavaScript module loaders
-  //       (namely, Node.js). See below for a browser-based example.
-  var fs = require('fs');
-
-  var flatbuffers = require('../flatbuffers').flatbuffers;
-  var MyGame = require('./monster_generated').MyGame;
-
-  var data = new Uint8Array(fs.readFileSync('monster.dat'));
-  var buf = new flatbuffers.ByteBuffer(data);
-
-  var monster = MyGame.Example.Monster.getRootAsMonster(buf);
-
-  //--------------------------------------------------------------------------//
-
-  // Note: This code is specific to browser-based HTML/JavaScript. See above
-  //       for the code using JavaScript module loaders (e.g. Node.js).
-  <script src="../js/flatbuffers.js"></script>
-  <script src="monster_generated.js"></script>
-  <script>
-    function readFile() {
-      var reader = new FileReader(); // This example uses the HTML5 FileReader.
-      var file = document.getElementById(
-          'file_input').files[0]; // "monster.dat" from the HTML <input> field.
-
-      reader.onload = function() { // Executes after the file is read.
-        var data = new Uint8Array(reader.result);
-
-        var buf = new flatbuffers.ByteBuffer(data);
-
-        var monster = MyGame.Example.Monster.getRootAsMonster(buf);
-      }
-
-      reader.readAsArrayBuffer(file);
-    }
-  </script>
-
-  // Open the HTML file in a browser and select "monster.dat" from with the
-  // <input> field.
-  <input type="file" id="file_input" onchange="readFile();">
-~~~
-
-Now you can access values like this:
-
-~~~{.js}
-  var hp = monster.hp();
-  var pos = monster.pos();
-~~~
-
-## Text parsing FlatBuffers in JavaScript
-
-There currently is no support for parsing text (Schema's and JSON) directly
-from JavaScript.
diff --git a/third_party/flatbuffers/docs/source/PHPUsage.md b/third_party/flatbuffers/docs/source/PHPUsage.md
deleted file mode 100644
index cdff449..0000000
--- a/third_party/flatbuffers/docs/source/PHPUsage.md
+++ /dev/null
@@ -1,89 +0,0 @@
-Use in PHP    {#flatbuffers_guide_use_php}
-==========
-
-## Before you get started
-
-Before diving into the FlatBuffers usage in PHP, it should be noted that
-the [Tutorial](@ref flatbuffers_guide_tutorial) page has a complete guide to
-general FlatBuffers usage in all of the supported languages
-(including PHP). This page is specifically designed to cover the nuances of
-FlatBuffers usage in PHP.
-
-You should also have read the [Building](@ref flatbuffers_guide_building)
-documentation to build `flatc` and should be familiar with
-[Using the schema compiler](@ref flatbuffers_guide_using_schema_compiler) and
-[Writing a schema](@ref flatbuffers_guide_writing_schema).
-
-## FlatBuffers PHP library code location
-
-The code for FlatBuffers PHP library can be found at `flatbuffers/php`. You
-can browse the library code on the [FlatBuffers
-GitHub page](https://github.com/google/flatbuffers/tree/master/php).
-
-## Testing the FlatBuffers JavaScript library
-
-The code to test the PHP library can be found at `flatbuffers/tests`.
-The test code itself is located in [phpTest.php](https://github.com/google/
-flatbuffers/blob/master/tests/phpTest.php).
-
-You can run the test with `php phpTest.php` from the command line.
-
-*Note: The PHP test file requires
-[PHP](http://php.net/manual/en/install.php) to be installed.*
-
-## Using theFlatBuffers PHP library
-
-*Note: See [Tutorial](@ref flatbuffers_guide_tutorial) for a more in-depth
-example of how to use FlatBuffers in PHP.*
-
-FlatBuffers supports both reading and writing FlatBuffers in PHP.
-
-To use FlatBuffers in your own code, first generate PHP classes from your schema
-with the `--php` option to `flatc`. Then you can include both FlatBuffers and
-the generated code to read or write a FlatBuffer.
-
-For example, here is how you would read a FlatBuffer binary file in PHP:
-First, include the library and generated code (using the PSR `autoload`
-function). Then you can read a FlatBuffer binary file, which you
-pass the contents of to the `GetRootAsMonster` function:
-
-~~~{.php}
-  // It is recommended that your use PSR autoload when using FlatBuffers in PHP.
-  // Here is an example:
-  function __autoload($class_name) {
-    // The last segment of the class name matches the file name.
-    $class = substr($class_name, strrpos($class_name, "\\") + 1);
-    $root_dir = join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)))); // `flatbuffers` root.
-
-    // Contains the `*.php` files for the FlatBuffers library and the `flatc` generated files.
-    $paths = array(join(DIRECTORY_SEPARATOR, array($root_dir, "php")),
-                   join(DIRECTORY_SEPARATOR, array($root_dir, "tests", "MyGame", "Example")));
-    foreach ($paths as $path) {
-      $file = join(DIRECTORY_SEPARATOR, array($path, $class . ".php"));
-      if (file_exists($file)) {
-        require($file);
-        break;
-    }
-  }
-
-  // Read the contents of the FlatBuffer binary file.
-  $filename = "monster.dat";
-  $handle = fopen($filename, "rb");
-  $contents = $fread($handle, filesize($filename));
-  fclose($handle);
-
-  // Pass the contents to `GetRootAsMonster`.
-  $monster = \MyGame\Example\Monster::GetRootAsMonster($contents);
-~~~
-
-Now you can access values like this:
-
-~~~{.php}
-  $hp = $monster->GetHp();
-  $pos = $monster->GetPos();
-~~~
-
-## Text Parsing
-
-There currently is no support for parsing text (Schema's and JSON) directly
-from PHP.
diff --git a/third_party/flatbuffers/docs/source/PythonUsage.md b/third_party/flatbuffers/docs/source/PythonUsage.md
deleted file mode 100755
index 2a0cdde..0000000
--- a/third_party/flatbuffers/docs/source/PythonUsage.md
+++ /dev/null
@@ -1,73 +0,0 @@
-Use in Python    {#flatbuffers_guide_use_python}
-=============
-
-## Before you get started
-
-Before diving into the FlatBuffers usage in Python, it should be noted that the
-[Tutorial](@ref flatbuffers_guide_tutorial) page has a complete guide to general
-FlatBuffers usage in all of the supported languages (including Python). This
-page is designed to cover the nuances of FlatBuffers usage, specific to
-Python.
-
-You should also have read the [Building](@ref flatbuffers_guide_building)
-documentation to build `flatc` and should be familiar with
-[Using the schema compiler](@ref flatbuffers_guide_using_schema_compiler) and
-[Writing a schema](@ref flatbuffers_guide_writing_schema).
-
-## FlatBuffers Python library code location
-
-The code for the FlatBuffers Python library can be found at
-`flatbuffers/python/flatbuffers`. You can browse the library code on the
-[FlatBuffers GitHub page](https://github.com/google/flatbuffers/tree/master/
-python).
-
-## Testing the FlatBuffers Python library
-
-The code to test the Python library can be found at `flatbuffers/tests`.
-The test code itself is located in [py_test.py](https://github.com/google/
-flatbuffers/blob/master/tests/py_test.py).
-
-To run the tests, use the [PythonTest.sh](https://github.com/google/flatbuffers/
-blob/master/tests/PythonTest.sh) shell script.
-
-*Note: This script requires [python](https://www.python.org/) to be
-installed.*
-
-## Using the FlatBuffers Python library
-
-*Note: See [Tutorial](@ref flatbuffers_guide_tutorial) for a more in-depth
-example of how to use FlatBuffers in Python.*
-
-There is support for both reading and writing FlatBuffers in Python.
-
-To use FlatBuffers in your own code, first generate Python classes from your
-schema with the `--python` option to `flatc`. Then you can include both
-FlatBuffers and the generated code to read or write a FlatBuffer.
-
-For example, here is how you would read a FlatBuffer binary file in Python:
-First, import the library and the generated code. Then read a FlatBuffer binary
-file into a `bytearray`, which you pass to the `GetRootAsMonster` function:
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.py}
-    import MyGame.Example as example
-    import flatbuffers
-
-    buf = open('monster.dat', 'rb').read()
-    buf = bytearray(buf)
-    monster = example.GetRootAsMonster(buf, 0)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Now you can access values like this:
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.py}
-    hp = monster.Hp()
-    pos = monster.Pos()
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-## Text Parsing
-
-There currently is no support for parsing text (Schema's and JSON) directly
-from Python, though you could use the C++ parser through SWIG or ctypes. Please
-see the C++ documentation for more on text parsing.
-
-<br>
diff --git a/third_party/flatbuffers/docs/source/README_TO_GENERATE_DOCS.md b/third_party/flatbuffers/docs/source/README_TO_GENERATE_DOCS.md
deleted file mode 100644
index 5df0b6a..0000000
--- a/third_party/flatbuffers/docs/source/README_TO_GENERATE_DOCS.md
+++ /dev/null
@@ -1,32 +0,0 @@
-## Prerequisites
-
-To generate the docs for FlatBuffers from the source files, you
-will first need to install two programs.
-
-1. You will need to install `doxygen`. See
-   [Download Doxygen](http://www.stack.nl/~dimitri/doxygen/download.html).
-
-2. You will need to install `doxypypy` to format python comments appropriately.
-   Install it from [here](https://github.com/Feneric/doxypypy).
-
-*Note: You will need both `doxygen` and `doxypypy` to be in your
-[PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable.*
-
-After you have both of those files installed and in your path, you need to
-set up the `py_filter` to invoke `doxypypy` from `doxygen`.
-
-Follow the steps
-[here](https://github.com/Feneric/doxypypy#invoking-doxypypy-from-doxygen).
-
-## Generating Docs
-
-Run the following commands to generate the docs:
-
-`cd flatbuffers/docs/source`
-`doxygen`
-
-The output is placed in `flatbuffers/docs/html`.
-
-*Note: The Go API Reference code must be generated ahead of time. For
-instructions on how to regenerated this file, please read the comments
-in `GoApi.md`.*
diff --git a/third_party/flatbuffers/docs/source/Schemas.md b/third_party/flatbuffers/docs/source/Schemas.md
deleted file mode 100755
index c4a9421..0000000
--- a/third_party/flatbuffers/docs/source/Schemas.md
+++ /dev/null
@@ -1,545 +0,0 @@
-Writing a schema    {#flatbuffers_guide_writing_schema}
-================
-
-The syntax of the schema language (aka IDL, [Interface Definition Language][])
-should look quite familiar to users of any of the C family of
-languages, and also to users of other IDLs. Let's look at an example
-first:
-
-    // example IDL file
-
-    namespace MyGame;
-
-    attribute "priority";
-
-    enum Color : byte { Red = 1, Green, Blue }
-
-    union Any { Monster, Weapon, Pickup }
-
-    struct Vec3 {
-      x:float;
-      y:float;
-      z:float;
-    }
-
-    table Monster {
-      pos:Vec3;
-      mana:short = 150;
-      hp:short = 100;
-      name:string;
-      friendly:bool = false (deprecated, priority: 1);
-      inventory:[ubyte];
-      color:Color = Blue;
-      test:Any;
-    }
-
-    root_type Monster;
-
-(`Weapon` & `Pickup` not defined as part of this example).
-
-### Tables
-
-Tables are the main way of defining objects in FlatBuffers, and consist
-of a name (here `Monster`) and a list of fields. Each field has a name,
-a type, and optionally a default value (if omitted, it defaults to `0` /
-`NULL`).
-
-Each field is optional: It does not have to appear in the wire
-representation, and you can choose to omit fields for each individual
-object. As a result, you have the flexibility to add fields without fear of
-bloating your data. This design is also FlatBuffer's mechanism for forward
-and backwards compatibility. Note that:
-
--   You can add new fields in the schema ONLY at the end of a table
-    definition. Older data will still
-    read correctly, and give you the default value when read. Older code
-    will simply ignore the new field.
-    If you want to have flexibility to use any order for fields in your
-    schema, you can manually assign ids (much like Protocol Buffers),
-    see the `id` attribute below.
-
--   You cannot delete fields you don't use anymore from the schema,
-    but you can simply
-    stop writing them into your data for almost the same effect.
-    Additionally you can mark them as `deprecated` as in the example
-    above, which will prevent the generation of accessors in the
-    generated C++, as a way to enforce the field not being used any more.
-    (careful: this may break code!).
-
--   You may change field names and table names, if you're ok with your
-    code breaking until you've renamed them there too.
-
-See "Schema evolution examples" below for more on this
-topic.
-
-### Structs
-
-Similar to a table, only now none of the fields are optional (so no defaults
-either), and fields may not be added or be deprecated. Structs may only contain
-scalars or other structs. Use this for
-simple objects where you are very sure no changes will ever be made
-(as quite clear in the example `Vec3`). Structs use less memory than
-tables and are even faster to access (they are always stored in-line in their
-parent object, and use no virtual table).
-
-### Types
-
-Built-in scalar types are:
-
--   8 bit: `byte`, `ubyte`, `bool`
-
--   16 bit: `short`, `ushort`
-
--   32 bit: `int`, `uint`, `float`
-
--   64 bit: `long`, `ulong`, `double`
-
-Built-in non-scalar types:
-
--   Vector of any other type (denoted with `[type]`). Nesting vectors
-    is not supported, instead you can wrap the inner vector in a table.
-
--   `string`, which may only hold UTF-8 or 7-bit ASCII. For other text encodings
-    or general binary data use vectors (`[byte]` or `[ubyte]`) instead.
-
--   References to other tables or structs, enums or unions (see
-    below).
-
-You can't change types of fields once they're used, with the exception
-of same-size data where a `reinterpret_cast` would give you a desirable result,
-e.g. you could change a `uint` to an `int` if no values in current data use the
-high bit yet.
-
-### (Default) Values
-
-Values are a sequence of digits. Values may be optionally followed by a decimal
-point (`.`) and more digits, for float constants, or optionally prefixed by
-a `-`. Floats may also be in scientific notation; optionally ending with an `e`
-or `E`, followed by a `+` or `-` and more digits.
-
-Only scalar values can have defaults, non-scalar (string/vector/table) fields
-default to `NULL` when not present.
-
-You generally do not want to change default values after they're initially
-defined. Fields that have the default value are not actually stored in the
-serialized data (see also Gotchas below) but are generated in code,
-so when you change the default, you'd
-now get a different value than from code generated from an older version of
-the schema. There are situations, however, where this may be
-desirable, especially if you can ensure a simultaneous rebuild of
-all code.
-
-### Enums
-
-Define a sequence of named constants, each with a given value, or
-increasing by one from the previous one. The default first value
-is `0`. As you can see in the enum declaration, you specify the underlying
-integral type of the enum with `:` (in this case `byte`), which then determines
-the type of any fields declared with this enum type.
-
-Typically, enum values should only ever be added, never removed (there is no
-deprecation for enums). This requires code to handle forwards compatibility
-itself, by handling unknown enum values.
-
-### Unions
-
-Unions share a lot of properties with enums, but instead of new names
-for constants, you use names of tables. You can then declare
-a union field, which can hold a reference to any of those types, and
-additionally a hidden field with the suffix `_type` is generated that
-holds the corresponding enum value, allowing you to know which type to
-cast to at runtime.
-
-Unions are a good way to be able to send multiple message types as a FlatBuffer.
-Note that because a union field is really two fields, it must always be
-part of a table, it cannot be the root of a FlatBuffer by itself.
-
-If you have a need to distinguish between different FlatBuffers in a more
-open-ended way, for example for use as files, see the file identification
-feature below.
-
-There is an experimental support only in C++ for a vector of unions
-(and types). In the example IDL file above, use [Any] to add a
-vector of Any to Monster table.
-
-### Namespaces
-
-These will generate the corresponding namespace in C++ for all helper
-code, and packages in Java. You can use `.` to specify nested namespaces /
-packages.
-
-### Includes
-
-You can include other schemas files in your current one, e.g.:
-
-    include "mydefinitions.fbs";
-
-This makes it easier to refer to types defined elsewhere. `include`
-automatically ensures each file is parsed just once, even when referred to
-more than once.
-
-When using the `flatc` compiler to generate code for schema definitions,
-only definitions in the current file will be generated, not those from the
-included files (those you still generate separately).
-
-### Root type
-
-This declares what you consider to be the root table (or struct) of the
-serialized data. This is particularly important for parsing JSON data,
-which doesn't include object type information.
-
-### File identification and extension
-
-Typically, a FlatBuffer binary buffer is not self-describing, i.e. it
-needs you to know its schema to parse it correctly. But if you
-want to use a FlatBuffer as a file format, it would be convenient
-to be able to have a "magic number" in there, like most file formats
-have, to be able to do a sanity check to see if you're reading the
-kind of file you're expecting.
-
-Now, you can always prefix a FlatBuffer with your own file header,
-but FlatBuffers has a built-in way to add an identifier to a
-FlatBuffer that takes up minimal space, and keeps the buffer
-compatible with buffers that don't have such an identifier.
-
-You can specify in a schema, similar to `root_type`, that you intend
-for this type of FlatBuffer to be used as a file format:
-
-    file_identifier "MYFI";
-
-Identifiers must always be exactly 4 characters long. These 4 characters
-will end up as bytes at offsets 4-7 (inclusive) in the buffer.
-
-For any schema that has such an identifier, `flatc` will automatically
-add the identifier to any binaries it generates (with `-b`),
-and generated calls like `FinishMonsterBuffer` also add the identifier.
-If you have specified an identifier and wish to generate a buffer
-without one, you can always still do so by calling
-`FlatBufferBuilder::Finish` explicitly.
-
-After loading a buffer, you can use a call like
-`MonsterBufferHasIdentifier` to check if the identifier is present.
-
-Note that this is best for open-ended uses such as files. If you simply wanted
-to send one of a set of possible messages over a network for example, you'd
-be better off with a union.
-
-Additionally, by default `flatc` will output binary files as `.bin`.
-This declaration in the schema will change that to whatever you want:
-
-    file_extension "ext";
-
-### RPC interface declarations
-
-You can declare RPC calls in a schema, that define a set of functions
-that take a FlatBuffer as an argument (the request) and return a FlatBuffer
-as the response (both of which must be table types):
-
-    rpc_service MonsterStorage {
-      Store(Monster):StoreResponse;
-      Retrieve(MonsterId):Monster;
-    }
-
-What code this produces and how it is used depends on language and RPC system
-used, there is preliminary support for GRPC through the `--grpc` code generator,
-see `grpc/tests` for an example.
-
-### Comments & documentation
-
-May be written as in most C-based languages. Additionally, a triple
-comment (`///`) on a line by itself signals that a comment is documentation
-for whatever is declared on the line after it
-(table/struct/field/enum/union/element), and the comment is output
-in the corresponding C++ code. Multiple such lines per item are allowed.
-
-### Attributes
-
-Attributes may be attached to a declaration, behind a field, or after
-the name of a table/struct/enum/union. These may either have a value or
-not. Some attributes like `deprecated` are understood by the compiler;
-user defined ones need to be declared with the attribute declaration
-(like `priority` in the example above), and are
-available to query if you parse the schema at runtime.
-This is useful if you write your own code generators/editors etc., and
-you wish to add additional information specific to your tool (such as a
-help text).
-
-Current understood attributes:
-
--   `id: n` (on a table field): manually set the field identifier to `n`.
-    If you use this attribute, you must use it on ALL fields of this table,
-    and the numbers must be a contiguous range from 0 onwards.
-    Additionally, since a union type effectively adds two fields, its
-    id must be that of the second field (the first field is the type
-    field and not explicitly declared in the schema).
-    For example, if the last field before the union field had id 6,
-    the union field should have id 8, and the unions type field will
-    implicitly be 7.
-    IDs allow the fields to be placed in any order in the schema.
-    When a new field is added to the schema it must use the next available ID.
--   `deprecated` (on a field): do not generate accessors for this field
-    anymore, code should stop using this data.
--   `required` (on a non-scalar table field): this field must always be set.
-    By default, all fields are optional, i.e. may be left out. This is
-    desirable, as it helps with forwards/backwards compatibility, and
-    flexibility of data structures. It is also a burden on the reading code,
-    since for non-scalar fields it requires you to check against NULL and
-    take appropriate action. By specifying this field, you force code that
-    constructs FlatBuffers to ensure this field is initialized, so the reading
-    code may access it directly, without checking for NULL. If the constructing
-    code does not initialize this field, they will get an assert, and also
-    the verifier will fail on buffers that have missing required fields.
--   `force_align: size` (on a struct): force the alignment of this struct
-    to be something higher than what it is naturally aligned to. Causes
-    these structs to be aligned to that amount inside a buffer, IF that
-    buffer is allocated with that alignment (which is not necessarily
-    the case for buffers accessed directly inside a `FlatBufferBuilder`).
--   `bit_flags` (on an enum): the values of this field indicate bits,
-    meaning that any value N specified in the schema will end up
-    representing 1<<N, or if you don't specify values at all, you'll get
-    the sequence 1, 2, 4, 8, ...
--   `nested_flatbuffer: "table_name"` (on a field): this indicates that the field
-    (which must be a vector of ubyte) contains flatbuffer data, for which the
-    root type is given by `table_name`. The generated code will then produce
-    a convenient accessor for the nested FlatBuffer.
--   `key` (on a field): this field is meant to be used as a key when sorting
-    a vector of the type of table it sits in. Can be used for in-place
-    binary search.
--   `hash` (on a field). This is an (un)signed 32/64 bit integer field, whose
-    value during JSON parsing is allowed to be a string, which will then be
-    stored as its hash. The value of attribute is the hashing algorithm to
-    use, one of `fnv1_32` `fnv1_64` `fnv1a_32` `fnv1a_64`.
--   `original_order` (on a table): since elements in a table do not need
-    to be stored in any particular order, they are often optimized for
-    space by sorting them to size. This attribute stops that from happening.
-    There should generally not be any reason to use this flag.
--   'native_*'.  Several attributes have been added to support the [C++ object
-    Based API](@ref flatbuffers_cpp_object_based_api).  All such attributes
-    are prefixed with the term "native_".
-
-
-## JSON Parsing
-
-The same parser that parses the schema declarations above is also able
-to parse JSON objects that conform to this schema. So, unlike other JSON
-parsers, this parser is strongly typed, and parses directly into a FlatBuffer
-(see the compiler documentation on how to do this from the command line, or
-the C++ documentation on how to do this at runtime).
-
-Besides needing a schema, there are a few other changes to how it parses
-JSON:
-
--   It accepts field names with and without quotes, like many JSON parsers
-    already do. It outputs them without quotes as well, though can be made
-    to output them using the `strict_json` flag.
--   If a field has an enum type, the parser will recognize symbolic enum
-    values (with or without quotes) instead of numbers, e.g.
-    `field: EnumVal`. If a field is of integral type, you can still use
-    symbolic names, but values need to be prefixed with their type and
-    need to be quoted, e.g. `field: "Enum.EnumVal"`. For enums
-    representing flags, you may place multiple inside a string
-    separated by spaces to OR them, e.g.
-    `field: "EnumVal1 EnumVal2"` or `field: "Enum.EnumVal1 Enum.EnumVal2"`.
--   Similarly, for unions, these need to specified with two fields much like
-    you do when serializing from code. E.g. for a field `foo`, you must
-    add a field `foo_type: FooOne` right before the `foo` field, where
-    `FooOne` would be the table out of the union you want to use.
--   A field that has the value `null` (e.g. `field: null`) is intended to
-    have the default value for that field (thus has the same effect as if
-    that field wasn't specified at all).
--   It has some built in conversion functions, so you can write for example
-    `rad(180)` where ever you'd normally write `3.14159`.
-    Currently supports the following functions: `rad`, `deg`, `cos`, `sin`,
-    `tan`, `acos`, `asin`, `atan`.
-
-When parsing JSON, it recognizes the following escape codes in strings:
-
--   `\n` - linefeed.
--   `\t` - tab.
--   `\r` - carriage return.
--   `\b` - backspace.
--   `\f` - form feed.
--   `\"` - double quote.
--   `\\` - backslash.
--   `\/` - forward slash.
--   `\uXXXX` - 16-bit unicode code point, converted to the equivalent UTF-8
-    representation.
--   `\xXX` - 8-bit binary hexadecimal number XX. This is the only one that is
-     not in the JSON spec (see http://json.org/), but is needed to be able to
-     encode arbitrary binary in strings to text and back without losing
-     information (e.g. the byte 0xFF can't be represented in standard JSON).
-
-It also generates these escape codes back again when generating JSON from a
-binary representation.
-
-## Guidelines
-
-### Efficiency
-
-FlatBuffers is all about efficiency, but to realize that efficiency you
-require an efficient schema. There are usually multiple choices on
-how to represent data that have vastly different size characteristics.
-
-It is very common nowadays to represent any kind of data as dictionaries
-(as in e.g. JSON), because of its flexibility and extensibility. While
-it is possible to emulate this in FlatBuffers (as a vector
-of tables with key and value(s)), this is a bad match for a strongly
-typed system like FlatBuffers, leading to relatively large binaries.
-FlatBuffer tables are more flexible than classes/structs in most systems,
-since having a large number of fields only few of which are actually
-used is still efficient. You should thus try to organize your data
-as much as possible such that you can use tables where you might be
-tempted to use a dictionary.
-
-Similarly, strings as values should only be used when they are
-truely open-ended. If you can, always use an enum instead.
-
-FlatBuffers doesn't have inheritance, so the way to represent a set
-of related data structures is a union. Unions do have a cost however,
-so an alternative to a union is to have a single table that has
-all the fields of all the data structures you are trying to
-represent, if they are relatively similar / share many fields.
-Again, this is efficient because optional fields are cheap.
-
-FlatBuffers supports the full range of integer sizes, so try to pick
-the smallest size needed, rather than defaulting to int/long.
-
-Remember that you can share data (refer to the same string/table
-within a buffer), so factoring out repeating data into its own
-data structure may be worth it.
-
-### Style guide
-
-Identifiers in a schema are meant to translate to many different programming
-languages, so using the style of your "main" language is generally a bad idea.
-
-For this reason, below is a suggested style guide to adhere to, to keep schemas
-consistent for interoperation regardless of the target language.
-
-Where possible, the code generators for specific languages will generate
-identifiers that adhere to the language style, based on the schema identifiers.
-
-- Table, struct, enum and rpc names (types): UpperCamelCase.
-- Table and struct field names: snake_case. This is translated to lowerCamelCase
-  automatically for some languages, e.g. Java.
-- Enum values: UpperCamelCase.
-- namespaces: UpperCamelCase.
-
-Formatting (this is less important, but still worth adhering to):
-
-- Opening brace: on the same line as the start of the declaration.
-- Spacing: Indent by 2 spaces. None around `:` for types, on both sides for `=`.
-
-For an example, see the schema at the top of this file.
-
-## Gotchas
-
-### Schemas and version control
-
-FlatBuffers relies on new field declarations being added at the end, and earlier
-declarations to not be removed, but be marked deprecated when needed. We think
-this is an improvement over the manual number assignment that happens in
-Protocol Buffers (and which is still an option using the `id` attribute
-mentioned above).
-
-One place where this is possibly problematic however is source control. If user
-A adds a field, generates new binary data with this new schema, then tries to
-commit both to source control after user B already committed a new field also,
-and just auto-merges the schema, the binary files are now invalid compared to
-the new schema.
-
-The solution of course is that you should not be generating binary data before
-your schema changes have been committed, ensuring consistency with the rest of
-the world. If this is not practical for you, use explicit field ids, which
-should always generate a merge conflict if two people try to allocate the same
-id.
-
-### Schema evolution examples
-
-Some examples to clarify what happens as you change a schema:
-
-If we have the following original schema:
-
-    table { a:int; b:int; }
-
-And we extend it:
-
-    table { a:int; b:int; c:int; }
-
-This is ok. Code compiled with the old schema reading data generated with the
-new one will simply ignore the presence of the new field. Code compiled with the
-new schema reading old data will get the default value for `c` (which is 0
-in this case, since it is not specified).
-
-    table { a:int (deprecated); b:int; }
-
-This is also ok. Code compiled with the old schema reading newer data will now
-always get the default value for `a` since it is not present. Code compiled
-with the new schema now cannot read nor write `a` anymore (any existing code
-that tries to do so will result in compile errors), but can still read
-old data (they will ignore the field).
-
-    table { c:int a:int; b:int; }
-
-This is NOT ok, as this makes the schemas incompatible. Old code reading newer
-data will interpret `c` as if it was `a`, and new code reading old data
-accessing `a` will instead receive `b`.
-
-    table { c:int (id: 2); a:int (id: 0); b:int (id: 1); }
-
-This is ok. If your intent was to order/group fields in a way that makes sense
-semantically, you can do so using explicit id assignment. Now we are compatible
-with the original schema, and the fields can be ordered in any way, as long as
-we keep the sequence of ids.
-
-    table { b:int; }
-
-NOT ok. We can only remove a field by deprecation, regardless of wether we use
-explicit ids or not.
-
-    table { a:uint; b:uint; }
-
-This is MAYBE ok, and only in the case where the type change is the same size,
-like here. If old data never contained any negative numbers, this will be
-safe to do.
-
-    table { a:int = 1; b:int = 2; }
-
-Generally NOT ok. Any older data written that had 0 values were not written to
-the buffer, and rely on the default value to be recreated. These will now have
-those values appear to `1` and `2` instead. There may be cases in which this
-is ok, but care must be taken.
-
-    table { aa:int; bb:int; }
-
-Occasionally ok. You've renamed fields, which will break all code (and JSON
-files!) that use this schema, but as long as the change is obvious, this is not
-incompatible with the actual binary buffers, since those only ever address
-fields by id/offset.
-<br>
-
-### Testing whether a field is present in a table
-
-Most serialization formats (e.g. JSON or Protocol Buffers) make it very
-explicit in the format whether a field is present in an object or not,
-allowing you to use this as "extra" information.
-
-In FlatBuffers, this also holds for everything except scalar values.
-
-FlatBuffers by default will not write fields that are equal to the default
-value (for scalars), sometimes resulting in a significant space savings.
-
-However, this also means testing whether a field is "present" is somewhat
-meaningless, since it does not tell you if the field was actually written by
-calling `add_field` style calls, unless you're only interested in this
-information for non-default values.
-
-Some `FlatBufferBuilder` implementations have an option called `force_defaults`
-that circumvents this behavior, and writes fields even if they are equal to
-the default. You can then use `IsFieldPresent` to query this.
-
-Another option that works in all languages is to wrap a scalar field in a
-struct. This way it will return null if it is not present. The cool thing
-is that structs don't take up any more space than the scalar they represent.
-
-   [Interface Definition Language]: https://en.wikipedia.org/wiki/Interface_description_language
diff --git a/third_party/flatbuffers/docs/source/Support.md b/third_party/flatbuffers/docs/source/Support.md
deleted file mode 100755
index 7bc3348..0000000
--- a/third_party/flatbuffers/docs/source/Support.md
+++ /dev/null
@@ -1,44 +0,0 @@
-Platform / Language / Feature support    {#flatbuffers_support}
-=====================================
-
-FlatBuffers is actively being worked on, which means that certain platform /
-language / feature combinations may not be available yet.
-
-This page tries to track those issues, to make informed decisions easier.
-In general:
-
-  * Languages: language support beyond the ones created by the original
-    FlatBuffer authors typically depends on community contributions.
-  * Features: C++ was the first language supported, since our original
-    target was high performance game development. It thus has the richest
-    feature set, and is likely most robust. Other languages are catching up
-    however.
-  * Platforms: All language implementations are typically portable to most
-    platforms, unless where noted otherwise.
-
-NOTE: this table is a start, it needs to be extended.
-
-Feature                        | C++    | Java   | C#     | Go     | Python | JS        | C        | PHP | Ruby
------------------------------- | ------ | ------ | ------ | ------ | ------ | --------- | ------  | --- | ----
-Codegen for all basic features | Yes    | Yes    | Yes    | Yes    | Yes    | Yes       | Yes     | WiP | WiP
-JSON parsing                   | Yes    | No     | No     | No     | No     | No        | Yes     | No  | No
-Simple mutation                | Yes    | WIP    | WIP    | No     | No     | No        | No      | No  | No
-Reflection                     | Yes    | No     | No     | No     | No     | No        | Basic   | No  | No
-Buffer verifier                | Yes    | No     | No     | No     | No     | No        | Yes     | No  | No
-Testing: basic                 | Yes    | Yes    | Yes    | Yes    | Yes    | Yes       | Yes     | ?   | ?
-Testing: fuzz                  | Yes    | No     | No     | Yes    | Yes    | No        | No      | ?   | ?
-Performance:                   | Superb | Great  | Great  | Great  | Ok     | ?         | Superb  | ?   | ?
-Platform: Windows              | VS2010 | Yes    | Yes    | ?      | ?      | ?         | VS2010  | ?   | ?
-Platform: Linux                | GCC282 | Yes    | ?      | Yes    | Yes    | ?         | Yes     | ?   | ?
-Platform: OS X                 | Xcode4 | ?      | ?      | ?      | Yes    | ?         | Yes     | ?   | ?
-Platform: Android              | NDK10d | Yes    | ?      | ?      | ?      | ?         | ?       | ?   | ?
-Platform: iOS                  | ?      | ?      | ?      | ?      | ?      | ?         | ?       | ?   | ?
-Engine: Unity                  | ?      | ?      | Yes    | ?      | ?      | ?         | ?       | ?   | ?
-Primary authors (github)       | gwvo   | gwvo   | ev*/js*| rw     | rw     | evanw/ev* | mik*    | ch* | rw
-
-  * ev = evolutional
-  * js = jonsimantov
-  * mik = mikkelfj
-  * ch = chobie
-
-<br>
diff --git a/third_party/flatbuffers/docs/source/Tutorial.md b/third_party/flatbuffers/docs/source/Tutorial.md
deleted file mode 100644
index 7d9c6d9..0000000
--- a/third_party/flatbuffers/docs/source/Tutorial.md
+++ /dev/null
@@ -1,1943 +0,0 @@
-Tutorial   {#flatbuffers_guide_tutorial}
-========
-
-## Overview
-
-This tutorial provides a basic example of how to work with
-[FlatBuffers](@ref flatbuffers_overview). We will step through a simple example
-application, which shows you how to:
-
-   - Write a FlatBuffer `schema` file.
-   - Use the `flatc` FlatBuffer compiler.
-   - Parse [JSON](http://json.org) files that conform to a schema into
-     FlatBuffer binary files.
-   - Use the generated files in many of the supported languages (such as C++,
-     Java, and more.)
-
-During this example, imagine that you are creating a game where the main
-character, the hero of the story, needs to slay some `orc`s. We will walk
-through each step necessary to create this monster type using FlatBuffers.
-
-Please select your desired language for our quest:
-\htmlonly
-<form>
-  <input type="radio" name="language" value="cpp" checked="checked">C++</input>
-  <input type="radio" name="language" value="java">Java</input>
-  <input type="radio" name="language" value="csharp">C#</input>
-  <input type="radio" name="language" value="go">Go</input>
-  <input type="radio" name="language" value="python">Python</input>
-  <input type="radio" name="language" value="javascript">JavaScript</input>
-  <input type="radio" name="language" value="php">PHP</input>
-  <input type="radio" name="language" value="c">C</input>
-</form>
-\endhtmlonly
-
-\htmlonly
-<script>
-  /**
-   * Check if an HTML `class` attribute is in the language-specific format.
-   * @param {string} languageClass An HTML `class` attribute in the format
-   * 'language-{lang}', where {lang} is a programming language (e.g. 'cpp',
-   * 'java', 'go', etc.).
-   * @return {boolean} Returns `true` if `languageClass` was in the valid
-   * format, prefixed with 'language-'. Otherwise, it returns false.
-   */
-  function isProgrammingLanguageClassName(languageClass) {
-    if (languageClass && languageClass.substring(0, 9) == 'language-' &&
-        languageClass.length > 8) {
-      return true;
-    } else {
-      return false;
-    }
-  }
-
-  /**
-   * Given a language-specific HTML `class` attribute, extract the language.
-   * @param {string} languageClass The string name of an HTML `class` attribute,
-   * in the format `language-{lang}`, where {lang} is a programming language
-   * (e.g. 'cpp', 'java', 'go', etc.).
-   * @return {string} Returns a string containing only the {lang} portion of
-   * the class name. If the input was invalid, then it returns `null`.
-   */
-  function extractProgrammingLanguageFromLanguageClass(languageClass) {
-    if (isProgrammingLanguageClassName(languageClass)) {
-      return languageClass.substring(9);
-    } else {
-      return null;
-    }
-  }
-
-  /**
-   * Hide every code snippet, except for the language that is selected.
-   */
-  function displayChosenLanguage() {
-    var selection = $('input:checked').val();
-
-    var htmlElements = document.getElementsByTagName('*');
-    for (var i = 0; i < htmlElements.length; i++) {
-      if (isProgrammingLanguageClassName(htmlElements[i].className)) {
-        if (extractProgrammingLanguageFromLanguageClass(
-              htmlElements[i].className).toLowerCase() != selection) {
-          htmlElements[i].style.display = 'none';
-        } else {
-          htmlElements[i].style.display = 'initial';
-        }
-      }
-    }
-  }
-
-  $( document ).ready(displayChosenLanguage);
-
-  $('input[type=radio]').on("click", displayChosenLanguage);
-</script>
-\endhtmlonly
-
-## Where to Find the Example Code
-
-Samples demonstating the concepts in this example are located in the source code
-package, under the `samples` directory. You can browse the samples on GitHub
-[here](https://github.com/google/flatbuffers/tree/master/samples).
-
-<div class="language-c">
-*Note: The above does not apply to C, instead [look here](https://github.com/dvidelabs/flatcc/tree/master/samples).*
-</div>
-
-For your chosen language, please cross-reference with:
-
-<div class="language-cpp">
-[sample_binary.cpp](https://github.com/google/flatbuffers/blob/master/samples/sample_binary.cpp)
-</div>
-<div class="language-java">
-[SampleBinary.java](https://github.com/google/flatbuffers/blob/master/samples/SampleBinary.java)
-</div>
-<div class="language-csharp">
-[SampleBinary.cs](https://github.com/google/flatbuffers/blob/master/samples/SampleBinary.cs)
-</div>
-<div class="language-go">
-[sample_binary.go](https://github.com/google/flatbuffers/blob/master/samples/sample_binary.go)
-</div>
-<div class="language-python">
-[sample_binary.py](https://github.com/google/flatbuffers/blob/master/samples/sample_binary.py)
-</div>
-<div class="language-javascript">
-[samplebinary.js](https://github.com/google/flatbuffers/blob/master/samples/samplebinary.js)
-</div>
-<div class="language-php">
-[SampleBinary.php](https://github.com/google/flatbuffers/blob/master/samples/SampleBinary.php)
-</div>
-<div class="language-c">
-[monster.c](https://github.com/dvidelabs/flatcc/blob/master/samples/monster/monster.c)
-</div>
-
-## Writing the Monsters' FlatBuffer Schema
-
-To start working with FlatBuffers, you first need to create a `schema` file,
-which defines the format for each data structure you wish to serialize. Here is
-the `schema` that defines the template for our monsters:
-
-~~~
-  // Example IDL file for our monster's schema.
-
-  namespace MyGame.Sample;
-
-  enum Color:byte { Red = 0, Green, Blue = 2 }
-
-  union Equipment { Weapon } // Optionally add more tables.
-
-  struct Vec3 {
-    x:float;
-    y:float;
-    z:float;
-  }
-
-  table Monster {
-    pos:Vec3; // Struct.
-    mana:short = 150;
-    hp:short = 100;
-    name:string;
-    friendly:bool = false (deprecated);
-    inventory:[ubyte];  // Vector of scalars.
-    color:Color = Blue; // Enum.
-    weapons:[Weapon];   // Vector of tables.
-    equipped:Equipment; // Union.
-  }
-
-  table Weapon {
-    name:string;
-    damage:short;
-  }
-
-  root_type Monster;
-~~~
-
-As you can see, the syntax for the `schema`
-[Interface Definition Language (IDL)](https://en.wikipedia.org/wiki/Interface_description_language)
-is similar to those of the C family of languages, and other IDL languages. Let's
-examine each part of this `schema` to determine what it does.
-
-The `schema` starts with a `namespace` declaration. This determines the
-corresponding package/namespace for the generated code. In our example, we have
-the `Sample` namespace inside of the `MyGame` namespace.
-
-Next, we have an `enum` definition. In this example, we have an `enum` of type
-`byte`, named `Color`. We have three values in this `enum`: `Red`, `Green`, and
-`Blue`. We specify `Red = 0` and `Blue = 2`, but we do not specify an explicit
-value for `Green`. Since the behavior of an `enum` is to increment if
-unspecified, `Green` will receive the implicit value of `1`.
-
-Following the `enum` is a `union`. The `union` in this example is not very
-useful, as it only contains the one `table` (named `Weapon`). If we had created
-multiple tables that we would want the `union` to be able to reference, we
-could add more elements to the `union Equipment`.
-
-After the `union` comes a `struct Vec3`, which represents a floating point
-vector with `3` dimensions. We use a `struct` here, over a `table`, because
-`struct`s are ideal for data structures that will not change, since they use
-less memory and have faster lookup.
-
-The `Monster` table is the main object in our FlatBuffer. This will be used as
-the template to store our `orc` monster. We specify some default values for
-fields, such as `mana:short = 150`. All unspecified fields will default to `0`
-or `NULL`. Another thing to note is the line
-`friendly:bool = false (deprecated);`. Since you cannot delete fields from a
-`table` (to support backwards compatability), you can set fields as
-`deprecated`, which will prevent the generation of accessors for this field in
-the generated code. Be careful when using `deprecated`, however, as it may break
-legacy code that used this accessor.
-
-The `Weapon` table is a sub-table used within our FlatBuffer. It is
-used twice: once within the `Monster` table and once within the `Equipment`
-enum. For our `Monster`, it is used to populate a `vector of tables` via the
-`weapons` field within our `Monster`. It is also the only table referenced by
-the `Equipment` enum.
-
-The last part of the `schema` is the `root_type`. The root type declares what
-will be the root table for the serialized data. In our case, the root type is
-our `Monster` table.
-
-#### More Information About Schemas
-
-You can find a complete guide to writing `schema` files in the
-[Writing a schema](@ref flatbuffers_guide_writing_schema) section of the
-Programmer's Guide. You can also view the formal
-[Grammar of the schema language](@ref flatbuffers_grammar).
-
-## Compiling the Monsters' Schema
-
-After you have written the FlatBuffers schema, the next step is to compile it.
-
-If you have not already done so, please follow
-[these instructions](@ref flatbuffers_guide_building) to build `flatc`, the
-FlatBuffer compiler.
-
-Once `flatc` is built successfully, compile the schema for your language:
-
-<div class="language-c">
-*Note: If you're working in C, you need to use the separate project [FlatCC](https://github.com/dvidelabs/flatcc) which contains a schema compiler and runtime library in C for C.*
-<br>
-See [flatcc build instructions](https://github.com/dvidelabs/flatcc#building).
-<br>
-Please be aware of the difference between `flatc` and `flatcc` tools.
-<br>
-</div>
-
-<div class="language-cpp">
-~~~{.sh}
-  cd flatbuffers/sample
-  ./../flatc --cpp samples/monster.fbs
-~~~
-</div>
-<div class="language-java">
-~~~{.sh}
-  cd flatbuffers/sample
-  ./../flatc --java samples/monster.fbs
-~~~
-</div>
-<div class="language-csharp">
-~~~{.sh}
-  cd flatbuffers/sample
-  ./../flatc --csharp samples/monster.fbs
-~~~
-</div>
-<div class="language-go">
-~~~{.sh}
-  cd flatbuffers/sample
-  ./../flatc --go samples/monster.fbs
-~~~
-</div>
-<div class="language-python">
-~~~{.sh}
-  cd flatbuffers/sample
-  ./../flatc --python samples/monster.fbs
-~~~
-</div>
-<div class="language-javascript">
-~~~{.sh}
-  cd flatbuffers/sample
-  ./../flatc --javascript samples/monster.fbs
-~~~
-</div>
-<div class="language-php">
-~~~{.sh}
-  cd flatbuffers/sample
-  ./../flatc --php samples/monster.fbs
-~~~
-</div>
-<div class="language-c">
-~~~{.sh}
-  cd flatcc
-  mkdir -p build/tmp/samples/monster
-  bin/flatcc -a -o build/tmp/samples/monster samples/monster/monster.fbs
-  # or just
-  flatcc/samples/monster/build.sh
-~~~
-</div>
-
-For a more complete guide to using the `flatc` compiler, please read the
-[Using the schema compiler](@ref flatbuffers_guide_using_schema_compiler)
-section of the Programmer's Guide.
-
-## Reading and Writing Monster FlatBuffers
-
-Now that we have compiled the schema for our programming language, we can
-start creating some monsters and serializing/deserializing them from
-FlatBuffers.
-
-#### Creating and Writing Orc FlatBuffers
-
-The first step is to import/include the library, generated files, etc.
-
-<div class="language-cpp">
-~~~{.cpp}
-  #include "monster_generate.h" // This was generated by `flatc`.
-
-  using namespace MyGame::Sample; // Specified in the schema.
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  import MyGame.Sample.*; //The `flatc` generated files. (Monster, Vec3, etc.)
-
-  import com.google.flatbuffers.FlatBufferBuilder;
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  using FlatBuffers;
-  using MyGame.Sample; // The `flatc` generated files. (Monster, Vec3, etc.)
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  import (
-          flatbuffers "github.com/google/flatbuffers/go"
-          sample "MyGame/Sample"
-  )
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  import flatbuffers
-
-  # Generated by `flatc`.
-  import MyGame.Sample.Color
-  import MyGame.Sample.Equipment
-  import MyGame.Sample.Monster
-  import MyGame.Sample.Vec3
-  import MyGame.Sample.Weapon
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  // The following code is for JavaScript module loaders (e.g. Node.js). See
-  // below for a browser-based HTML/JavaScript example of including the library.
-  var flatbuffers = require('/js/flatbuffers').flatbuffers;
-  var MyGame = require('./monster_generated').MyGame; // Generated by `flatc`.
-
-  //--------------------------------------------------------------------------//
-
-  // The following code is for browser-based HTML/JavaScript. Use the above code
-  // for JavaScript module loaders (e.g. Node.js).
-  <script src="../js/flatbuffers.js"></script>
-  <script src="monster_generated.js"></script> // Generated by `flatc`.
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  // It is recommended that your use PSR autoload when using FlatBuffers in PHP.
-  // Here is an example from `SampleBinary.php`:
-  function __autoload($class_name) {
-    // The last segment of the class name matches the file name.
-    $class = substr($class_name, strrpos($class_name, "\\") + 1);
-    $root_dir = join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)))); // `flatbuffers` root.
-
-    // Contains the `*.php` files for the FlatBuffers library and the `flatc` generated files.
-    $paths = array(join(DIRECTORY_SEPARATOR, array($root_dir, "php")),
-                   join(DIRECTORY_SEPARATOR, array($root_dir, "samples", "MyGame", "Sample")));
-    foreach ($paths as $path) {
-      $file = join(DIRECTORY_SEPARATOR, array($path, $class . ".php"));
-      if (file_exists($file)) {
-        require($file);
-        break;
-      }
-    }
-  }
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-  #include "monster_builder.h" // Generated by `flatcc`.
-
-  // Convenient namespace macro to manage long namespace prefix.
-  #undef ns
-  #define ns(x) FLATBUFFERS_WRAP_NAMESPACE(MyGame_Sample, x) // Specified in the schema.
-
-  // A helper to simplify creating vectors from C-arrays.
-  #define c_vec_len(V) (sizeof(V)/sizeof((V)[0]))
-~~~
-</div>
-
-Now we are ready to start building some buffers. In order to start, we need
-to create an instance of the `FlatBufferBuilder`, which will contain the buffer
-as it grows. You can pass an initial size of the buffer (here 1024 bytes),
-which will grow automatically if needed:
-
-<div class="language-cpp">
-~~~{.cpp}
-  // Create a `FlatBufferBuilder`, which will be used to create our
-  // monsters' FlatBuffers.
-  flatbuffers::FlatBufferBuilder builder(1024);
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  // Create a `FlatBufferBuilder`, which will be used to create our
-  // monsters' FlatBuffers.
-  FlatBufferBuilder builder = new FlatBufferBuilder(1024);
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  // Create a `FlatBufferBuilder`, which will be used to create our
-  // monsters' FlatBuffers.
-  var builder = new FlatBufferBuilder(1024);
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  // Create a `FlatBufferBuilder`, which will be used to create our
-  // monsters' FlatBuffers.
-  builder := flatbuffers.NewBuilder(1024)
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  # Create a `FlatBufferBuilder`, which will be used to create our
-  # monsters' FlatBuffers.
-  builder = flatbuffers.Builder(1024)
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  // Create a `flatbuffer.Builder`, which will be used to create our
-  // monsters' FlatBuffers.
-  var builder = new flatbuffers.Builder(1024);
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  // Create a `FlatBufferBuilder`, which will be used to create our
-  // monsters' FlatBuffers.
-  $builder = new Google\FlatBuffers\FlatbufferBuilder(1024);
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-    flatcc_builder_t builder, *B;
-    B = &builder;
-    // Initialize the builder object.
-    flatcc_builder_init(B);
-~~~
-</div>
-
-After creating the `builder`, we can start serializing our data. Before we make
-our `orc` Monster, lets create some `Weapon`s: a `Sword` and an `Axe`.
-
-<div class="language-cpp">
-~~~{.cpp}
-  auto weapon_one_name = builder.CreateString("Sword");
-  short weapon_one_damage = 3;
-
-  auto weapon_two_name = builder.CreateString("Axe");
-  short weapon_two_damage = 5;
-
-  // Use the `CreateWeapon` shortcut to create Weapons with all the fields set.
-  auto sword = CreateWeapon(builder, weapon_one_name, weapon_one_damage);
-  auto axe = CreateWeapon(builder, weapon_two_name, weapon_two_damage);
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  int weaponOneName = builder.createString("Sword")
-  short weaponOneDamage = 3;
-
-  int weaponTwoName = builder.createString("Axe");
-  short weaponTwoDamage = 5;
-
-  // Use the `createWeapon()` helper function to create the weapons, since we set every field.
-  int sword = Weapon.createWeapon(builder, weaponOneName, weaponOneDamage);
-  int axe = Weapon.createWeapon(builder, weaponTwoName, weaponTwoDamage);
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  var weaponOneName = builder.CreateString("Sword");
-  var weaponOneDamage = 3;
-
-  var weaponTwoName = builder.CreateString("Axe");
-  var weaponTwoDamage = 5;
-
-  // Use the `CreateWeapon()` helper function to create the weapons, since we set every field.
-  var sword = Weapon.CreateWeapon(builder, weaponOneName, (short)weaponOneDamage);
-  var axe = Weapon.CreateWeapon(builder, weaponTwoName, (short)weaponTwoDamage);
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  weaponOne := builder.CreateString("Sword")
-  weaponTwo := builder.CreateString("Axe")
-
-  // Create the first `Weapon` ("Sword").
-  sample.WeaponStart(builder)
-  sample.Weapon.AddName(builder, weaponOne)
-  sample.Weapon.AddDamage(builder, 3)
-  sword := sample.WeaponEnd(builder)
-
-  // Create the second `Weapon` ("Axe").
-  sample.WeaponStart(builder)
-  sample.Weapon.AddName(builder, weaponTwo)
-  sample.Weapon.AddDamage(builder, 5)
-  axe := sample.WeaponEnd(builder)
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  weapon_one = builder.CreateString('Sword')
-  weapon_two = builder.CreateString('Axe')
-
-  # Create the first `Weapon` ('Sword').
-  MyGame.Sample.Weapon.WeaponStart(builder)
-  MyGame.Sample.Weapon.WeaponAddName(builder, weapon_one)
-  MyGame.Sample.Weapon.WeaponAddDamage(builder, 3)
-  sword = MyGame.Sample.Weapon.WeaponEnd(builder)
-
-  # Create the second `Weapon` ('Axe').
-  MyGame.Sample.Weapon.WeaponStart(builder)
-  MyGame.Sample.Weapon.WeaponAddName(builder, weapon_two)
-  MyGame.Sample.Weapon.WeaponAddDamage(builder, 5)
-  axe = MyGame.Sample.Weapon.WeaponEnd(builder)
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  var weaponOne = builder.createString('Sword');
-  var weaponTwo = builder.createString('Axe');
-
-  // Create the first `Weapon` ('Sword').
-  MyGame.Sample.Weapon.startWeapon(builder);
-  MyGame.Sample.Weapon.addName(builder, weaponOne);
-  MyGame.Sample.Weapon.addDamage(builder, 3);
-  var sword = MyGame.Sample.Weapon.endWeapon(builder);
-
-  // Create the second `Weapon` ('Axe').
-  MyGame.Sample.Weapon.startWeapon(builder);
-  MyGame.Sample.Weapon.addName(builder, weaponTwo);
-  MyGame.Sample.Weapon.addDamage(builder, 5);
-  var axe = MyGame.Sample.Weapon.endWeapon(builder);
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  // Create the `Weapon`s using the `createWeapon()` helper function.
-  $weapon_one_name = $builder->createString("Sword");
-  $sword = \MyGame\Sample\Weapon::CreateWeapon($builder, $weapon_one_name, 3);
-
-  $weapon_two_name = $builder->createString("Axe");
-  $axe = \MyGame\Sample\Weapon::CreateWeapon($builder, $weapon_two_name, 5);
-
-  // Create an array from the two `Weapon`s and pass it to the
-  // `CreateWeaponsVector()` method to create a FlatBuffer vector.
-  $weaps = array($sword, $axe);
-  $weapons = \MyGame\Sample\Monster::CreateWeaponsVector($builder, $weaps);
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-  ns(Weapon_ref_t) weapon_one_name = flatbuffers_string_create_str(B, "Sword");
-  uint16_t weapon_one_damage = 3;
-
-  ns(Weapon_ref_t) weapon_two_name = flatbuffers_string_create_str(B, "Axe");
-  uint16_t weapon_two_damage = 5;
-
-  ns(Weapon_ref_t) sword = ns(Weapon_create(B, weapon_one_name, weapon_one_damage));
-  ns(Weapon_ref_t) axe = ns(Weapon_create(B, weapon_two_name, weapon_two_damage));
-~~~
-</div>
-
-Now let's create our monster, the `orc`. For this `orc`, lets make him
-`red` with rage, positioned at `(1.0, 2.0, 3.0)`, and give him
-a large pool of hit points with `300`. We can give him a vector of weapons
-to choose from (our `Sword` and `Axe` from earlier). In this case, we will
-equip him with the `Axe`, since it is the most powerful of the two. Lastly,
-let's fill his inventory with some potential treasures that can be taken once he
-is defeated.
-
-Before we serialize a monster, we need to first serialize any objects that are
-contained there-in, i.e. we serialize the data tree using depth-first, pre-order
-traversal. This is generally easy to do on any tree structures.
-
-<div class="language-cpp">
-~~~{.cpp}
-  // Serialize a name for our monster, called "Orc".
-  auto name = builder.CreateString("Orc");
-
-  // Create a `vector` representing the inventory of the Orc. Each number
-  // could correspond to an item that can be claimed after he is slain.
-  unsigned char treasure = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  auto inventory = builder.CreateVector(treasure, 10);
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  // Serialize a name for our monster, called "Orc".
-  int name = builder.createString("Orc");
-
-  // Create a `vector` representing the inventory of the Orc. Each number
-  // could correspond to an item that can be claimed after he is slain.
-  byte[] treasure = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  int inv = Monster.createInventoryVector(builder, treasure);
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  // Serialize a name for our monster, called "Orc".
-  var name = builder.CreateString("Orc");
-
-  // Create a `vector` representing the inventory of the Orc. Each number
-  // could correspond to an item that can be claimed after he is slain.
-  // Note: Since we prepend the bytes, this loop iterates in reverse order.
-  Monster.StartInventoryVector(builder, 10);
-  for (int i = 9; i >= 0; i--)
-  {
-    builder.AddByte((byte)i);
-  }
-  var inv = builder.EndVector();
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  // Serialize a name for our monster, called "Orc".
-  name := builder.CreateString("Orc")
-
-  // Create a `vector` representing the inventory of the Orc. Each number
-  // could correspond to an item that can be claimed after he is slain.
-  // Note: Since we prepend the bytes, this loop iterates in reverse.
-  sample.MonsterStartInventoryVector(builder, 10)
-  for i := 9; i >= 0; i-- {
-          builder.PrependByte(byte(i))
-  }
-  int := builder.EndVector(10)
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  # Serialize a name for our monster, called "Orc".
-  name = builder.CreateString("Orc")
-
-  # Create a `vector` representing the inventory of the Orc. Each number
-  # could correspond to an item that can be claimed after he is slain.
-  # Note: Since we prepend the bytes, this loop iterates in reverse.
-  MyGame.Sample.Monster.MonsterStartInventoryVector(builder, 10)
-  for i in reversed(range(0, 10)):
-    builder.PrependByte(i)
-  inv = builder.EndVector(10)
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  // Serialize a name for our monster, called 'Orc'.
-  var name = builder.createString('Orc');
-
-  // Create a `vector` representing the inventory of the Orc. Each number
-  // could correspond to an item that can be claimed after he is slain.
-  var treasure = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
-  var inv = MyGame.Sample.Monster.createInventoryVector(builder, treasure);
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  // Serialize a name for our monster, called "Orc".
-  $name = $builder->createString("Orc");
-
-  // Create a `vector` representing the inventory of the Orc. Each number
-  // could correspond to an item that can be claimed after he is slain.
-  $treasure = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
-  $inv = \MyGame\Sample\Monster::CreateInventoryVector($builder, $treasure);
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-  // Serialize a name for our monster, called "Orc".
-  // The _str suffix indicates the source is an ascii-z string.
-  flatbuffers_string_ref_t name = flatbuffers_string_create_str(B, "Orc");
-
-  // Create a `vector` representing the inventory of the Orc. Each number
-  // could correspond to an item that can be claimed after he is slain.
-  uint8_t treasure[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-  flatbuffers_uint8_vec_ref_t inventory;
-  // `c_vec_len` is the convenience macro we defined earlier.
-  inventory = flatbuffers_uint8_vec_create(B, treasure, c_vec_len(treasure));
-~~~
-</div>
-
-We serialized two built-in data types (`string` and `vector`) and captured
-their return values. These values are offsets into the serialized data,
-indicating where they are stored, such that we can refer to them below when
-adding fields to our monster.
-
-*Note: To create a `vector` of nested objects (e.g. `table`s, `string`s, or
-other `vector`s), collect their offsets into a temporary data structure, and
-then create an additional `vector` containing their offsets.*
-
-For example, take a look at the two `Weapon`s that we created earlier (`Sword`
-and `Axe`). These are both FlatBuffer `table`s, whose offsets we now store in
-memory. Therefore we can create a FlatBuffer `vector` to contain these
-offsets.
-
-<div class="language-cpp">
-~~~{.cpp}
-  // Place the weapons into a `std::vector`, then convert that into a FlatBuffer `vector`.
-  std::vector<flatbuffers::Offset<Weapon>> weapons_vector;
-  weapons_vector.push_back(sword);
-  weapons_vector.push_back(axe);
-  auto weapons = builder.CreateVector(weapons_vector);
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  // Place the two weapons into an array, and pass it to the `createWeaponsVector()` method to
-  // create a FlatBuffer vector.
-  int[] weaps = new int[2];
-  weaps[0] = sword;
-  weaps[1] = axe;
-
-  // Pass the `weaps` array into the `createWeaponsVector()` method to create a FlatBuffer vector.
-  int weapons = Monster.createWeaponsVector(builder, weaps);
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  var weaps = new Offset<Weapon>[2];
-  weaps[0] = sword;
-  weaps[1] = axe;
-
-  // Pass the `weaps` array into the `CreateWeaponsVector()` method to create a FlatBuffer vector.
-  var weapons = Monster.CreateWeaponsVector(builder, weaps);
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  // Create a FlatBuffer vector and prepend the weapons.
-  // Note: Since we prepend the data, prepend them in reverse order.
-  sample.MonsterStartWeaponsVector(builder, 2)
-  builder.PrependUOffsetT(axe)
-  builder.PrependUOffsetT(sword)
-  weapons := builder.EndVector(2)
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  # Create a FlatBuffer vector and prepend the weapons.
-  # Note: Since we prepend the data, prepend them in reverse order.
-  MyGame.Sample.Monster.MonsterStartWeaponsVector(builder, 2)
-  builder.PrependUOffsetTRelative(axe)
-  builder.PrependUOffsetTRelative(sword)
-  weapons = builder.EndVector(2)
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  // Create an array from the two `Weapon`s and pass it to the
-  // `createWeaponsVector()` method to create a FlatBuffer vector.
-  var weaps = [sword, axe];
-  var weapons = MyGame.Sample.Monster.createWeaponsVector(builder, weaps);
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  // Create an array from the two `Weapon`s and pass it to the
-  // `CreateWeaponsVector()` method to create a FlatBuffer vector.
-  $weaps = array($sword, $axe);
-  $weapons = \MyGame\Sample\Monster::CreateWeaponsVector($builder, $weaps);
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-  // We use the internal builder stack to implement a dynamic vector.
-  ns(Weapon_vec_start(B));
-  ns(Weapon_vec_push(B, sword));
-  ns(Weapon_vec_push(B, axe));
-  ns(Weapon_vec_ref_t) weapons = ns(Weapon_vec_end(B));
-~~~
-</div>
-
-<div class="language-cpp">
-<br>
-Note there's additional convenience overloads of `CreateVector`, allowing you
-to work with data that's not in a `std::vector`, or allowing you to generate
-elements by calling a lambda. For the common case of `std::vector<std::string>`
-there's also `CreateVectorOfStrings`.
-</div>
-
-We have now serialized the non-scalar components of the orc, so we
-can serialize the monster itself:
-
-<div class="language-cpp">
-~~~{.cpp}
-  // Set his hit points to 300 and his mana to 150.
-  int hp = 300;
-  int mana = 150;
-
-  // Finally, create the monster using the `CreateMonster` helper function
-  // to set all fields.
-  auto orc = CreateMonster(builder, Vec3(1.0f, 2.0f, 3.0f), mana, hp, name,
-                           inventory, Color_Red, weapons, Equipment_Weapon,
-                           axe.Union());
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  // Create our monster using `startMonster()` and `endMonster()`.
-  Monster.startMonster(builder);
-  Monster.addPos(builder, Vec3.createVec3(builder, 1.0f, 2.0f, 3.0f));
-  Monster.addName(builder, name);
-  Monster.addColor(builder, Color.Red);
-  Monster.addHp(builder, (short)300);
-  Monster.addInventory(builder, inv);
-  Monster.addWeapons(builder, weapons);
-  Monster.addEquippedType(builder, Equipment.Weapon);
-  Monster.addEquipped(builder, axe);
-  int orc = Monster.endMonster(builder);
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  // Create our monster using `StartMonster()` and `EndMonster()`.
-  Monster.StartMonster(builder);
-  Monster.AddPos(builder, Vec3.CreateVec3(builder, 1.0f, 2.0f, 3.0f));
-  Monster.AddHp(builder, (short)300);
-  Monster.AddName(builder, name);
-  Monster.AddInventory(builder, inv);
-  Monster.AddColor(builder, Color.Red);
-  Monster.AddWeapons(builder, weapons);
-  Monster.AddEquippedType(builder, Equipment.Weapon);
-  Monster.AddEquipped(builder, axe.Value); // Axe
-  var orc = Monster.EndMonster(builder);
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  // Create our monster using `MonsterStart()` and `MonsterEnd()`.
-  sample.MonsterStart(builder)
-  sample.MonsterAddPos(builder, sample.CreateVec3(builder, 1.0, 2.0, 3.0))
-  sample.MonsterAddHp(builder, 300)
-  sample.MonsterAddName(builder, name)
-  sample.MonsterAddInventory(builder, inv)
-  sample.MonsterAddColor(builder, sample.ColorRed)
-  sample.MonsterAddWeapons(builder, weapons)
-  sample.MonsterAddEquippedType(builder, sample.EquipmentWeapon)
-  sample.MonsterAddEquipped(builder, axe)
-  orc := sample.MonsterEnd(builder)
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  # Create our monster by using `MonsterStart()` and `MonsterEnd()`.
-  MyGame.Sample.Monster.MonsterStart(builder)
-  MyGame.Sample.Monster.MonsterAddPos(builder,
-                          MyGame.Sample.Vec3.CreateVec3(builder, 1.0, 2.0, 3.0))
-  MyGame.Sample.Monster.MonsterAddHp(builder, 300)
-  MyGame.Sample.Monster.MonsterAddName(builder, name)
-  MyGame.Sample.Monster.MonsterAddInventory(builder, inv)
-  MyGame.Sample.Monster.MonsterAddColor(builder,
-                                        MyGame.Sample.Color.Color().Red)
-  MyGame.Sample.Monster.MonsterAddWeapons(builder, weapons)
-  MyGame.Sample.Monster.MonsterAddEquippedType(
-      builder, MyGame.Sample.Equipment.Equipment().Weapon)
-  MyGame.Sample.Monster.MonsterAddEquipped(builder, axe)
-  orc = MyGame.Sample.Monster.MonsterEnd(builder)
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  // Create our monster by using `startMonster()` and `endMonster()`.
-  MyGame.Sample.Monster.startMonster(builder);
-  MyGame.Sample.Monster.addPos(builder,
-                         MyGame.Sample.Vec3.createVec3(builder, 1.0, 2.0, 3.0));
-  MyGame.Sample.Monster.addHp(builder, 300);
-  MyGame.Sample.Monster.addColor(builder, MyGame.Sample.Color.Red)
-  MyGame.Sample.Monster.addName(builder, name);
-  MyGame.Sample.Monster.addInventory(builder, inv);
-  MyGame.Sample.Monster.addWeapons(builder, weapons);
-  MyGame.Sample.Monster.addEquippedType(builder, MyGame.Sample.Equipment.Weapon);
-  MyGame.Sample.Monster.addEquipped(builder, axe);
-  var orc = MyGame.Sample.Monster.endMonster(builder);
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  // Create our monster by using `StartMonster()` and `EndMonster()`.
-  \MyGame\Sample\Monster::StartMonster($builder);
-  \MyGame\Sample\Monster::AddPos($builder,
-                      \MyGame\Sample\Vec3::CreateVec3($builder, 1.0, 2.0, 3.0));
-  \MyGame\Sample\Monster::AddHp($builder, 300);
-  \MyGame\Sample\Monster::AddName($builder, $name);
-  \MyGame\Sample\Monster::AddInventory($builder, $inv);
-  \MyGame\Sample\Monster::AddColor($builder, \MyGame\Sample\Color::Red);
-  \MyGame\Sample\Monster::AddWeapons($builder, $weapons);
-  \MyGame\Sample\Monster::AddEquippedType($builder, \MyGame\Sample\Equipment::Weapon);
-  \MyGame\Sample\Monster::AddEquipped($builder, $axe);
-  $orc = \MyGame\Sample\Monster::EndMonster($builder);
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-  // Set his hit points to 300 and his mana to 150.
-  uint16_t hp = 300;
-  uint16_t mana = 150;
-
-  // Define an equipment union. `create` calls in C has a single
-  // argument for unions where C++ has both a type and a data argument.
-  ns(Equipment_union_ref_t) equipped = ns(Equipment_as_Weapon(axe));
-  ns(Vec3_t) pos = { 1.0f, 2.0f, 3.0f };
-  ns(Monster_create_as_root(B, &pos, mana, hp, name, inventory, ns(Color_Red),
-          weapons, equipped));
-~~~
-</div>
-
-Note how we create `Vec3` struct in-line in the table. Unlike tables, structs
-are simple combinations of scalars that are always stored inline, just like
-scalars themselves.
-
-**Important**: you should not nest tables or any other objects, which is why
-we created all the strings/vectors/tables that this monster refers to before
-`start`. If you try to create any of them between `start` and `end`, you
-will get an assert/exception/panic depending on your language.
-
-*Note: Since we are passing `150` as the `mana` field, which happens to be the
-default value, the field will not actually be written to the buffer, since the
-default value will be returned on query anyway. This is a nice space savings,
-especially if default values are common in your data. It also means that you do
-not need to be worried of adding a lot of fields that are only used in a small
-number of instances, as it will not bloat the buffer if unused.*
-
-<div class="language-cpp">
-<br>
-If you do not wish to set every field in a `table`, it may be more convenient to
-manually set each field of your monster, instead of calling `CreateMonster()`.
-The following snippet is functionally equivalent to the above code, but provides
-a bit more flexibility.
-<br>
-~~~{.cpp}
-  // You can use this code instead of `CreateMonster()`, to create our orc
-  // manually.
-  MonsterBuilder monster_builder(builder);
-  monster_builder.add_pos(&pos);
-  monster_builder.add_hp(hp);
-  monster_builder.add_name(name);
-  monster_builder.add_inventory(inventory);
-  monster_builder.add_color(Color_Red);
-  monster_builder.add_weapons(weapons);
-  monster_builder.add_equipped_type(Equipment_Weapon);
-  monster_builder.add_equpped(axe);
-  auto orc = monster_builder.Finish();
-~~~
-</div>
-<div class="language-c">
-If you do not wish to set every field in a `table`, it may be more convenient to
-manually set each field of your monster, instead of calling `create_monster_as_root()`.
-The following snippet is functionally equivalent to the above code, but provides
-a bit more flexibility.
-<br>
-~~~{.c}
-  // It is important to pair `start_as_root` with `end_as_root`.
-  ns(Monster_start_as_root(B));
-  ns(Monster_pos_create(B, 1.0f, 2.0f, 3.0f));
-  // or alternatively
-  //ns(Monster_pos_add(&pos);
-
-  ns(Monster_hp_add(B, hp));
-  // Notice that `Monser_name_add` adds a string reference unlike the
-  // add_str and add_strn variants.
-  ns(Monster_name_add(B, name));
-  ns(Monster_inventory_add(B, inventory));
-  ns(Monster_color_add(B, ns(Color_Red)));
-  ns(Monster_weapons_add(B, weapons));
-  ns(Monster_equipped_add(B, equipped));
-  // Complete the monster object and make it the buffer root object.
-  ns(Monster_end_as_root(B));
-~~~
-</div>
-
-Before finishing the serialization, let's take a quick look at FlatBuffer
-`union Equipped`. There are two parts to each FlatBuffer `union`. The first, is
-a hidden field `_type`, that is generated to hold the type of `table` referred
-to by the `union`. This allows you to know which type to cast to at runtime.
-Second, is the `union`'s data.
-
-In our example, the last two things we added to our `Monster` were the
-`Equipped Type` and the `Equipped` union itself.
-
-Here is a repetition these lines, to help highlight them more clearly:
-
-<div class="language-cpp">
-  ~~~{.cpp}
-    monster_builder.add_equipped_type(Equipment_Weapon); // Union type
-    monster_builder.add_equipped(axe); // Union data
-  ~~~
-</div>
-<div class="language-java">
-  ~~~{.java}
-    Monster.addEquippedType(builder, Equipment.Weapon); // Union type
-    Monster.addEquipped(axe); // Union data
-  ~~~
-</div>
-<div class="language-csharp">
-  ~~~{.cs}
-    Monster.AddEquippedType(builder, Equipment.Weapon); // Union type
-    Monster.AddEquipped(builder, axe.Value); // Union data
-  ~~~
-</div>
-<div class="language-go">
-  ~~~{.go}
-    sample.MonsterAddEquippedType(builder, sample.EquipmentWeapon) // Union type
-    sample.MonsterAddEquipped(builder, axe) // Union data
-  ~~~
-</div>
-<div class="language-python">
-  ~~~{.py}
-    MyGame.Sample.Monster.MonsterAddEquippedType(            # Union type
-        builder, MyGame.Sample.Equipment.Equipment().Weapon)
-    MyGame.Sample.Monster.MonsterAddEquipped(builder, axe)   # Union data
-  ~~~
-</div>
-<div class="language-javascript">
-  ~~~{.js}
-    MyGame.Sample.Monster.addEquippedType(builder, MyGame.Sample.Equipment.Weapon); // Union type
-    MyGame.Sample.Monster.addEquipped(builder, axe); // Union data
-  ~~~
-</div>
-<div class="language-php">
-  ~~~{.php}
-    \MyGame\Sample\Monster::AddEquippedType($builder, \MyGame\Sample\Equipment::Weapon); // Union type
-    \MyGame\Sample\Monster::AddEquipped($builder, $axe); // Union data
-  ~~~
-</div>
-<div class="language-c">
-~~~{.c}
-  // Add union type and data simultanously.
-  ns(Monster_equipped_Weapon_add(B, axe));
-~~~
-</div>
-
-After you have created your buffer, you will have the offset to the root of the
-data in the `orc` variable, so you can finish the buffer by calling the
-appropriate `finish` method.
-
-
-<div class="language-cpp">
-~~~{.cpp}
-  // Call `Finish()` to instruct the builder that this monster is complete.
-  // Note: Regardless of how you created the `orc`, you still need to call
-  // `Finish()` on the `FlatBufferBuilder`.
-  builder.Finish(orc); // You could also call `FinishMonsterBuffer(builder,
-                       //                                          orc);`.
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  // Call `finish()` to instruct the builder that this monster is complete.
-  builder.finish(orc); // You could also call `Monster.finishMonsterBuffer(builder, orc);`.
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  // Call `Finish()` to instruct the builder that this monster is complete.
-  builder.Finish(orc.Value); // You could also call `Monster.FinishMonsterBuffer(builder, orc);`.
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  // Call `Finish()` to instruct the builder that this monster is complete.
-  builder.Finish(orc)
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  # Call `Finish()` to instruct the builder that this monster is complete.
-  builder.Finish(orc)
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  // Call `finish()` to instruct the builder that this monster is complete.
-  builder.finish(orc); // You could also call `MyGame.Example.Monster.finishMonsterBuffer(builder,
-                       //                                                                 orc);`.
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  // Call `finish()` to instruct the builder that this monster is complete.
-   $builder->finish($orc); // You may also call `\MyGame\Sample\Monster::FinishMonsterBuffer(
-                           //                        $builder, $orc);`.
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-  // Because we used `Monster_create_as_root`, we do not need a `finish` call in C`.
-~~~
-</div>
-
-The buffer is now ready to be stored somewhere, sent over the network, be
-compressed, or whatever you'd like to do with it. You can access the buffer
-like so:
-
-<div class="language-cpp">
-~~~{.cpp}
-  // This must be called after `Finish()`.
-  uint8_t *buf = builder.GetBufferPointer();
-  int size = builder.GetSize(); // Returns the size of the buffer that
-                                // `GetBufferPointer()` points to.
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  // This must be called after `finish()`.
-  java.nio.ByteBuffer buf = builder.dataBuffer();
-  // The data in this ByteBuffer does NOT start at 0, but at buf.position().
-  // The number of bytes is buf.remaining().
-
-  // Alternatively this copies the above data out of the ByteBuffer for you:
-  bytes[] buf = builder.sizedByteArray();
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  // This must be called after `Finish()`.
-  var buf = builder.DataBuffer; // Of type `FlatBuffers.ByteBuffer`.
-  // The data in this ByteBuffer does NOT start at 0, but at buf.Position.
-  // The end of the data is marked by buf.Length, so the size is
-  // buf.Length - buf.Position.
-
-  // Alternatively this copies the above data out of the ByteBuffer for you:
-  bytes[] buf = builder.SizedByteArray();
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  // This must be called after `Finish()`.
-  buf := builder.FinishedBytes() // Of type `byte[]`.
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  # This must be called after `Finish()`.
-  buf = builder.Output() // Of type `bytearray`.
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  // This must be called after `finish()`.
-  var buf = builder.asUint8Array(); // Of type `Uint8Array`.
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  // This must be called after `finish()`.
-  $buf = $builder->dataBuffer(); // Of type `Google\FlatBuffers\ByteBuffer`
-  // The data in this ByteBuffer does NOT start at 0, but at buf->getPosition().
-  // The end of the data is marked by buf->capacity(), so the size is
-  // buf->capacity() - buf->getPosition().
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-  uint8_t *buf;
-  size_t size;
-
-  // Allocate and extract a readable buffer from internal builder heap.
-  // The returned buffer must be deallocated using `free`.
-  // NOTE: Finalizing the buffer does NOT change the builder, it
-  // just creates a snapshot of the builder content.
-  buf = flatcc_builder_finalize_buffer(B, &size);
-  // use buf
-  free(buf);
-
-  // Optionally reset builder to reuse builder without deallocating
-  // internal stack and heap.
-  flatcc_builder_reset(B);
-  // build next buffer.
-  // ...
-
-  // Cleanup.
-  flatcc_builder_clear(B);
-~~~
-</div>
-
-Now you can write the bytes to a file, send them over the network..
-**Make sure your file mode (or tranfer protocol) is set to BINARY, not text.**
-If you transfer a FlatBuffer in text mode, the buffer will be corrupted,
-which will lead to hard to find problems when you read the buffer.
-
-#### Reading Orc FlatBuffers
-
-Now that we have successfully created an `Orc` FlatBuffer, the monster data can
-be saved, sent over a network, etc. Let's now adventure into the inverse, and
-deserialize a FlatBuffer.
-
-This section requires the same import/include, namespace, etc. requirements as
-before:
-
-<div class="language-cpp">
-~~~{.cpp}
-  #include "monster_generate.h" // This was generated by `flatc`.
-
-  using namespace MyGame::Sample; // Specified in the schema.
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  import MyGame.Sample.*; //The `flatc` generated files. (Monster, Vec3, etc.)
-
-  import com.google.flatbuffers.FlatBufferBuilder;
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  using FlatBuffers;
-  using MyGame.Sample; // The `flatc` generated files. (Monster, Vec3, etc.)
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  import (
-          flatbuffers "github.com/google/flatbuffers/go"
-          sample "MyGame/Sample"
-  )
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  import flatbuffers
-
-  # Generated by `flatc`.
-  import MyGame.Sample.Any
-  import MyGame.Sample.Color
-  import MyGame.Sample.Monster
-  import MyGame.Sample.Vec3
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  // The following code is for JavaScript module loaders (e.g. Node.js). See
-  // below for a browser-based HTML/JavaScript example of including the library.
-  var flatbuffers = require('/js/flatbuffers').flatbuffers;
-  var MyGame = require('./monster_generated').MyGame; // Generated by `flatc`.
-
-  //--------------------------------------------------------------------------//
-
-  // The following code is for browser-based HTML/JavaScript. Use the above code
-  // for JavaScript module loaders (e.g. Node.js).
-  <script src="../js/flatbuffers.js"></script>
-  <script src="monster_generated.js"></script> // Generated by `flatc`.
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  // It is recommended that your use PSR autoload when using FlatBuffers in PHP.
-  // Here is an example from `SampleBinary.php`:
-  function __autoload($class_name) {
-    // The last segment of the class name matches the file name.
-    $class = substr($class_name, strrpos($class_name, "\\") + 1);
-    $root_dir = join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)))); // `flatbuffers` root.
-
-    // Contains the `*.php` files for the FlatBuffers library and the `flatc` generated files.
-    $paths = array(join(DIRECTORY_SEPARATOR, array($root_dir, "php")),
-                   join(DIRECTORY_SEPARATOR, array($root_dir, "samples", "MyGame", "Sample")));
-    foreach ($paths as $path) {
-      $file = join(DIRECTORY_SEPARATOR, array($path, $class . ".php"));
-      if (file_exists($file)) {
-        require($file);
-        break;
-      }
-    }
-  }
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-  // Only needed if we don't have `#include "monster_builder.h"`.
-  #include "monster_reader.h"
-
-  #undef ns
-  #define ns(x) FLATBUFFERS_WRAP_NAMESPACE(MyGame_Sample, x) // Specified in the schema.
-~~~
-</div>
-
-Then, assuming you have a buffer of bytes received from disk,
-network, etc., you can create start accessing the buffer like so:
-
-**Again, make sure you read the bytes in BINARY mode, otherwise the code below
-won't work**
-
-<div class="language-cpp">
-~~~{.cpp}
-  uint8_t *buffer_pointer = /* the data you just read */;
-
-  // Get a pointer to the root object inside the buffer.
-  auto monster = GetMonster(buffer_pointer);
-
-  // `monster` is of type `Monster *`.
-  // Note: root object pointers are NOT the same as `buffer_pointer`.
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  byte[] bytes = /* the data you just read */
-  java.nio.ByteBuffer buf = java.nio.ByteBuffer.wrap(bytes);
-
-  // Get an accessor to the root object inside the buffer.
-  Monster monster = Monster.getRootAsMonster(buf);
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  byte[] bytes = /* the data you just read */
-  var buf = new ByteBuffer(bytes);
-
-  // Get an accessor to the root object inside the buffer.
-  var monster = Monster.GetRootAsMonster(buf);
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  var buf []byte = /* the data you just read */
-
-  // Get an accessor to the root object inside the buffer.
-  monster := sample.GetRootAsMonster(buf, 0)
-
-  // Note: We use `0` for the offset here, which is typical for most buffers
-  // you would read. If you wanted to read from `builder.Bytes` directly, you
-  // would need to pass in the offset of `builder.Head()`, as the builder
-  // constructs the buffer backwards, so may not start at offset 0.
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  buf = /* the data you just read, in an object of type "bytearray" */
-
-  // Get an accessor to the root object inside the buffer.
-  monster = MyGame.Sample.Monster.Monster.GetRootAsMonster(buf, 0)
-
-  # Note: We use `0` for the offset here, which is typical for most buffers
-  # you would read.  If you wanted to read from the `builder.Bytes` directly,
-  # you would need to pass in the offset of `builder.Head()`, as the builder
-  # constructs the buffer backwards, so may not start at offset 0.
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  var bytes = /* the data you just read, in an object of type "Uint8Array" */
-  var buf = new flatbuffers.ByteBuffer(bytes);
-
-  // Get an accessor to the root object inside the buffer.
-  var monster = MyGame.Sample.Monster.getRootAsMonster(buf);
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  $bytes = /* the data you just read, in a string */
-  $buf = Google\FlatBuffers\ByteBuffer::wrap($bytes);
-
-  // Get an accessor to the root object inside the buffer.
-  $monster = \MyGame\Sample\Monster::GetRootAsMonster($buf);
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-  // Note that we use the `table_t` suffix when reading a table object
-  // as opposed to the `ref_t` suffix used during the construction of
-  // the buffer.
-  ns(Monster_table_t) monster = ns(Monster_as_root(buffer));
-
-  // Note: root object pointers are NOT the same as the `buffer` pointer.
-~~~
-</div>
-
-If you look in the generated files from the schema compiler, you will see it generated
-accessors for all non-`deprecated` fields. For example:
-
-<div class="language-cpp">
-~~~{.cpp}
-  auto hp = monster->hp();
-  auto mana = monster->mana();
-  auto name = monster->name()->c_str();
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  short hp = monster.hp();
-  short mana = monster.mana();
-  String name = monster.name();
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  // For C#, unlike other languages support by FlatBuffers, most values (except for
-  // vectors and unions) are available as propreties instead of asccessor methods.
-  var hp = monster.Hp
-  var mana = monster.Mana
-  var name = monster.Name
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  hp := monster.Hp()
-  mana := monster.Mana()
-  name := string(monster.Name()) // Note: `monster.Name()` returns a byte[].
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  hp = monster.Hp()
-  mana = monster.Mana()
-  name = monster.Name()
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  var hp = $monster.hp();
-  var mana = $monster.mana();
-  var name = $monster.name();
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  $hp = $monster->getHp();
-  $mana = $monster->getMana();
-  $name = monster->getName();
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-  uint16_t hp = ns(Monster_hp(monster));
-  uint16_t mana = ns(Monster_mana(monster));
-  flatbuffers_string_t name = ns(Monster_name(monster));
-~~~
-</div>
-
-These should hold `300`, `150`, and `"Orc"` respectively.
-
-*Note: The default value `150` wasn't stored in `mana`, but we are still able to retrieve it.*
-
-To access sub-objects, in the case of our `pos`, which is a `Vec3`:
-
-<div class="language-cpp">
-~~~{.cpp}
-  auto pos = monster->pos();
-  auto x = pos->x();
-  auto y = pos->y();
-  auto z = pos->z();
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  Vec3 pos = monster.pos();
-  float x = pos.x();
-  float y = pos.y();
-  float z = pos.z();
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  var pos = monster.Pos
-  var x = pos.X
-  var y = pos.Y
-  var z = pos.Z
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  pos := monster.Pos(nil)
-  x := pos.X()
-  y := pos.Y()
-  z := pos.Z()
-
-  // Note: Whenever you access a new object, like in `Pos()`, a new temporary
-  // accessor object gets created. If your code is very performance sensitive,
-  // you can pass in a pointer to an existing `Vec3` instead of `nil`. This
-  // allows you to reuse it across many calls to reduce the amount of object
-  // allocation/garbage collection.
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  pos = monster.Pos()
-  x = pos.X()
-  y = pos.Y()
-  z = pos.Z()
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  var pos = monster.pos();
-  var x = pos.x();
-  var y = pos.y();
-  var z = pos.z();
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  $pos = $monster->getPos();
-  $x = $pos->getX();
-  $y = $pos->getY();
-  $z = $pos->getZ();
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-  ns(Vec3_struct_t) pos = ns(Monster_pos(monster));
-  float x = ns(Vec3_x(pos));
-  float y = ns(Vec3_y(pos));
-  float z = ns(Vec3_z(pos));
-~~~
-</div>
-
-`x`, `y`, and `z` will contain `1.0`, `2.0`, and `3.0`, respectively.
-
-*Note: Had we not set `pos` during serialization, it would be a `NULL`-value.*
-
-Similarly, we can access elements of the inventory `vector` by indexing it. You
-can also iterate over the length of the array/vector representing the
-FlatBuffers `vector`.
-
-<div class="language-cpp">
-~~~{.cpp}
-  auto inv = monster->inventory(); // A pointer to a `flatbuffers::Vector<>`.
-  auto inv_len = inv->Length();
-  auto third_item = inv->Get(2);
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  int invLength = monster.inventoryLength();
-  byte thirdItem = monster.inventory(2);
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  int invLength = monster.InventoryLength;
-  var thirdItem = monster.GetInventory(2);
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  invLength := monster.InventoryLength()
-  thirdItem := monster.Inventory(2)
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  inv_len = monster.InventoryLength()
-  third_item = monster.Inventory(2)
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  var invLength = monster.inventoryLength();
-  var thirdItem = monster.inventory(2);
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  $inv_len = $monster->getInventoryLength();
-  $third_item = $monster->getInventory(2);
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-    // If `inv` hasn't been set, it will be null. It is valid get
-    // the length of null which will be 0, useful for iteration.
-    flatbuffers_uint8_vec_t inv = ns(Monster_inventory(monster));
-    size_t inv_len = flatbuffers_uint8_vec_len(inv);
-~~~
-</div>
-
-For `vector`s of `table`s, you can access the elements like any other vector,
-except your need to handle the result as a FlatBuffer `table`:
-
-<div class="language-cpp">
-~~~{.cpp}
-  auto weapons = monster->weapons(); // A pointer to a `flatbuffers::Vector<>`.
-  auto weapon_len = weapons->Length();
-  auto second_weapon_name = weapons->Get(1)->name()->str();
-  auto second_weapon_damage = weapons->Get(1)->damage()
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  int weaponsLength = monster.weaponsLength();
-  String secondWeaponName = monster.weapons(1).name();
-  short secondWeaponDamage = monster.weapons(1).damage();
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  int weaponsLength = monster.WeaponsLength;
-  var secondWeaponName = monster.GetWeapons(1).Name;
-  var secondWeaponDamage = monster.GetWeapons(1).Damage;
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  weaponLength := monster.WeaponsLength()
-  weapon := new(sample.Weapon) // We need a `sample.Weapon` to pass into `monster.Weapons()`
-                               // to capture the output of the function.
-  if monster.Weapons(weapon, 1) {
-          secondWeaponName := weapon.Name()
-          secondWeaponDamage := weapon.Damage()
-  }
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  weapons_length = monster.WeaponsLength()
-  second_weapon_name = monster.Weapons(1).Name()
-  second_weapon_damage = monster.Weapons(1).Damage()
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  var weaponsLength = monster.weaponsLength();
-  var secondWeaponName = monster.weapons(1).name();
-  var secondWeaponDamage = monster.weapons(1).damage();
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  $weapons_len = $monster->getWeaponsLength();
-  $second_weapon_name = $monster->getWeapons(1)->getName();
-  $second_weapon_damage = $monster->getWeapons(1)->getDamage();
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-  ns(Weapon_vec_t) weapons = ns(Monster_weapons(monster));
-  size_t weapons_len = ns(Weapon_vec_len(weapons));
-  // We can use `const char *` instead of `flatbuffers_string_t`.
-  const char *second_weapon_name = ns(Weapon_name(ns(Weapon_vec_at(weapons, 1))));
-  uint16_t second_weapon_damage =  ns(Weapon_damage(ns(Weapon_vec_at(weapons, 1))));
-~~~
-</div>
-
-Last, we can access our `Equipped` FlatBuffer `union`. Just like when we created
-the `union`, we need to get both parts of the `union`: the type and the data.
-
-We can access the type to dynamically cast the data as needed (since the
-`union` only stores a FlatBuffer `table`).
-
-<div class="language-cpp">
-~~~{.cpp}
-  auto union_type = monster.equipped_type();
-
-  if (union_type == Equipment_Weapon) {
-    auto weapon = static_cast<const Weapon*>(monster->equipped()); // Requires `static_cast`
-                                                                   // to type `const Weapon*`.
-
-    auto weapon_name = weapon->name()->str(); // "Axe"
-    auto weapon_damage = weapon->damage();    // 5
-  }
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  int unionType = monster.EquippedType();
-
-  if (unionType == Equipment.Weapon) {
-    Weapon weapon = (Weapon)monster.equipped(new Weapon()); // Requires explicit cast
-                                                            // to `Weapon`.
-
-    String weaponName = weapon.name();    // "Axe"
-    short weaponDamage = weapon.damage(); // 5
-  }
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  var unionType = monster.EquippedType;
-
-  if (unionType == Equipment.Weapon) {
-    var weapon = (Weapon)monster.GetEquipped(new Weapon()); // Requires explicit cast
-                                                            // to `Weapon`.
-
-    var weaponName = weapon.Name;     // "Axe"
-    var weaponDamage = weapon.Damage; // 5
-  }
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  // We need a `flatbuffers.Table` to capture the output of the
-  // `monster.Equipped()` function.
-  unionTable := new(flatbuffers.Table)
-
-  if monster.Equipped(unionTable) {
-          unionType := monster.EquippedType()
-
-          if unionType == sample.EquipmentWeapon {
-                  // Create a `sample.Weapon` object that can be initialized with the contents
-                  // of the `flatbuffers.Table` (`unionTable`), which was populated by
-                  // `monster.Equipped()`.
-                  unionWeapon = new(sample.Weapon)
-                  unionWeapon.Init(unionTable.Bytes, unionTable.Pos)
-
-                  weaponName = unionWeapon.Name()
-                  weaponDamage = unionWeapon.Damage()
-          }
-  }
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  union_type = monster.EquippedType()
-
-  if union_type == MyGame.Sample.Equipment.Equipment().Weapon:
-    # `monster.Equipped()` returns a `flatbuffers.Table`, which can be used to
-    # initialize a `MyGame.Sample.Weapon.Weapon()`.
-    union_weapon = MyGame.Sample.Weapon.Weapon()
-    union_weapon.Init(monster.Equipped().Bytes, monster.Equipped().Pos)
-
-    weapon_name = union_weapon.Name()     // 'Axe'
-    weapon_damage = union_weapon.Damage() // 5
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  var unionType = monster.equippedType();
-
-  if (unionType == MyGame.Sample.Equipment.Weapon) {
-    var weapon_name = monster.equipped(new MyGame.Sample.Weapon()).name();     // 'Axe'
-    var weapon_damage = monster.equipped(new MyGame.Sample.Weapon()).damage(); // 5
-  }
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  $union_type = $monster->getEquippedType();
-
-  if ($union_type == \MyGame\Sample\Equipment::Weapon) {
-    $weapon_name = $monster->getEquipped(new \MyGame\Sample\Weapon())->getName();     // "Axe"
-    $weapon_damage = $monster->getEquipped(new \MyGame\Sample\Weapon())->getDamage(); // 5
-  }
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-  // Access union type field.
-  if (ns(Monster_equipped_type(monster)) == ns(Equipment_Weapon)) {
-      // Cast to appropriate type:
-      // C allows for silent void pointer assignment, so we need no explicit cast.
-      ns(Weapon_table_t) weapon = ns(Monster_equipped(monster));
-      const char *weapon_name = ns(Weapon_name(weapon)); // "Axe"
-      uint16_t weapon_damage = ns(Weapon_damage(weapon)); // 5
-  }
-~~~
-</div>
-
-## Mutating FlatBuffers
-
-As you saw above, typically once you have created a FlatBuffer, it is read-only
-from that moment on. There are, however, cases where you have just received a
-FlatBuffer, and you'd like to modify something about it before sending it on to
-another recipient. With the above functionality, you'd have to generate an
-entirely new FlatBuffer, while tracking what you modified in your own data
-structures. This is inconvenient.
-
-For this reason FlatBuffers can also be mutated in-place. While this is great
-for making small fixes to an existing buffer, you generally want to create
-buffers from scratch whenever possible, since it is much more efficient and the
-API is much more general purpose.
-
-To get non-const accessors, invoke `flatc` with `--gen-mutable`.
-
-Similar to how we read fields using the accessors above, we can now use the
-mutators like so:
-
-<div class="language-cpp">
-~~~{.cpp}
-  auto monster = GetMutableMonster(buffer_pointer);  // non-const
-  monster->mutate_hp(10);                      // Set the table `hp` field.
-  monster->mutable_pos()->mutate_z(4);         // Set struct field.
-  monster->mutable_inventory()->Mutate(0, 1);  // Set vector element.
-~~~
-</div>
-<div class="language-java">
-~~~{.java}
-  Monster monster = Monster.getRootAsMonster(buf);
-  monster.mutateHp(10);            // Set table field.
-  monster.pos().mutateZ(4);        // Set struct field.
-  monster.mutateInventory(0, 1);   // Set vector element.
-~~~
-</div>
-<div class="language-csharp">
-~~~{.cs}
-  var monster = Monster.GetRootAsMonster(buf);
-  monster.MutateHp(10);            // Set table field.
-  monster.Pos.MutateZ(4);          // Set struct field.
-  monster.MutateInventory(0, 1);   // Set vector element.
-~~~
-</div>
-<div class="language-go">
-~~~{.go}
-  <API for mutating FlatBuffers is not yet available in Go.>
-~~~
-</div>
-<div class="language-python">
-~~~{.py}
-  <API for mutating FlatBuffers is not yet available in Python.>
-~~~
-</div>
-<div class="language-javascript">
-~~~{.js}
-  <API for mutating FlatBuffers is not yet support in JavaScript.>
-~~~
-</div>
-<div class="language-php">
-~~~{.php}
-  <API for mutating FlatBuffers is not yet supported in PHP.>
-~~~
-</div>
-<div class="language-c">
-~~~{.c}
-  <API for in-place mutating FlatBuffers will not be supported in C
-  (except in-place vector sorting is possible).>
-~~~
-</div>
-
-We use the somewhat verbose term `mutate` instead of `set` to indicate that this
-is a special use case, not to be confused with the default way of constructing
-FlatBuffer data.
-
-After the above mutations, you can send on the FlatBuffer to a new recipient
-without any further work!
-
-Note that any `mutate` functions on a table will return a boolean, which is
-`false` if the field we're trying to set is not present in the buffer. Fields
-that are not present if they weren't set, or even if they happen to be equal to
-the default value. For example, in the creation code above, the `mana`
-field is equal to `150`, which is the default value, so it was never stored in
-the buffer. Trying to call the corresponding `mutate` method for `mana` on such
-data will return `false`, and the value won't actually be modified!
-
-One way to solve this is to call `ForceDefaults` on a FlatBufferBuilder to
-force all fields you set to actually be written. This, of course, increases the
-size of the buffer somewhat, but this may be acceptable for a mutable buffer.
-
-If this is not sufficient, other ways of mutating FlatBuffers may be supported
-in your language through an object based API (`--gen-object-api`) or reflection.
-See the individual language documents for support.
-
-## JSON with FlatBuffers
-
-#### Using `flatc` as a Conversion Tool
-
-This is often the preferred method to use JSON with FlatBuffers, as it doesn't
-require you to add any new code to your program. It is also efficient, since you
-can ship with the binary data. The drawback is that it requires an extra step
-for your users/developers to perform (although it may be able to be automated
-as part of your compilation).
-
-Lets say you have a JSON file that describes your monster. In this example,
-we will use the file `flatbuffers/samples/monsterdata.json`.
-
-Here are the contents of the file:
-
-~~~{.json}
-{
-  pos: {
-    x: 1,
-    y: 2,
-    z: 3
-  },
-  hp: 300,
-  name: "Orc"
-}
-~~~
-
-You can run this file through the `flatc` compile with the `-b` flag and
-our `monster.fbs` schema to produce a FlatBuffer binary file.
-
-~~~{.sh}
-./../flatc -b monster.fbs monsterdata.json
-~~~
-
-The output of this will be a file `monsterdata.bin`, which will contain the
-FlatBuffer binary representation of the contents from our `.json` file.
-
-<div class="language-cpp">
-*Note: If you're working in C++, you can also parse JSON at runtime. See the
-[Use in C++](@ref flatbuffers_guide_use_cpp) section of the Programmer's
-Guide for more information.*
-</div>
-<div class="language-c">
-*Note: If you're working in C, the `flatcc --json` (not `flatc`)
-compiler will generate schema specific high performance json parsers and
-printers that you can compile and use at runtime. The `flatc` compiler (not
-`flatcc`) on the other hand, is still useful for general offline json to
-flatbuffer conversion from a given schema. There are no current plans
-for `flatcc` to support this.*
-</div>
-
-## Advanced Features for Each Language
-
-Each language has a dedicated `Use in XXX` page in the Programmer's Guide
-to cover the nuances of FlatBuffers in that language.
-
-For your chosen language, see:
-
-<div class="language-cpp">
-[Use in C++](@ref flatbuffers_guide_use_cpp)
-</div>
-<div class="language-java">
-[Use in Java/C#](@ref flatbuffers_guide_use_java_c-sharp)
-</div>
-<div class="language-csharp">
-[Use in Java/C#](@ref flatbuffers_guide_use_java_c-sharp)
-</div>
-<div class="language-go">
-[Use in Go](@ref flatbuffers_guide_use_go)
-</div>
-<div class="language-python">
-[Use in Python](@ref flatbuffers_guide_use_python)
-</div>
-<div class="language-javascript">
-[Use in JavaScript](@ref flatbuffers_guide_use_javascript)
-</div>
-<div class="language-php">
-[Use in PHP](@ref flatbuffers_guide_use_php)
-</div>
-<div class="language-c">
-[Use in C](@ref flatbuffers_guide_use_c)
-</div>
-
-<br>
diff --git a/third_party/flatbuffers/docs/source/WhitePaper.md b/third_party/flatbuffers/docs/source/WhitePaper.md
deleted file mode 100755
index e504ada..0000000
--- a/third_party/flatbuffers/docs/source/WhitePaper.md
+++ /dev/null
@@ -1,128 +0,0 @@
-FlatBuffers white paper    {#flatbuffers_white_paper}
-=======================
-
-This document tries to shed some light on to the "why" of FlatBuffers, a
-new serialization library.
-
-## Motivation
-
-Back in the good old days, performance was all about instructions and
-cycles. Nowadays, processing units have run so far ahead of the memory
-subsystem, that making an efficient application should start and finish
-with thinking about memory. How much you use of it. How you lay it out
-and access it. How you allocate it. When you copy it.
-
-Serialization is a pervasive activity in a lot programs, and a common
-source of memory inefficiency, with lots of temporary data structures
-needed to parse and represent data, and inefficient allocation patterns
-and locality.
-
-If it would be possible to do serialization with no temporary objects,
-no additional allocation, no copying, and good locality, this could be
-of great value. The reason serialization systems usually don't manage
-this is because it goes counter to forwards/backwards compatability, and
-platform specifics like endianness and alignment.
-
-FlatBuffers is what you get if you try anyway.
-
-In particular, FlatBuffers focus is on mobile hardware (where memory
-size and memory bandwidth is even more constrained than on desktop
-hardware), and applications that have the highest performance needs:
-games.
-
-## FlatBuffers
-
-*This is a summary of FlatBuffers functionality, with some rationale.
-A more detailed description can be found in the FlatBuffers
-documentation.*
-
-### Summary
-
-A FlatBuffer is a binary buffer containing nested objects (structs,
-tables, vectors,..) organized using offsets so that the data can be
-traversed in-place just like any pointer-based data structure. Unlike
-most in-memory data structures however, it uses strict rules of
-alignment and endianness (always little) to ensure these buffers are
-cross platform. Additionally, for objects that are tables, FlatBuffers
-provides forwards/backwards compatibility and general optionality of
-fields, to support most forms of format evolution.
-
-You define your object types in a schema, which can then be compiled to
-C++ or Java for low to zero overhead reading & writing.
-Optionally, JSON data can be dynamically parsed into buffers.
-
-### Tables
-
-Tables are the cornerstone of FlatBuffers, since format evolution is
-essential for most applications of serialization. Typically, dealing
-with format changes is something that can be done transparently during
-the parsing process of most serialization solutions out there.
-But a FlatBuffer isn't parsed before it is accessed.
-
-Tables get around this by using an extra indirection to access fields,
-through a *vtable*. Each table comes with a vtable (which may be shared
-between multiple tables with the same layout), and contains information
-where fields for this particular kind of instance of vtable are stored.
-The vtable may also indicate that the field is not present (because this
-FlatBuffer was written with an older version of the software, of simply
-because the information was not necessary for this instance, or deemed
-deprecated), in which case a default value is returned.
-
-Tables have a low overhead in memory (since vtables are small and
-shared) and in access cost (an extra indirection), but provide great
-flexibility. Tables may even cost less memory than the equivalent
-struct, since fields do not need to be stored when they are equal to
-their default.
-
-FlatBuffers additionally offers "naked" structs, which do not offer
-forwards/backwards compatibility, but can be even smaller (useful for
-very small objects that are unlikely to change, like e.g. a coordinate
-pair or a RGBA color).
-
-### Schemas
-
-While schemas reduce some generality (you can't just read any data
-without having its schema), they have a lot of upsides:
-
--   Most information about the format can be factored into the generated
-    code, reducing memory needed to store data, and time to access it.
-
--   The strong typing of the data definitions means less error
-    checking/handling at runtime (less can go wrong).
-
--   A schema enables us to access a buffer without parsing.
-
-FlatBuffer schemas are fairly similar to those of the incumbent,
-Protocol Buffers, and generally should be readable to those familiar
-with the C family of languages. We chose to improve upon the features
-offered by .proto files in the following ways:
-
--   Deprecation of fields instead of manual field id assignment.
-    Extending an object in a .proto means hunting for a free slot among
-    the numbers (preferring lower numbers since they have a more compact
-    representation). Besides being inconvenient, it also makes removing
-    fields problematic: you either have to keep them, not making it
-    obvious that this field shouldn't be read/written anymore, and still
-    generating accessors. Or you remove it, but now you risk that
-    there's still old data around that uses that field by the time
-    someone reuses that field id, with nasty consequences.
-
--   Differentiating between tables and structs (see above). Effectively
-    all table fields are `optional`, and all struct fields are
-    `required`.
-
--   Having a native vector type instead of `repeated`. This gives you a
-    length without having to collect all items, and in the case of
-    scalars provides for a more compact representation, and one that
-    guarantees adjacency.
-
--   Having a native `union` type instead of using a series of `optional`
-    fields, all of which must be checked individually.
-
--   Being able to define defaults for all scalars, instead of having to
-    deal with their optionality at each access.
-
--   A parser that can deal with both schemas and data definitions (JSON
-    compatible) uniformly.
-
-<br>
diff --git a/third_party/flatbuffers/docs/source/doxyfile b/third_party/flatbuffers/docs/source/doxyfile
deleted file mode 100755
index 770da9f..0000000
--- a/third_party/flatbuffers/docs/source/doxyfile
+++ /dev/null
@@ -1,2364 +0,0 @@
-# Doxyfile 1.8.5
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project.
-#
-# All text after a double hash (##) is considered a comment and is placed in
-# front of the TAG it is preceding.
-#
-# All text after a single hash (#) is considered a comment and will be ignored.
-# The format is:
-# TAG = value [value, ...]
-# For lists, items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (\" \").
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the config file
-# that follow. The default is UTF-8 which is also the encoding used for all text
-# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
-# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
-# for the list of possible encodings.
-# The default value is: UTF-8.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
-# double-quotes, unless you are using Doxywizard) that should identify the
-# project for which the documentation is generated. This name is used in the
-# title of most generated pages and in a few other places.
-# The default value is: My Project.
-
-PROJECT_NAME           = "FlatBuffers"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
-# could be handy for archiving the generated documentation or if some version
-# control system is used.
-
-PROJECT_NUMBER         =
-
-# Using the PROJECT_BRIEF tag one can provide an optional one line description
-# for a project that appears at the top of each page and should give viewer a
-# quick idea about the purpose of the project. Keep the description short.
-
-PROJECT_BRIEF          =
-
-# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
-# the documentation. The maximum height of the logo should not exceed 55 pixels
-# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
-# to the output directory.
-
-PROJECT_LOGO           =
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
-# into which the generated documentation will be written. If a relative path is
-# entered, it will be relative to the location where doxygen was started. If
-# left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = ".."
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
-# directories (in 2 levels) under the output directory of each output format and
-# will distribute the generated files over these directories. Enabling this
-# option can be useful when feeding doxygen a huge amount of source files, where
-# putting all generated files in the same directory would otherwise causes
-# performance problems for the file system.
-# The default value is: NO.
-
-CREATE_SUBDIRS         = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# Possible values are: Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-
-# Traditional, Croatian, Czech, Danish, Dutch, English, Esperanto, Farsi,
-# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en,
-# Korean, Korean-en, Latvian, Norwegian, Macedonian, Persian, Polish,
-# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish,
-# Turkish, Ukrainian and Vietnamese.
-# The default value is: English.
-
-OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
-# descriptions after the members that are listed in the file and class
-# documentation (similar to Javadoc). Set to NO to disable this.
-# The default value is: YES.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
-# description of a member or function before the detailed description
-#
-# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-# The default value is: YES.
-
-REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator that is
-# used to form the text in various listings. Each string in this list, if found
-# as the leading text of the brief description, will be stripped from the text
-# and the result, after processing the whole list, is used as the annotated
-# text. Otherwise, the brief description is used as-is. If left blank, the
-# following values are used ($name is automatically replaced with the name of
-# the entity):The $name class, The $name widget, The $name file, is, provides,
-# specifies, contains, represents, a, an and the.
-
-ABBREVIATE_BRIEF       = "The $name class" \
-                         "The $name widget" \
-                         "The $name file" \
-                         is \
-                         provides \
-                         specifies \
-                         contains \
-                         represents \
-                         a \
-                         an \
-                         the
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# doxygen will generate a detailed section even if there is only a brief
-# description.
-# The default value is: NO.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-# The default value is: NO.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
-# before files name in the file list and in the header files. If set to NO the
-# shortest path that makes the file name unique will be used
-# The default value is: YES.
-
-FULL_PATH_NAMES        = NO
-
-# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
-# Stripping is only done if one of the specified strings matches the left-hand
-# part of the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the path to
-# strip.
-#
-# Note that you can specify absolute paths here, but also relative paths, which
-# will be relative from the directory where doxygen is started.
-# This tag requires that the tag FULL_PATH_NAMES is set to YES.
-
-STRIP_FROM_PATH        =
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
-# path mentioned in the documentation of a class, which tells the reader which
-# header file to include in order to use a class. If left blank only the name of
-# the header file containing the class definition is used. Otherwise one should
-# specify the list of include paths that are normally passed to the compiler
-# using the -I flag.
-
-STRIP_FROM_INC_PATH    =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
-# less readable) file names. This can be useful is your file systems doesn't
-# support long names like on DOS, Mac, or CD-ROM.
-# The default value is: NO.
-
-SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
-# first line (until the first dot) of a Javadoc-style comment as the brief
-# description. If set to NO, the Javadoc-style will behave just like regular Qt-
-# style comments (thus requiring an explicit @brief command for a brief
-# description.)
-# The default value is: NO.
-
-JAVADOC_AUTOBRIEF      = YES
-
-# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
-# line (until the first dot) of a Qt-style comment as the brief description. If
-# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
-# requiring an explicit \brief command for a brief description.)
-# The default value is: NO.
-
-QT_AUTOBRIEF           = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
-# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
-# a brief description. This used to be the default behavior. The new default is
-# to treat a multi-line C++ comment block as a detailed description. Set this
-# tag to YES if you prefer the old behavior instead.
-#
-# Note that setting this tag to YES also means that rational rose comments are
-# not recognized any more.
-# The default value is: NO.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
-# documentation from any documented member that it re-implements.
-# The default value is: YES.
-
-INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
-# new page for each member. If set to NO, the documentation of a member will be
-# part of the file/class/namespace that contains it.
-# The default value is: NO.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
-# uses this value to replace tabs by spaces in code fragments.
-# Minimum value: 1, maximum value: 16, default value: 4.
-
-TAB_SIZE               = 2
-
-# This tag can be used to specify a number of aliases that act as commands in
-# the documentation. An alias has the form:
-# name=value
-# For example adding
-# "sideeffect=@par Side Effects:\n"
-# will allow you to put the command \sideeffect (or @sideeffect) in the
-# documentation, which will result in a user-defined paragraph with heading
-# "Side Effects:". You can put \n's in the value part of an alias to insert
-# newlines.
-
-ALIASES                =
-
-# This tag can be used to specify a number of word-keyword mappings (TCL only).
-# A mapping has the form "name=value". For example adding "class=itcl::class"
-# will allow you to use the command class in the itcl::class meaning.
-
-TCL_SUBST              =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-# only. Doxygen will then generate output that is more tailored for C. For
-# instance, some of the names that are used will be different. The list of all
-# members will be omitted, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_FOR_C  = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
-# Python sources only. Doxygen will then generate output that is more tailored
-# for that language. For instance, namespaces will be presented as packages,
-# qualified scopes will look different, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources. Doxygen will then generate output that is tailored for Fortran.
-# The default value is: NO.
-
-OPTIMIZE_FOR_FORTRAN   = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for VHDL.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_VHDL   = NO
-
-# Doxygen selects the parser to use depending on the extension of the files it
-# parses. With this tag you can assign which parser to use for a given
-# extension. Doxygen has a built-in mapping, but you can override or extend it
-# using this tag. The format is ext=language, where ext is a file extension, and
-# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
-# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make
-# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
-# (default is Fortran), use: inc=Fortran f=C.
-#
-# Note For files without extension you can use no_extension as a placeholder.
-#
-# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
-# the files are not read by doxygen.
-
-EXTENSION_MAPPING      =
-
-# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
-# according to the Markdown format, which allows for more readable
-# documentation. See http://daringfireball.net/projects/markdown/ for details.
-# The output of markdown processing is further processed by doxygen, so you can
-# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
-# case of backward compatibilities issues.
-# The default value is: YES.
-
-MARKDOWN_SUPPORT       = YES
-
-# When enabled doxygen tries to link words that correspond to documented
-# classes, or namespaces to their corresponding documentation. Such a link can
-# be prevented in individual cases by by putting a % sign in front of the word
-# or globally by setting AUTOLINK_SUPPORT to NO.
-# The default value is: YES.
-
-AUTOLINK_SUPPORT       = NO  # Due to the multiple languages included in the API
-                             # reference for FlatBuffers, the Auto-links were
-                             # wrong more often than not.
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should set this
-# tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string);
-# versus func(std::string) {}). This also make the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-# The default value is: NO.
-
-BUILTIN_STL_SUPPORT    = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-# The default value is: NO.
-
-CPP_CLI_SUPPORT        = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
-# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
-# will parse them like normal C++ but will assume all classes use public instead
-# of private inheritance when no explicit protection keyword is present.
-# The default value is: NO.
-
-SIP_SUPPORT            = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate
-# getter and setter methods for a property. Setting this option to YES will make
-# doxygen to replace the get and set methods by a property in the documentation.
-# This will only work if the methods are indeed getting or setting a simple
-# type. If this is not the case, or you want to show the methods anyway, you
-# should set this option to NO.
-# The default value is: YES.
-
-IDL_PROPERTY_SUPPORT   = NO
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-# The default value is: NO.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# Set the SUBGROUPING tag to YES to allow class member groups of the same type
-# (for instance a group of public functions) to be put as a subgroup of that
-# type (e.g. under the Public Functions section). Set it to NO to prevent
-# subgrouping. Alternatively, this can be done per class using the
-# \nosubgrouping command.
-# The default value is: YES.
-
-SUBGROUPING            = YES
-
-# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
-# are shown inside the group in which they are included (e.g. using \ingroup)
-# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
-# and RTF).
-#
-# Note that this feature does not work in combination with
-# SEPARATE_MEMBER_PAGES.
-# The default value is: NO.
-
-INLINE_GROUPED_CLASSES = NO
-
-# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
-# with only public data fields or simple typedef fields will be shown inline in
-# the documentation of the scope in which they are defined (i.e. file,
-# namespace, or group documentation), provided this scope is documented. If set
-# to NO, structs, classes, and unions are shown on a separate page (for HTML and
-# Man pages) or section (for LaTeX and RTF).
-# The default value is: NO.
-
-INLINE_SIMPLE_STRUCTS  = NO
-
-# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
-# enum is documented as struct, union, or enum with the name of the typedef. So
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-# with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically be
-# useful for C code in case the coding convention dictates that all compound
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-# The default value is: NO.
-
-TYPEDEF_HIDES_STRUCT   = NO
-
-# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
-# cache is used to resolve symbols given their name and scope. Since this can be
-# an expensive process and often the same symbol appears multiple times in the
-# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
-# doxygen will become slower. If the cache is too large, memory is wasted. The
-# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
-# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
-# symbols. At the end of a run doxygen will report the cache usage and suggest
-# the optimal cache size from a speed point of view.
-# Minimum value: 0, maximum value: 9, default value: 0.
-
-LOOKUP_CACHE_SIZE      = 0
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available. Private
-# class members and static file members will be hidden unless the
-# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
-# Note: This will also disable the warnings about undocumented members that are
-# normally produced when WARNINGS is set to YES.
-# The default value is: NO.
-
-EXTRACT_ALL            = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
-# be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PRIVATE        = NO
-
-# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
-# scope will be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PACKAGE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
-# included in the documentation.
-# The default value is: NO.
-
-EXTRACT_STATIC         = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
-# locally in source files will be included in the documentation. If set to NO
-# only classes defined in header files are included. Does not have any effect
-# for Java sources.
-# The default value is: YES.
-
-EXTRACT_LOCAL_CLASSES  = NO
-
-# This flag is only useful for Objective-C code. When set to YES local methods,
-# which are defined in the implementation section but not in the interface are
-# included in the documentation. If set to NO only methods in the interface are
-# included.
-# The default value is: NO.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be
-# extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base name of
-# the file that contains the anonymous namespace. By default anonymous namespace
-# are hidden.
-# The default value is: NO.
-
-EXTRACT_ANON_NSPACES   = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
-# undocumented members inside documented classes or files. If set to NO these
-# members will be included in the various overviews, but no documentation
-# section is generated. This option has no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy. If set
-# to NO these classes will be included in the various overviews. This option has
-# no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
-# (class|struct|union) declarations. If set to NO these declarations will be
-# included in the documentation.
-# The default value is: NO.
-
-HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
-# documentation blocks found inside the body of a function. If set to NO these
-# blocks will be appended to the function's detailed documentation block.
-# The default value is: NO.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation that is typed after a
-# \internal command is included. If the tag is set to NO then the documentation
-# will be excluded. Set it to YES to include the internal documentation.
-# The default value is: NO.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
-# names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# and Mac users are advised to set this option to NO.
-# The default value is: system dependent.
-
-CASE_SENSE_NAMES       = NO
-
-# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
-# their full class and namespace scopes in the documentation. If set to YES the
-# scope will be hidden.
-# The default value is: NO.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
-# the files that are included by a file in the documentation of that file.
-# The default value is: YES.
-
-SHOW_INCLUDE_FILES     = YES
-
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
-# files with double quotes in the documentation rather than with sharp brackets.
-# The default value is: NO.
-
-FORCE_LOCAL_INCLUDES   = NO
-
-# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
-# documentation for inline members.
-# The default value is: YES.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
-# (detailed) documentation of file and class members alphabetically by member
-# name. If set to NO the members will appear in declaration order.
-# The default value is: YES.
-
-SORT_MEMBER_DOCS       = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
-# descriptions of file, namespace and class members alphabetically by member
-# name. If set to NO the members will appear in declaration order.
-# The default value is: NO.
-
-SORT_BRIEF_DOCS        = YES
-
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
-# (brief and detailed) documentation of class members so that constructors and
-# destructors are listed first. If set to NO the constructors will appear in the
-# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
-# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
-# member documentation.
-# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
-# detailed member documentation.
-# The default value is: NO.
-
-SORT_MEMBERS_CTORS_1ST = NO
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
-# of group names into alphabetical order. If set to NO the group names will
-# appear in their defined order.
-# The default value is: NO.
-
-SORT_GROUP_NAMES       = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
-# fully-qualified names, including namespaces. If set to NO, the class list will
-# be sorted only by class name, not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the alphabetical
-# list.
-# The default value is: NO.
-
-SORT_BY_SCOPE_NAME     = NO
-
-# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
-# type resolution of all parameters of a function it will reject a match between
-# the prototype and the implementation of a member function even if there is
-# only one candidate or it is obvious which candidate to choose by doing a
-# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
-# accept a match between prototype and implementation in such cases.
-# The default value is: NO.
-
-STRICT_PROTO_MATCHING  = NO
-
-# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
-# todo list. This list is created by putting \todo commands in the
-# documentation.
-# The default value is: YES.
-
-GENERATE_TODOLIST      = NO
-
-# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
-# test list. This list is created by putting \test commands in the
-# documentation.
-# The default value is: YES.
-
-GENERATE_TESTLIST      = NO
-
-# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
-# list. This list is created by putting \bug commands in the documentation.
-# The default value is: YES.
-
-GENERATE_BUGLIST       = NO
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
-# the deprecated list. This list is created by putting \deprecated commands in
-# the documentation.
-# The default value is: YES.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional documentation
-# sections, marked by \if <section_label> ... \endif and \cond <section_label>
-# ... \endcond blocks.
-
-ENABLED_SECTIONS       =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
-# initial value of a variable or macro / define can have for it to appear in the
-# documentation. If the initializer consists of more lines than specified here
-# it will be hidden. Use a value of 0 to hide initializers completely. The
-# appearance of the value of individual variables and macros / defines can be
-# controlled using \showinitializer or \hideinitializer command in the
-# documentation regardless of this setting.
-# Minimum value: 0, maximum value: 10000, default value: 30.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
-# the bottom of the documentation of classes and structs. If set to YES the list
-# will mention the files that were used to generate the documentation.
-# The default value is: YES.
-
-SHOW_USED_FILES        = YES
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
-# will remove the Files entry from the Quick Index and from the Folder Tree View
-# (if specified).
-# The default value is: YES.
-
-SHOW_FILES             = YES
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
-# page. This will remove the Namespaces entry from the Quick Index and from the
-# Folder Tree View (if specified).
-# The default value is: YES.
-
-SHOW_NAMESPACES        = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from
-# the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command command input-file, where command is the value of the
-# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
-# by doxygen. Whatever the program writes to standard output is used as the file
-# version. For an example see the documentation.
-
-FILE_VERSION_FILTER    =
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
-# by doxygen. The layout file controls the global structure of the generated
-# output files in an output format independent way. To create the layout file
-# that represents doxygen's defaults, run doxygen with the -l option. You can
-# optionally specify a file name after the option, if omitted DoxygenLayout.xml
-# will be used as the name of the layout file.
-#
-# Note that if you run doxygen from a directory containing a file called
-# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
-# tag is left empty.
-
-LAYOUT_FILE            = doxygen_layout.xml
-
-# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
-# the reference definitions. This must be a list of .bib files. The .bib
-# extension is automatically appended if omitted. This requires the bibtex tool
-# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
-# For LaTeX the style of the bibliography can be controlled using
-# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
-# search path. Do not use file names with spaces, bibtex cannot handle them. See
-# also \cite for info how to create references.
-
-CITE_BIB_FILES         =
-
-#---------------------------------------------------------------------------
-# Configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated to
-# standard output by doxygen. If QUIET is set to YES this implies that the
-# messages are off.
-# The default value is: NO.
-
-QUIET                  = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
-# this implies that the warnings are on.
-#
-# Tip: Turn warnings on while writing the documentation.
-# The default value is: YES.
-
-WARNINGS               = YES
-
-# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
-# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
-# will automatically be disabled.
-# The default value is: YES.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some parameters
-# in a documented function, or documenting parameters that don't exist or using
-# markup commands wrongly.
-# The default value is: YES.
-
-WARN_IF_DOC_ERROR      = NO
-
-# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
-# are documented, but have no documentation for their parameters or return
-# value. If set to NO doxygen will only warn about wrong or incomplete parameter
-# documentation, but not about the absence of documentation.
-# The default value is: NO.
-
-WARN_NO_PARAMDOC       = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that doxygen
-# can produce. The string should contain the $file, $line, and $text tags, which
-# will be replaced by the file and line number from which the warning originated
-# and the warning text. Optionally the format may contain $version, which will
-# be replaced by the version of the file (if it could be obtained via
-# FILE_VERSION_FILTER)
-# The default value is: $file:$line: $text.
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning and error
-# messages should be written. If left blank the output is written to standard
-# error (stderr).
-
-WARN_LOGFILE           =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag is used to specify the files and/or directories that contain
-# documented source files. You may enter file names like myfile.cpp or
-# directories like /usr/src/myproject. Separate the files or directories with
-# spaces.
-# Note: If this tag is empty the current directory is searched.
-
-INPUT = "FlatBuffers.md" \
-        "Building.md" \
-        "Compiler.md" \
-        "Schemas.md" \
-        "CppUsage.md" \
-        "CUsage.md" \
-        "GoUsage.md" \
-        "JavaCsharpUsage.md" \
-        "JavaScriptUsage.md" \
-        "PHPUsage.md" \
-        "PythonUsage.md" \
-        "Support.md" \
-        "Benchmarks.md" \
-        "WhitePaper.md" \
-        "FlexBuffers.md" \
-        "Internals.md" \
-        "Grammar.md" \
-        "../../CONTRIBUTING.md" \
-        "Tutorial.md" \
-        "GoApi.md" \
-        "groups" \
-        "../../java/com/google/flatbuffers" \
-        "../../python/flatbuffers/builder.py" \
-        "../../js/flatbuffers.js" \
-        "../../php/FlatbufferBuilder.php" \
-        "../../net/FlatBuffers/FlatBufferBuilder.cs" \
-        "../../include/flatbuffers/flatbuffers.h" \
-        "../../go/builder.go"
-
-# This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
-# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
-# documentation (see: http://www.gnu.org/software/libiconv) for the list of
-# possible encodings.
-# The default value is: UTF-8.
-
-INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
-# *.h) to filter out the source-files in the directories. If left blank the
-# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
-# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
-# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
-# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
-# *.qsf, *.as and *.js.
-
-FILE_PATTERNS          = *.c \
-                         *.cc \
-                         *.cxx \
-                         *.cpp \
-                         *.c++ \
-                         *.java \
-                         *.ii \
-                         *.ixx \
-                         *.ipp \
-                         *.i++ \
-                         *.inl \
-                         *.idl \
-                         *.ddl \
-                         *.odl \
-                         *.h \
-                         *.hh \
-                         *.hxx \
-                         *.hpp \
-                         *.h++ \
-                         *.cs \
-                         *.d \
-                         *.php \
-                         *.php4 \
-                         *.php5 \
-                         *.phtml \
-                         *.inc \
-                         *.m \
-                         *.markdown \
-                         *.md \
-                         *.mm \
-                         *.dox \
-                         *.py \
-                         *.f90 \
-                         *.f \
-                         *.for \
-                         *.tcl \
-                         *.vhd \
-                         *.vhdl \
-                         *.ucf \
-                         *.qsf \
-                         *.as \
-                         *.js \
-                         *.go
-
-# The RECURSIVE tag can be used to specify whether or not subdirectories should
-# be searched for input files as well.
-# The default value is: NO.
-
-RECURSIVE              = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should be
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-#
-# Note that relative paths are relative to the directory from which doxygen is
-# run.
-
-EXCLUDE                =
-
-# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
-# directories that are symbolic links (a Unix file system feature) are excluded
-# from the input.
-# The default value is: NO.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories.
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       = *_test.py |
-                         __init__.py
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the
-# output. The symbol name can be a fully qualified name, a word, or if the
-# wildcard * is used, a substring. Examples: ANamespace, AClass,
-# AClass::ANamespace, ANamespace::*Test
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories use the pattern */test/*
-
-EXCLUDE_SYMBOLS        =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or directories
-# that contain example code fragments that are included (see the \include
-# command).
-
-EXAMPLE_PATH           = "GoApi_generated.txt"
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
-# *.h) to filter out the source-files in the directories. If left blank all
-# files are included.
-
-EXAMPLE_PATTERNS       = *
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude commands
-# irrespective of the value of the RECURSIVE tag.
-# The default value is: NO.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or directories
-# that contain images that are to be included in the documentation (see the
-# \image command).
-
-IMAGE_PATH             =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command:
-#
-# <filter> <input-file>
-#
-# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
-# name of an input file. Doxygen will then use the output that the filter
-# program writes to standard output. If FILTER_PATTERNS is specified, this tag
-# will be ignored.
-#
-# Note that the filter must not add or remove lines; it is applied before the
-# code is scanned, but not when the output code is generated. If lines are added
-# or removed, the anchors will not be placed correctly.
-
-INPUT_FILTER           =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form: pattern=filter
-# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
-# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
-# patterns match the file name, INPUT_FILTER is applied.
-
-FILTER_PATTERNS        = *.py=py_filter
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER ) will also be used to filter the input files that are used for
-# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
-# The default value is: NO.
-
-FILTER_SOURCE_FILES    = NO
-
-# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
-# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
-# it is also possible to disable source filtering for a specific pattern using
-# *.ext= (so without naming a filter).
-# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
-
-FILTER_SOURCE_PATTERNS =
-
-# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
-# is part of the input, its contents will be placed on the main page
-# (index.html). This can be useful if you have a project on for instance GitHub
-# and want to reuse the introduction page also for the doxygen output.
-
-USE_MDFILE_AS_MAINPAGE = FlatBuffers.md
-
-#---------------------------------------------------------------------------
-# Configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
-# generated. Documented entities will be cross-referenced with these sources.
-#
-# Note: To get rid of all source code in the generated output, make sure that
-# also VERBATIM_HEADERS is set to NO.
-# The default value is: NO.
-
-SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body of functions,
-# classes and enums directly into the documentation.
-# The default value is: NO.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
-# special comment blocks from generated source code fragments. Normal C, C++ and
-# Fortran comments will always remain visible.
-# The default value is: YES.
-
-STRIP_CODE_COMMENTS    = NO
-
-# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
-# function all documented functions referencing it will be listed.
-# The default value is: NO.
-
-REFERENCED_BY_RELATION = NO
-
-# If the REFERENCES_RELATION tag is set to YES then for each documented function
-# all documented entities called/used by that function will be listed.
-# The default value is: NO.
-
-REFERENCES_RELATION    = NO
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
-# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
-# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
-# link to the documentation.
-# The default value is: YES.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
-# source code will show a tooltip with additional information such as prototype,
-# brief description and links to the definition and documentation. Since this
-# will make the HTML file larger and loading of large files a bit slower, you
-# can opt to disable this feature.
-# The default value is: YES.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-SOURCE_TOOLTIPS        = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code will
-# point to the HTML generated by the htags(1) tool instead of doxygen built-in
-# source browser. The htags tool is part of GNU's global source tagging system
-# (see http://www.gnu.org/software/global/global.html). You will need version
-# 4.8.6 or higher.
-#
-# To use it do the following:
-# - Install the latest version of global
-# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
-# - Make sure the INPUT points to the root of the source tree
-# - Run doxygen as normal
-#
-# Doxygen will invoke htags (and that will in turn invoke gtags), so these
-# tools must be available from the command line (i.e. in the search path).
-#
-# The result: instead of the source browser generated by doxygen, the links to
-# source code will now point to the output of htags.
-# The default value is: NO.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
-# verbatim copy of the header file for each class for which an include is
-# specified. Set to NO to disable this.
-# See also: Section \class.
-# The default value is: YES.
-
-VERBATIM_HEADERS       = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
-# compounds will be generated. Enable this if the project contains a lot of
-# classes, structs, unions or interfaces.
-# The default value is: YES.
-
-ALPHABETICAL_INDEX     = YES
-
-# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
-# which the alphabetical index list will be split.
-# Minimum value: 1, maximum value: 20, default value: 5.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all classes will
-# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
-# can be used to specify a prefix (or a list of prefixes) that should be ignored
-# while generating the index headers.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-IGNORE_PREFIX          =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
-# The default value is: YES.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
-# generated HTML page (for example: .htm, .php, .asp).
-# The default value is: .html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
-# each generated HTML page. If the tag is left blank doxygen will generate a
-# standard header.
-#
-# To get valid HTML the header file that includes any scripts and style sheets
-# that doxygen needs, which is dependent on the configuration options used (e.g.
-# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
-# default header using
-# doxygen -w html new_header.html new_footer.html new_stylesheet.css
-# YourConfigFile
-# and then modify the file new_header.html. See also section "Doxygen usage"
-# for information on how to generate the default header that doxygen normally
-# uses.
-# Note: The header is subject to change so you typically have to regenerate the
-# default header when upgrading to a newer version of doxygen. For a description
-# of the possible markers and block names see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_HEADER            = ../header.html
-
-# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
-# generated HTML page. If the tag is left blank doxygen will generate a standard
-# footer. See HTML_HEADER for more information on how to generate a default
-# footer and what special commands can be used inside the footer. See also
-# section "Doxygen usage" for information on how to generate the default footer
-# that doxygen normally uses.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FOOTER            = ../footer.html
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
-# sheet that is used by each HTML page. It can be used to fine-tune the look of
-# the HTML output. If left blank doxygen will generate a default style sheet.
-# See also section "Doxygen usage" for information on how to generate the style
-# sheet that doxygen normally uses.
-# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
-# it is more robust and this tag (HTML_STYLESHEET) will in the future become
-# obsolete.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_STYLESHEET        =
-
-# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-
-# defined cascading style sheet that is included after the standard style sheets
-# created by doxygen. Using this option one can overrule certain style aspects.
-# This is preferred over using HTML_STYLESHEET since it does not replace the
-# standard style sheet and is therefor more robust against future updates.
-# Doxygen will copy the style sheet file to the output directory. For an example
-# see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_STYLESHEET  = style.css
-
-# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the HTML output directory. Note
-# that these files will be copied to the base HTML output directory. Use the
-# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
-# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
-# files will be copied as-is; there are no commands or markers available.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_FILES       = "../images/fpl_logo_small.png" \
-                         "../images/ftv2mnode.png" \
-                         "../images/ftv2pnode.png"
-
-# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
-# will adjust the colors in the stylesheet and background images according to
-# this color. Hue is specified as an angle on a colorwheel, see
-# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
-# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
-# purple, and 360 is red again.
-# Minimum value: 0, maximum value: 359, default value: 220.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_HUE    = 220
-
-# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
-# in the HTML output. For a value of 0 the output will use grayscales only. A
-# value of 255 will produce the most vivid colors.
-# Minimum value: 0, maximum value: 255, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_SAT    = 100
-
-# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
-# luminance component of the colors in the HTML output. Values below 100
-# gradually make the output lighter, whereas values above 100 make the output
-# darker. The value divided by 100 is the actual gamma applied, so 80 represents
-# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
-# change the gamma.
-# Minimum value: 40, maximum value: 240, default value: 80.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_GAMMA  = 80
-
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-# page will contain the date and time when the page was generated. Setting this
-# to NO can help when comparing the output of multiple runs.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_TIMESTAMP         = YES
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_DYNAMIC_SECTIONS  = NO
-
-# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
-# shown in the various tree structured indices initially; the user can expand
-# and collapse entries dynamically later on. Doxygen will expand the tree to
-# such a level that at most the specified number of entries are visible (unless
-# a fully collapsed tree already exceeds this amount). So setting the number of
-# entries 1 will produce a full collapsed tree by default. 0 is a special value
-# representing an infinite number of entries and will result in a full expanded
-# tree by default.
-# Minimum value: 0, maximum value: 9999, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_INDEX_NUM_ENTRIES = 100
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files will be
-# generated that can be used as input for Apple's Xcode 3 integrated development
-# environment (see: http://developer.apple.com/tools/xcode/), introduced with
-# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
-# Makefile in the HTML output directory. Running make will produce the docset in
-# that directory and running make install will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
-# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
-# for more information.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_DOCSET        = NO
-
-# This tag determines the name of the docset feed. A documentation feed provides
-# an umbrella under which multiple documentation sets from a single provider
-# (such as a company or product suite) can be grouped.
-# The default value is: Doxygen generated docs.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_FEEDNAME        = "Doxygen generated docs"
-
-# This tag specifies a string that should uniquely identify the documentation
-# set bundle. This should be a reverse domain-name style string, e.g.
-# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_BUNDLE_ID       = org.doxygen.Project
-
-# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
-# the documentation publisher. This should be a reverse domain-name style
-# string, e.g. com.mycompany.MyDocSet.documentation.
-# The default value is: org.doxygen.Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
-
-# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
-# The default value is: Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_NAME  = Publisher
-
-# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
-# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
-# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
-# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
-# Windows.
-#
-# The HTML Help Workshop contains a compiler that can convert all HTML output
-# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
-# files are now used as the Windows 98 help format, and will replace the old
-# Windows help format (.hlp) on all Windows platforms in the future. Compressed
-# HTML files also contain an index, a table of contents, and you can search for
-# words in the documentation. The HTML workshop also contains a viewer for
-# compressed HTML files.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_HTMLHELP      = NO
-
-# The CHM_FILE tag can be used to specify the file name of the resulting .chm
-# file. You can add a path in front of the file if the result should not be
-# written to the html output directory.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_FILE               =
-
-# The HHC_LOCATION tag can be used to specify the location (absolute path
-# including file name) of the HTML help compiler ( hhc.exe). If non-empty
-# doxygen will try to run the HTML help compiler on the generated index.hhp.
-# The file has to be specified with full path.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-HHC_LOCATION           =
-
-# The GENERATE_CHI flag controls if a separate .chi index file is generated (
-# YES) or that it should be included in the master .chm file ( NO).
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-GENERATE_CHI           = NO
-
-# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
-# and project file content.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_INDEX_ENCODING     =
-
-# The BINARY_TOC flag controls whether a binary table of contents is generated (
-# YES) or a normal table of contents ( NO) in the .chm file.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members to
-# the table of contents of the HTML help documentation and to the tree view.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-TOC_EXPAND             = NO
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
-# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
-# (.qch) of the generated HTML documentation.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_QHP           = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
-# the file name of the resulting .qch file. The path specified is relative to
-# the HTML output folder.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QCH_FILE               =
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
-# Project output. For more information please see Qt Help Project / Namespace
-# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_NAMESPACE          = org.doxygen.Project
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
-# Help Project output. For more information please see Qt Help Project / Virtual
-# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
-# folders).
-# The default value is: doc.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_VIRTUAL_FOLDER     = doc
-
-# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
-# filter to add. For more information please see Qt Help Project / Custom
-# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
-# filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_NAME   =
-
-# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
-# custom filter to add. For more information please see Qt Help Project / Custom
-# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
-# filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_ATTRS  =
-
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-# project's filter section matches. Qt Help Project / Filter Attributes (see:
-# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_SECT_FILTER_ATTRS  =
-
-# The QHG_LOCATION tag can be used to specify the location of Qt's
-# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
-# generated .qhp file.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHG_LOCATION           =
-
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
-# generated, together with the HTML files, they form an Eclipse help plugin. To
-# install this plugin and make it available under the help contents menu in
-# Eclipse, the contents of the directory containing the HTML and XML files needs
-# to be copied into the plugins directory of eclipse. The name of the directory
-# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
-# After copying Eclipse needs to be restarted before the help appears.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_ECLIPSEHELP   = NO
-
-# A unique identifier for the Eclipse help plugin. When installing the plugin
-# the directory name containing the HTML and XML files should also have this
-# name. Each documentation set should have its own identifier.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
-
-ECLIPSE_DOC_ID         = org.doxygen.Project
-
-# If you want full control over the layout of the generated HTML pages it might
-# be necessary to disable the index and replace it with your own. The
-# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
-# of each HTML page. A value of NO enables the index and the value YES disables
-# it. Since the tabs in the index contain the same information as the navigation
-# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-DISABLE_INDEX          = NO
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-# structure should be generated to display hierarchical information. If the tag
-# value is set to YES, a side panel will be generated containing a tree-like
-# index structure (just like the one that is generated for HTML Help). For this
-# to work a browser that supports JavaScript, DHTML, CSS and frames is required
-# (i.e. any modern browser). Windows users are probably better off using the
-# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
-# further fine-tune the look of the index. As an example, the default style
-# sheet generated by doxygen has an example that shows how to put an image at
-# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
-# the same information as the tab index, you could consider setting
-# DISABLE_INDEX to YES when enabling this option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_TREEVIEW      = YES
-
-# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
-# doxygen will group on one line in the generated HTML documentation.
-#
-# Note that a value of 0 will completely suppress the enum values from appearing
-# in the overview section.
-# Minimum value: 0, maximum value: 20, default value: 4.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
-# to set the initial width (in pixels) of the frame in which the tree is shown.
-# Minimum value: 0, maximum value: 1500, default value: 250.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-TREEVIEW_WIDTH         = 250
-
-# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
-# external symbols imported via tag files in a separate window.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-EXT_LINKS_IN_WINDOW    = NO
-
-# Use this tag to change the font size of LaTeX formulas included as images in
-# the HTML documentation. When you change the font size after a successful
-# doxygen run you need to manually remove any form_*.png images from the HTML
-# output directory to force them to be regenerated.
-# Minimum value: 8, maximum value: 50, default value: 10.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_FONTSIZE       = 10
-
-# Use the FORMULA_TRANPARENT tag to determine whether or not the images
-# generated for formulas are transparent PNGs. Transparent PNGs are not
-# supported properly for IE 6.0, but are supported on all modern browsers.
-#
-# Note that when changing this option you need to delete any form_*.png files in
-# the HTML output directory before the changes have effect.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_TRANSPARENT    = YES
-
-# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
-# http://www.mathjax.org) which uses client side Javascript for the rendering
-# instead of using prerendered bitmaps. Use this if you do not have LaTeX
-# installed or if you want to formulas look prettier in the HTML output. When
-# enabled you may also need to install MathJax separately and configure the path
-# to it using the MATHJAX_RELPATH option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-USE_MATHJAX            = NO
-
-# When MathJax is enabled you can set the default output format to be used for
-# the MathJax output. See the MathJax site (see:
-# http://docs.mathjax.org/en/latest/output.html) for more details.
-# Possible values are: HTML-CSS (which is slower, but has the best
-# compatibility), NativeMML (i.e. MathML) and SVG.
-# The default value is: HTML-CSS.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_FORMAT         = HTML-CSS
-
-# When MathJax is enabled you need to specify the location relative to the HTML
-# output directory using the MATHJAX_RELPATH option. The destination directory
-# should contain the MathJax.js script. For instance, if the mathjax directory
-# is located at the same level as the HTML output directory, then
-# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
-# Content Delivery Network so you can quickly see the result without installing
-# MathJax. However, it is strongly recommended to install a local copy of
-# MathJax from http://www.mathjax.org before deployment.
-# The default value is: http://cdn.mathjax.org/mathjax/latest.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
-
-# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
-# extension names that should be enabled during MathJax rendering. For example
-# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_EXTENSIONS     =
-
-# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
-# of code that will be used on startup of the MathJax code. See the MathJax site
-# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
-# example see the documentation.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_CODEFILE       =
-
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
-# the HTML output. The underlying search engine uses javascript and DHTML and
-# should work on any modern browser. Note that when using HTML help
-# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
-# there is already a search function so this one should typically be disabled.
-# For large projects the javascript based search engine can be slow, then
-# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
-# search using the keyboard; to jump to the search box use <access key> + S
-# (what the <access key> is depends on the OS and browser, but it is typically
-# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
-# key> to jump into the search results window, the results can be navigated
-# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
-# the search. The filter options can be selected when the cursor is inside the
-# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
-# to select a filter and <Enter> or <escape> to activate or cancel the filter
-# option.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-SEARCHENGINE           = YES
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a web server instead of a web client using Javascript. There
-# are two flavours of web server based searching depending on the
-# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
-# searching and an index file used by the script. When EXTERNAL_SEARCH is
-# enabled the indexing and searching needs to be provided by external tools. See
-# the section "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SERVER_BASED_SEARCH    = NO
-
-# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
-# script for searching. Instead the search results are written to an XML file
-# which needs to be processed by an external indexer. Doxygen will invoke an
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
-# search results.
-#
-# Doxygen ships with an example indexer ( doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/).
-#
-# See the section "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH        = NO
-
-# The SEARCHENGINE_URL should point to a search engine hosted by a web server
-# which will return the search results when EXTERNAL_SEARCH is enabled.
-#
-# Doxygen ships with an example indexer ( doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/). See the section "External Indexing and
-# Searching" for details.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHENGINE_URL       =
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
-# search data is written to a file for indexing by an external tool. With the
-# SEARCHDATA_FILE tag the name of this file can be specified.
-# The default file is: searchdata.xml.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHDATA_FILE        = searchdata.xml
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
-# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
-# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
-# projects and redirect the results back to the right project.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH_ID     =
-
-# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
-# projects other than the one defined by this configuration file, but that are
-# all added to the same external search index. Each project needs to have a
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
-# to a relative location where the documentation can be found. The format is:
-# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTRA_SEARCH_MAPPINGS  =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
-# The default value is: YES.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked.
-#
-# Note that when enabling USE_PDFLATEX this option is only used for generating
-# bitmaps for formulas in the HTML output, but not in the Makefile that is
-# written to the output directory.
-# The default file is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
-# index for LaTeX.
-# The default file is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used by the
-# printer.
-# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
-# 14 inches) and executive (7.25 x 10.5 inches).
-# The default value is: a4.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PAPER_TYPE             = a4
-
-# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. To get the times font for
-# instance you can specify
-# EXTRA_PACKAGES=times
-# If left blank no extra packages will be included.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
-# generated LaTeX document. The header should contain everything until the first
-# chapter. If it is left blank doxygen will generate a standard header. See
-# section "Doxygen usage" for information on how to let doxygen write the
-# default header to a separate file.
-#
-# Note: Only use a user-defined header if you know what you are doing! The
-# following commands have a special meaning inside the header: $title,
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will
-# replace them by respectively the title of the page, the current date and time,
-# only the current date, the version number of doxygen, the project name (see
-# PROJECT_NAME), or the project number (see PROJECT_NUMBER).
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HEADER           =
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
-# generated LaTeX document. The footer should contain everything after the last
-# chapter. If it is left blank doxygen will generate a standard footer.
-#
-# Note: Only use a user-defined footer if you know what you are doing!
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_FOOTER           =
-
-# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the LATEX_OUTPUT output
-# directory. Note that the files will be copied as-is; there are no commands or
-# markers available.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_FILES      =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
-# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
-# contain links (just like the HTML output) instead of page references. This
-# makes the output suitable for online browsing using a PDF viewer.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PDF_HYPERLINKS         = YES
-
-# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
-# the PDF file directly from the LaTeX files. Set this option to YES to get a
-# higher quality PDF documentation.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
-# command to the generated LaTeX files. This will instruct LaTeX to keep running
-# if errors occur, instead of asking the user for help. This option is also used
-# when generating formulas in HTML.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BATCHMODE        = NO
-
-# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
-# index chapters (such as File Index, Compound Index, etc.) in the output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HIDE_INDICES     = NO
-
-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
-# code with syntax highlighting in the LaTeX output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_SOURCE_CODE      = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. See
-# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
-# The default value is: plain.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BIB_STYLE        = plain
-
-#---------------------------------------------------------------------------
-# Configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
-# RTF output is optimized for Word 97 and may not look too pretty with other RTF
-# readers/editors.
-# The default value is: NO.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: rtf.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
-# contain hyperlink fields. The RTF file will contain links (just like the HTML
-# output) instead of page references. This makes the output suitable for online
-# browsing using Word or some other Word compatible readers that support those
-# fields.
-#
-# Note: WordPad (write) and others do not support links.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's config
-# file, i.e. a series of assignments. You only have to provide replacements,
-# missing definitions are set to their default value.
-#
-# See also section "Doxygen usage" for information on how to generate the
-# default style sheet that doxygen normally uses.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an RTF document. Syntax is
-# similar to doxygen's config file. A template extensions file can be generated
-# using doxygen -e rtf extensionFile.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_EXTENSIONS_FILE    =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
-# classes and files.
-# The default value is: NO.
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it. A directory man3 will be created inside the directory specified by
-# MAN_OUTPUT.
-# The default directory is: man.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to the generated
-# man pages. In case the manual section does not start with a number, the number
-# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
-# optional.
-# The default value is: .3.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_EXTENSION          = .3
-
-# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
-# will generate one additional man file for each entity documented in the real
-# man page(s). These additional files only source the real man page, but without
-# them the man command would be unable to find the correct page.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
-# captures the structure of the code including all documentation.
-# The default value is: NO.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: xml.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_OUTPUT             = xml
-
-# The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a
-# validating XML parser to check the syntax of the XML files.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_SCHEMA             =
-
-# The XML_DTD tag can be used to specify a XML DTD, which can be used by a
-# validating XML parser to check the syntax of the XML files.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_DTD                =
-
-# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
-# listings (including syntax highlighting and cross-referencing information) to
-# the XML output. Note that enabling this will significantly increase the size
-# of the XML output.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the DOCBOOK output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
-# that can be used to generate PDF.
-# The default value is: NO.
-
-GENERATE_DOCBOOK       = NO
-
-# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
-# front of it.
-# The default directory is: docbook.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_OUTPUT         = docbook
-
-#---------------------------------------------------------------------------
-# Configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
-# Definitions (see http://autogen.sf.net) file that captures the structure of
-# the code including all documentation. Note that this feature is still
-# experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
-# file that captures the structure of the code including all documentation.
-#
-# Note that this feature is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
-# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
-# output from the Perl module output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
-# formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO the
-# size of the Perl module output will be much smaller and Perl will parse it
-# just the same.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file are
-# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
-# so different doxyrules.make files included by the same Makefile don't
-# overwrite each other's variables.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
-# C-preprocessor directives found in the sources and include files.
-# The default value is: YES.
-
-ENABLE_PREPROCESSING   = NO
-
-# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
-# in the source code. If set to NO only conditional compilation will be
-# performed. Macro expansion can be done in a controlled way by setting
-# EXPAND_ONLY_PREDEF to YES.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-MACRO_EXPANSION        = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
-# the macro expansion is limited to the macros specified with the PREDEFINED and
-# EXPAND_AS_DEFINED tags.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_ONLY_PREDEF     = NO
-
-# If the SEARCH_INCLUDES tag is set to YES the includes files in the
-# INCLUDE_PATH will be searched if a #include is found.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by the
-# preprocessor.
-# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will be
-# used.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that are
-# defined before the preprocessor is started (similar to the -D option of e.g.
-# gcc). The argument of the tag is a list of macros of the form: name or
-# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
-# is assumed. To prevent a macro definition from being undefined via #undef or
-# recursively expanded use the := operator instead of the = operator.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-PREDEFINED             =
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
-# tag can be used to specify a list of macro names that should be expanded. The
-# macro definition that is found in the sources will be used. Use the PREDEFINED
-# tag if you want to use a different macro definition that overrules the
-# definition found in the source code.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all refrences to function-like macros that are alone on a line, have an
-# all uppercase name, and do not end with a semicolon. Such function macros are
-# typically used for boiler-plate code, and will confuse the parser if not
-# removed.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tag files. For each tag
-# file the location of the external documentation should be added. The format of
-# a tag file without this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where loc1 and loc2 can be relative or absolute paths or URLs. See the
-# section "Linking to external documentation" for more information about the use
-# of tag files.
-# Note: Each tag file must have an unique name (where the name does NOT include
-# the path). If a tag file is not located in the directory in which doxygen is
-# run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
-# tag file that is based on the input files it reads. See section "Linking to
-# external documentation" for more information about the usage of tag files.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
-# class index. If set to NO only the inherited external classes will be listed.
-# The default value is: NO.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
-# the modules index. If set to NO, only the current project's groups will be
-# listed.
-# The default value is: YES.
-
-EXTERNAL_GROUPS        = NO
-
-# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
-# the related pages index. If set to NO, only the current project's pages will
-# be listed.
-# The default value is: YES.
-
-EXTERNAL_PAGES         = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of 'which perl').
-# The default file (with absolute path) is: /usr/bin/perl.
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
-# disabled, but it is recommended to install and use dot, since it yields more
-# powerful graphs.
-# The default value is: YES.
-
-CLASS_DIAGRAMS         = YES
-
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see:
-# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
-# default search path.
-
-MSCGEN_PATH            =
-
-# If set to YES, the inheritance and collaboration graphs will hide inheritance
-# and usage relations if the target is undocumented or is not a class.
-# The default value is: YES.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz (see:
-# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
-# Bell Labs. The other options in this section have no effect if this option is
-# set to NO
-# The default value is: NO.
-
-HAVE_DOT               = NO
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
-# to run in parallel. When set to 0 doxygen will base this on the number of
-# processors available in the system. You can set it explicitly to a value
-# larger than 0 to get control over the balance between CPU load and processing
-# speed.
-# Minimum value: 0, maximum value: 32, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_NUM_THREADS        = 0
-
-# When you want a differently looking font n the dot files that doxygen
-# generates you can specify the font name using DOT_FONTNAME. You need to make
-# sure dot is able to find the font, which can be done by putting it in a
-# standard location or by setting the DOTFONTPATH environment variable or by
-# setting DOT_FONTPATH to the directory containing the font.
-# The default value is: Helvetica.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTNAME           = Helvetica
-
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-# dot graphs.
-# Minimum value: 4, maximum value: 24, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the default font as specified with
-# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
-# the path where dot can find it using this tag.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTPATH           =
-
-# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
-# each documented class showing the direct and indirect inheritance relations.
-# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
-# graph for each documented class showing the direct and indirect implementation
-# dependencies (inheritance, containment, and class references variables) of the
-# class with other documented classes.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-COLLABORATION_GRAPH    = YES
-
-# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
-# groups, showing the direct groups dependencies.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GROUP_GRAPHS           = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LOOK               = NO
-
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
-# class node. If there are many fields or methods and many nodes the graph may
-# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
-# number of items for each type to make the size more manageable. Set this to 0
-# for no limit. Note that the threshold may be exceeded by 50% before the limit
-# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
-# but if the number exceeds 15, the total amount of fields shown is limited to
-# 10.
-# Minimum value: 0, maximum value: 100, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LIMIT_NUM_FIELDS   = 10
-
-# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
-# collaboration graphs will show the relations between templates and their
-# instances.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
-# YES then doxygen will generate a graph for each documented file showing the
-# direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDE_GRAPH          = YES
-
-# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
-# set to YES then doxygen will generate a graph for each documented file showing
-# the direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
-# hierarchy of all classes instead of a textual one.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
-# dependencies a directory has on other directories in a graphical way. The
-# dependency relations are determined by the #include relations between the
-# files in the directories.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DIRECTORY_GRAPH        = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot.
-# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
-# to make the SVG files visible in IE 9+ (other browsers do not have this
-# requirement).
-# Possible values are: png, jpg, gif and svg.
-# The default value is: png.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_IMAGE_FORMAT       = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-#
-# Note that this requires a modern browser other than Internet Explorer. Tested
-# and working are Firefox, Chrome, Safari, and Opera.
-# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
-# the SVG files visible. Older versions of IE do not have SVG support.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INTERACTIVE_SVG        = NO
-
-# The DOT_PATH tag can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the \dotfile
-# command).
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOTFILE_DIRS           =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the \mscfile
-# command).
-
-MSCFILE_DIRS           =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
-# that will be shown in the graph. If the number of nodes in a graph becomes
-# larger than this value, doxygen will truncate the graph, which is visualized
-# by representing a node as a red box. Note that doxygen if the number of direct
-# children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
-# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-# Minimum value: 0, maximum value: 10000, default value: 50.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_GRAPH_MAX_NODES    = 50
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
-# generated by dot. A depth value of 3 means that only nodes reachable from the
-# root by following a path via at most 3 edges will be shown. Nodes that lay
-# further from the root node will be omitted. Note that setting this option to 1
-# or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-# Minimum value: 0, maximum value: 1000, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-MAX_DOT_GRAPH_DEPTH    = 0
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not seem
-# to support this out of the box.
-#
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_TRANSPARENT        = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
-# this, this feature is disabled by default.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
-# explaining the meaning of the various boxes and arrows in the dot generated
-# graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
-# files that are used to generate the various graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_CLEANUP            = YES
diff --git a/third_party/flatbuffers/docs/source/doxygen_layout.xml b/third_party/flatbuffers/docs/source/doxygen_layout.xml
deleted file mode 100644
index 77866df..0000000
--- a/third_party/flatbuffers/docs/source/doxygen_layout.xml
+++ /dev/null
@@ -1,234 +0,0 @@
-<!-- Copyright 2015 Google Inc. All rights reserved.
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
- -->
-<doxygenlayout version="1.0">
-  <navindex>
-    <tab type="mainpage" visible="no" title=""/>
-    <tab type="usergroup" url="" title="Programmer's Guide">
-      <tab type="user" url="@ref flatbuffers_guide_building"
-          title="Building"/>
-      <tab type="user" url="@ref flatbuffers_guide_tutorial" title="Tutorial"/>
-      <tab type="user" url="@ref flatbuffers_guide_using_schema_compiler"
-          title="Using the schema compiler"/>
-      <tab type="user" url="@ref flatbuffers_guide_writing_schema"
-          title="Writing a schema"/>
-      <tab type="user" url="@ref flatbuffers_guide_use_cpp"
-          title="Use in C++"/>
-      <tab type="user" url="@ref flatbuffers_guide_use_c"
-          title="Use in C"/>
-      <tab type="user" url="@ref flatbuffers_guide_use_go"
-          title="Use in Go"/>
-      <tab type="user" url="@ref flatbuffers_guide_use_java_c-sharp"
-          title="Use in Java/C#"/>
-      <tab type="user" url="@ref flatbuffers_guide_use_javascript"
-          title="Use in JavaScript"/>
-      <tab type="user" url="@ref flatbuffers_guide_use_php"
-          title="Use in PHP"/>
-      <tab type="user" url="@ref flatbuffers_guide_use_python"
-          title="Use in Python"/>
-      <tab type="user" url="@ref flexbuffers"
-          title="Schema-less version"/>
-    </tab>
-    <tab type="user" url="@ref flatbuffers_support"
-        title="Platform / Language / Feature support"/>
-    <tab type="user" url="@ref flatbuffers_benchmarks"
-        title="Benchmarks"/>
-    <tab type="user" url="@ref flatbuffers_white_paper"
-        title="FlatBuffers white paper"/>
-    <tab type="user" url="@ref flatbuffers_internals"
-        title="FlatBuffers internals"/>
-    <tab type="user" url="@ref flatbuffers_grammar"
-        title="Grammar of the schema language"/>
-    <tab type="usergroup" url="" title="API Reference">
-      <tab type="modules" visible="yes" title="APIs" intro=""/>
-      <tab type="classes" visible="yes" title="">
-        <tab type="classlist" visible="yes" title="" intro=""/>
-        <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
-        <tab type="hierarchy" visible="yes" title="" intro=""/>
-        <tab type="classmembers" visible="yes" title="" intro=""/>
-      </tab>
-    </tab>
-    <tab type="user" url="@ref contributing" title="Contributing"/>
-  </navindex>
-
-  <!-- Layout definition for a class page -->
-  <class>
-    <briefdescription visible="yes"/>
-    <includes visible="$SHOW_INCLUDE_FILES"/>
-    <inheritancegraph visible="$CLASS_GRAPH"/>
-    <collaborationgraph visible="$COLLABORATION_GRAPH"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <nestedclasses visible="yes" title=""/>
-      <publictypes title=""/>
-      <services title=""/>
-      <interfaces title=""/>
-      <publicslots title=""/>
-      <signals title=""/>
-      <publicmethods title=""/>
-      <publicstaticmethods title=""/>
-      <publicattributes title=""/>
-      <publicstaticattributes title=""/>
-      <protectedtypes title=""/>
-      <protectedslots title=""/>
-      <protectedmethods title=""/>
-      <protectedstaticmethods title=""/>
-      <protectedattributes title=""/>
-      <protectedstaticattributes title=""/>
-      <packagetypes title=""/>
-      <packagemethods title=""/>
-      <packagestaticmethods title=""/>
-      <packageattributes title=""/>
-      <packagestaticattributes title=""/>
-      <properties title=""/>
-      <events title=""/>
-      <privatetypes title=""/>
-      <privateslots title=""/>
-      <privatemethods title=""/>
-      <privatestaticmethods title=""/>
-      <privateattributes title=""/>
-      <privatestaticattributes title=""/>
-      <friends title=""/>
-      <related title="" subtitle=""/>
-      <membergroups visible="yes"/>
-    </memberdecl>
-    <memberdef>
-      <inlineclasses title=""/>
-      <typedefs title=""/>
-      <enums title=""/>
-      <services title=""/>
-      <interfaces title=""/>
-      <constructors title=""/>
-      <functions title=""/>
-      <related title=""/>
-      <variables title=""/>
-      <properties title=""/>
-      <events title=""/>
-    </memberdef>
-    <allmemberslink visible="yes"/>
-    <usedfiles visible="$SHOW_USED_FILES"/>
-    <authorsection visible="yes"/>
-  </class>
-
-  <!-- Layout definition for a namespace page -->
-  <namespace>
-    <briefdescription visible="yes"/>
-    <memberdecl>
-      <nestednamespaces visible="yes" title=""/>
-      <constantgroups visible="yes" title=""/>
-      <classes visible="yes" title=""/>
-      <typedefs title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <membergroups visible="yes"/>
-    </memberdecl>
-    <detaileddescription title=""/>
-    <memberdef>
-      <inlineclasses title=""/>
-      <typedefs title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-    </memberdef>
-    <authorsection visible="yes"/>
-  </namespace>
-
-  <!-- Layout definition for a file page -->
-  <file>
-    <briefdescription visible="yes"/>
-    <includes visible="$SHOW_INCLUDE_FILES"/>
-    <includegraph visible="$INCLUDE_GRAPH"/>
-    <includedbygraph visible="$INCLUDED_BY_GRAPH"/>
-    <sourcelink visible="yes"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <classes visible="yes" title=""/>
-      <namespaces visible="yes" title=""/>
-      <constantgroups visible="yes" title=""/>
-      <defines title=""/>
-      <typedefs title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <membergroups visible="yes"/>
-    </memberdecl>
-    <memberdef>
-      <inlineclasses title=""/>
-      <defines title=""/>
-      <typedefs title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-    </memberdef>
-    <authorsection/>
-  </file>
-
-  <!-- Layout definition for a group page -->
-  <group>
-    <briefdescription visible="yes"/>
-    <groupgraph visible="$GROUP_GRAPHS"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <nestedgroups visible="yes" title=""/>
-      <dirs visible="yes" title=""/>
-      <files visible="yes" title=""/>
-      <namespaces visible="yes" title=""/>
-      <classes visible="yes" title=""/>
-      <defines title=""/>
-      <typedefs title=""/>
-      <enums title=""/>
-      <enumvalues title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <signals title=""/>
-      <publicslots title=""/>
-      <protectedslots title=""/>
-      <privateslots title=""/>
-      <events title=""/>
-      <properties title=""/>
-      <friends title=""/>
-      <membergroups visible="yes"/>
-    </memberdecl>
-    <memberdef>
-      <pagedocs/>
-      <inlineclasses title=""/>
-      <defines title=""/>
-      <typedefs title=""/>
-      <enums title=""/>
-      <enumvalues title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <signals title=""/>
-      <publicslots title=""/>
-      <protectedslots title=""/>
-      <privateslots title=""/>
-      <events title=""/>
-      <properties title=""/>
-      <friends title=""/>
-    </memberdef>
-    <authorsection visible="yes"/>
-  </group>
-
-  <!-- Layout definition for a directory page -->
-  <directory>
-    <briefdescription visible="yes"/>
-    <directorygraph visible="yes"/>
-    <memberdecl>
-      <dirs visible="yes"/>
-      <files visible="yes"/>
-    </memberdecl>
-    <detaileddescription title=""/>
-  </directory>
-</doxygenlayout>
diff --git a/third_party/flatbuffers/docs/source/groups b/third_party/flatbuffers/docs/source/groups
deleted file mode 100644
index e0d97a7..0000000
--- a/third_party/flatbuffers/docs/source/groups
+++ /dev/null
@@ -1,20 +0,0 @@
-/// @defgroup flatbuffers_cpp_api C++ API
-/// @brief FlatBuffers API for C++
-
-/// @defgroup flatbuffers_csharp_api C# API
-/// @brief FlatBuffers API for C#
-
-/// @defgroup flatbuffers_go_api Go API
-/// @brief FlatBuffers API for Go
-
-/// @defgroup flatbuffers_java_api Java API
-/// @brief FlatBuffers API for Java
-
-/// @defgroup flatbuffers_javascript_api JavaScript API
-/// @brief FlatBuffers API for JavaScript
-
-/// @defgroup flatbuffers_php_api PHP API
-/// @brief FlatBuffers API for PHP
-
-/// @defgroup flatbuffers_python_api Python API
-/// @brief FlatBuffers API for Python
diff --git a/third_party/flatbuffers/docs/source/style.css b/third_party/flatbuffers/docs/source/style.css
deleted file mode 100644
index 6045a97..0000000
--- a/third_party/flatbuffers/docs/source/style.css
+++ /dev/null
@@ -1,396 +0,0 @@
-body,
-#projectname,
-table,
-div,
-p,
-dl,
-.title,
-.tabs,
-.tabs2,
-.tabs3,
-#nav-tree .label {
-  font-family: roboto, sans-serif;
-}
-
-#commonprojectlogo {
-  padding: 5px 0px 5px 15px;
-}
-
-#projectname {
-  color: #00bcd4;
-  font-size: 280%;
-  padding: 15px 0px;
-  font-weight: 300;
-}
-
-#titlearea {
-  border-bottom: 2px solid #e5e5e5;
-}
-
-.title {
-  color: #212121;
-  font: 300 34px/40px Roboto,sans-serif;
-}
-
-#nav-tree {
-  background-color: #fff;
-}
-
-#navrow1, #navrow2 {
-  border-bottom: 2px solid #e7e7e7;
-}
-
-.tabs, .tabs2, .tabs3 {
-  font-size: 14px;
-}
-
-.tabs,
-.tabs2,
-.tabs3,
-.tablist li,
-.tablist li.current a {
-  background-image: none;
-}
-
-.tablist {
-  list-style: none;
-}
-
-.tablist li, .tablist li p {
-  margin: 0;
-}
-
-.tablist li a,
-.tablist li.current a {
-  color: #757575;
-  text-shadow: none;
-}
-
-.tablist li.current a {
-  background: #00bcd4;
-  color: #fff;
-}
-
-.tablist a {
-  background-image: none;
-  border-right: 2px solid #e5e5e5;
-  font-weight: normal;
-}
-
-.tablist a:hover,
-.tablist li.current a:hover {
-  background-image: none;
-  text-decoration: underline;
-  text-shadow: none;
-}
-
-.tablist a:hover {
-  color: #00bcd4;
-}
-
-.tablist li.current a:hover {
-  color: #fff;
-}
-
-div.header {
-  background-color: #f7f7f7;
-  background-image: none;
-  border-bottom: none;
-}
-
-#MSearchBox {
-  border: 1px solid #ccc;
-  border-radius: 5px;
-  display: inline-block;
-  height: 20px;
-  right: 10px;
-}
-
-#MSearchBox .left,
-#MSearchBox .right,
-#MSearchField {
-  background: none;
-}
-
-a.SelectItem:hover {
-  background-color: #00bcd4;
-}
-
-#nav-tree {
-  background-image: none;
-}
-
-#nav-tree .selected {
-  background-image: none;
-  text-shadow: none;
-  background-color: #f7f7f7;
-}
-
-#nav-tree a {
-  color: #212121;
-}
-
-#nav-tree .selected a {
-  color: #0288d1;
-}
-
-#nav-tree .item:hover {
-  background-color: #f7f7f7;
-}
-
-#nav-tree .item:hover a {
-  color: #0288d1;
-}
-
-#nav-tree .label {
-  font-size: 13px;
-}
-
-#nav-sync {
-  display: none;
-}
-
-.ui-resizable-e {
-  background: #ebebeb;
-  border-left: 1px solid #ddd;
-  border-right: 1px solid #ddd;
-}
-
-.contents tr td .image {
-  margin-top: 24px;
-}
-
-.image {
-  text-align: left;
-  margin-bottom: 8px;
-}
-
-a:link,
-a:visited,
-.contents a:link,
-.contents a:visited,
-a.el {
-  color: #0288d1;
-  font-weight: normal;
-  text-decoration: none;
-}
-
-div.contents {
-  margin-right: 12px;
-}
-
-.directory tr, .directory tr.even {
-  background: #7cb342;
-  border-top: 1px solid #7cb342;
-}
-
-.directory td,
-.directory td.entry,
-.directory td.desc {
-  background: rgba(255,255,255,.95);
-  border-left: none;
-  color: #212121;
-  padding-top: 10px;
-  padding-bottom: 10px;
-  padding-left: 8px;
-  padding-right: 8px;
-}
-
-.directory tr#row_0_ {
-  border-top-color: #7cb342;
-}
-
-.directory tr#row_0_ td {
-  background: #7cb342;
-  color: #fff;
-  font-size: 18px;
-}
-
-.memSeparator {
-  border-bottom: none;
-}
-
-.memitem {
-  background: #7cb342;
-}
-
-.memproto, dl.reflist dt {
-  background: #7cb342;
-  background-image: none;
-  border: none;
-  box-shadow: none;
-  -webkit-box-shadow: none;
-  color: #fff;
-  text-shadow: none;
-}
-
-.memproto .memtemplate,
-.memproto a.el,
-.memproto .paramname {
-  color: #fff;
-}
-
-.memdoc, dl.reflist dd {
-  border: none;
-  background-color: rgba(255,255,255,.95);
-  background-image: none;
-  box-shadow: none;
-  -webkit-box-shadow: none;
-  -webkit-border-bottom-left-radius: 0;
-  -webkit-border-bottom-right-radius: 0;
-}
-
-.memitem, table.doxtable, table.memberdecls {
-  margin-bottom: 24px;
-}
-
-table.doxtable th {
-  background: #7cb342;
-}
-
-table.doxtable tr {
-  background: #7cb342;
-  border-top: 1px solid #7cb342;
-}
-
-table.doxtable td, table.doxtable th {
-  border: none;
-  padding: 10px 8px;
-}
-
-table.doxtable td {
-  background-color: rgba(255,255,255,.95);
-}
-
-.memberdecls {
-  background: #7cb342;
-  border-top: 1px solid #7cb342;
-}
-
-.memberdecls .heading h2 {
-  border-bottom: none;
-  color: #fff;
-  font-size: 110%;
-  font-weight: bold;
-  margin: 0 0 0 6px;
-}
-
-.memberdecls tr:not(.heading) td {
-  background-color: rgba(255,255,255,.95);
-}
-
-h1, h2, h2.groupheader, h3, h4, h5, h6 {
-  color: #212121;
-}
-
-h1 {
-  border-bottom: 1px solid #ebebeb;
-  font: 400 28px/32px Roboto,sans-serif;
-  letter-spacing: -.01em;
-  margin: 40px 0 20px;
-  padding-bottom: 3px;
-}
-
-h2, h2.groupheader {
-  border-bottom: 1px solid #ebebeb;
-  font: 400 23px/32px Roboto,sans-serif;
-  letter-spacing: -.01em;
-  margin: 40px 0 20px;
-  padding-bottom: 3px;
-}
-
-h3 {
-  font: 500 20px/32px Roboto,sans-serif;
-  margin: 32px 0 16px;
-}
-
-h4 {
-  font: 500 18px/32px Roboto,sans-serif;
-  margin: 32px 0 16px;
-}
-
-ol,
-ul {
-  margin: 0;
-  padding-left: 40px;
-}
-
-ol {
-  list-style: decimal outside;
-}
-
-ol ol {
-  list-style-type: lower-alpha;
-}
-
-ol ol ol {
-  list-style-type: lower-roman;
-}
-
-ul {
-  list-style: disc outside;
-}
-
-li,
-li p {
-  margin: 8px 0;
-  padding: 0;
-}
-
-div.summary
-{
-  float: none;
-  font-size: 8pt;
-  padding-left: 5px;
-  width: calc(100% - 10px);
-  text-align: left;
-  display: block;
-}
-
-div.ingroups {
-  margin-top: 8px;
-}
-
-div.fragment {
-  border: 1px solid #ddd;
-  color: #455a64;
-  font: 14px/20px Roboto Mono, monospace;
-  padding: 8px;
-}
-
-div.line {
-  line-height: 1.5;
-  font-size: inherit;
-}
-
-code, pre {
-  color: #455a64;
-  background: #f7f7f7;
-  font: 400 100% Roboto Mono,monospace;
-  padding: 1px 4px;
-}
-
-span.preprocessor, span.comment {
-  color: #0b8043;
-}
-
-span.keywordtype {
-  color: #0097a7;
-}
-
-.paramname {
-  color: #ef6c00;
-}
-
-.memTemplParams {
-  color: #ef6c00;
-}
-
-span.mlabel {
-  background: rgba(255,255,255,.25);
-  border: none;
-}
-
-blockquote {
-  border: 1px solid #ddd;
-}
diff --git a/third_party/flatbuffers/go/builder.go b/third_party/flatbuffers/go/builder.go
deleted file mode 100644
index cf21dd5..0000000
--- a/third_party/flatbuffers/go/builder.go
+++ /dev/null
@@ -1,747 +0,0 @@
-package flatbuffers
-
-// Builder is a state machine for creating FlatBuffer objects.
-// Use a Builder to construct object(s) starting from leaf nodes.
-//
-// A Builder constructs byte buffers in a last-first manner for simplicity and
-// performance.
-type Builder struct {
-	// `Bytes` gives raw access to the buffer. Most users will want to use
-	// FinishedBytes() instead.
-	Bytes []byte
-
-	minalign  int
-	vtable    []UOffsetT
-	objectEnd UOffsetT
-	vtables   []UOffsetT
-	head      UOffsetT
-	nested    bool
-	finished  bool
-}
-
-// NewBuilder initializes a Builder of size `initial_size`.
-// The internal buffer is grown as needed.
-func NewBuilder(initialSize int) *Builder {
-	if initialSize <= 0 {
-		initialSize = 0
-	}
-
-	b := &Builder{}
-	b.Bytes = make([]byte, initialSize)
-	b.head = UOffsetT(initialSize)
-	b.minalign = 1
-	b.vtables = make([]UOffsetT, 0, 16) // sensible default capacity
-
-	return b
-}
-
-// Reset truncates the underlying Builder buffer, facilitating alloc-free
-// reuse of a Builder. It also resets bookkeeping data.
-func (b *Builder) Reset() {
-	if b.Bytes != nil {
-		b.Bytes = b.Bytes[:cap(b.Bytes)]
-	}
-
-	if b.vtables != nil {
-		b.vtables = b.vtables[:0]
-	}
-
-	if b.vtable != nil {
-		b.vtable = b.vtable[:0]
-	}
-
-	b.head = UOffsetT(len(b.Bytes))
-	b.minalign = 1
-	b.nested = false
-	b.finished = false
-}
-
-// FinishedBytes returns a pointer to the written data in the byte buffer.
-// Panics if the builder is not in a finished state (which is caused by calling
-// `Finish()`).
-func (b *Builder) FinishedBytes() []byte {
-	b.assertFinished()
-	return b.Bytes[b.Head():]
-}
-
-// StartObject initializes bookkeeping for writing a new object.
-func (b *Builder) StartObject(numfields int) {
-	b.assertNotNested()
-	b.nested = true
-
-	// use 32-bit offsets so that arithmetic doesn't overflow.
-	if cap(b.vtable) < numfields || b.vtable == nil {
-		b.vtable = make([]UOffsetT, numfields)
-	} else {
-		b.vtable = b.vtable[:numfields]
-		for i := 0; i < len(b.vtable); i++ {
-			b.vtable[i] = 0
-		}
-	}
-
-	b.objectEnd = b.Offset()
-	b.minalign = 1
-}
-
-// WriteVtable serializes the vtable for the current object, if applicable.
-//
-// Before writing out the vtable, this checks pre-existing vtables for equality
-// to this one. If an equal vtable is found, point the object to the existing
-// vtable and return.
-//
-// Because vtable values are sensitive to alignment of object data, not all
-// logically-equal vtables will be deduplicated.
-//
-// A vtable has the following format:
-//   <VOffsetT: size of the vtable in bytes, including this value>
-//   <VOffsetT: size of the object in bytes, including the vtable offset>
-//   <VOffsetT: offset for a field> * N, where N is the number of fields in
-//	        the schema for this type. Includes deprecated fields.
-// Thus, a vtable is made of 2 + N elements, each SizeVOffsetT bytes wide.
-//
-// An object has the following format:
-//   <SOffsetT: offset to this object's vtable (may be negative)>
-//   <byte: data>+
-func (b *Builder) WriteVtable() (n UOffsetT) {
-	// Prepend a zero scalar to the object. Later in this function we'll
-	// write an offset here that points to the object's vtable:
-	b.PrependSOffsetT(0)
-
-	objectOffset := b.Offset()
-	existingVtable := UOffsetT(0)
-
-	// Search backwards through existing vtables, because similar vtables
-	// are likely to have been recently appended. See
-	// BenchmarkVtableDeduplication for a case in which this heuristic
-	// saves about 30% of the time used in writing objects with duplicate
-	// tables.
-	for i := len(b.vtables) - 1; i >= 0; i-- {
-		// Find the other vtable, which is associated with `i`:
-		vt2Offset := b.vtables[i]
-		vt2Start := len(b.Bytes) - int(vt2Offset)
-		vt2Len := GetVOffsetT(b.Bytes[vt2Start:])
-
-		metadata := VtableMetadataFields * SizeVOffsetT
-		vt2End := vt2Start + int(vt2Len)
-		vt2 := b.Bytes[vt2Start+metadata : vt2End]
-
-		// Compare the other vtable to the one under consideration.
-		// If they are equal, store the offset and break:
-		if vtableEqual(b.vtable, objectOffset, vt2) {
-			existingVtable = vt2Offset
-			break
-		}
-	}
-
-	if existingVtable == 0 {
-		// Did not find a vtable, so write this one to the buffer.
-
-		// Write out the current vtable in reverse , because
-		// serialization occurs in last-first order:
-		for i := len(b.vtable) - 1; i >= 0; i-- {
-			var off UOffsetT
-			if b.vtable[i] != 0 {
-				// Forward reference to field;
-				// use 32bit number to assert no overflow:
-				off = objectOffset - b.vtable[i]
-			}
-
-			b.PrependVOffsetT(VOffsetT(off))
-		}
-
-		// The two metadata fields are written last.
-
-		// First, store the object bytesize:
-		objectSize := objectOffset - b.objectEnd
-		b.PrependVOffsetT(VOffsetT(objectSize))
-
-		// Second, store the vtable bytesize:
-		vBytes := (len(b.vtable) + VtableMetadataFields) * SizeVOffsetT
-		b.PrependVOffsetT(VOffsetT(vBytes))
-
-		// Next, write the offset to the new vtable in the
-		// already-allocated SOffsetT at the beginning of this object:
-		objectStart := SOffsetT(len(b.Bytes)) - SOffsetT(objectOffset)
-		WriteSOffsetT(b.Bytes[objectStart:],
-			SOffsetT(b.Offset())-SOffsetT(objectOffset))
-
-		// Finally, store this vtable in memory for future
-		// deduplication:
-		b.vtables = append(b.vtables, b.Offset())
-	} else {
-		// Found a duplicate vtable.
-
-		objectStart := SOffsetT(len(b.Bytes)) - SOffsetT(objectOffset)
-		b.head = UOffsetT(objectStart)
-
-		// Write the offset to the found vtable in the
-		// already-allocated SOffsetT at the beginning of this object:
-		WriteSOffsetT(b.Bytes[b.head:],
-			SOffsetT(existingVtable)-SOffsetT(objectOffset))
-	}
-
-	b.vtable = b.vtable[:0]
-	return objectOffset
-}
-
-// EndObject writes data necessary to finish object construction.
-func (b *Builder) EndObject() UOffsetT {
-	b.assertNested()
-	n := b.WriteVtable()
-	b.nested = false
-	return n
-}
-
-// Doubles the size of the byteslice, and copies the old data towards the
-// end of the new byteslice (since we build the buffer backwards).
-func (b *Builder) growByteBuffer() {
-	if (int64(len(b.Bytes)) & int64(0xC0000000)) != 0 {
-		panic("cannot grow buffer beyond 2 gigabytes")
-	}
-	newLen := len(b.Bytes) * 2
-	if newLen == 0 {
-		newLen = 1
-	}
-
-	if cap(b.Bytes) >= newLen {
-		b.Bytes = b.Bytes[:newLen]
-	} else {
-		extension := make([]byte, newLen-len(b.Bytes))
-		b.Bytes = append(b.Bytes, extension...)
-	}
-
-	middle := newLen / 2
-	copy(b.Bytes[middle:], b.Bytes[:middle])
-}
-
-// Head gives the start of useful data in the underlying byte buffer.
-// Note: unlike other functions, this value is interpreted as from the left.
-func (b *Builder) Head() UOffsetT {
-	return b.head
-}
-
-// Offset relative to the end of the buffer.
-func (b *Builder) Offset() UOffsetT {
-	return UOffsetT(len(b.Bytes)) - b.head
-}
-
-// Pad places zeros at the current offset.
-func (b *Builder) Pad(n int) {
-	for i := 0; i < n; i++ {
-		b.PlaceByte(0)
-	}
-}
-
-// Prep prepares to write an element of `size` after `additional_bytes`
-// have been written, e.g. if you write a string, you need to align such
-// the int length field is aligned to SizeInt32, and the string data follows it
-// directly.
-// If all you need to do is align, `additionalBytes` will be 0.
-func (b *Builder) Prep(size, additionalBytes int) {
-	// Track the biggest thing we've ever aligned to.
-	if size > b.minalign {
-		b.minalign = size
-	}
-	// Find the amount of alignment needed such that `size` is properly
-	// aligned after `additionalBytes`:
-	alignSize := (^(len(b.Bytes) - int(b.Head()) + additionalBytes)) + 1
-	alignSize &= (size - 1)
-
-	// Reallocate the buffer if needed:
-	for int(b.head) <= alignSize+size+additionalBytes {
-		oldBufSize := len(b.Bytes)
-		b.growByteBuffer()
-		b.head += UOffsetT(len(b.Bytes) - oldBufSize)
-	}
-	b.Pad(alignSize)
-}
-
-// PrependSOffsetT prepends an SOffsetT, relative to where it will be written.
-func (b *Builder) PrependSOffsetT(off SOffsetT) {
-	b.Prep(SizeSOffsetT, 0) // Ensure alignment is already done.
-	if !(UOffsetT(off) <= b.Offset()) {
-		panic("unreachable: off <= b.Offset()")
-	}
-	off2 := SOffsetT(b.Offset()) - off + SOffsetT(SizeSOffsetT)
-	b.PlaceSOffsetT(off2)
-}
-
-// PrependUOffsetT prepends an UOffsetT, relative to where it will be written.
-func (b *Builder) PrependUOffsetT(off UOffsetT) {
-	b.Prep(SizeUOffsetT, 0) // Ensure alignment is already done.
-	if !(off <= b.Offset()) {
-		panic("unreachable: off <= b.Offset()")
-	}
-	off2 := b.Offset() - off + UOffsetT(SizeUOffsetT)
-	b.PlaceUOffsetT(off2)
-}
-
-// StartVector initializes bookkeeping for writing a new vector.
-//
-// A vector has the following format:
-//   <UOffsetT: number of elements in this vector>
-//   <T: data>+, where T is the type of elements of this vector.
-func (b *Builder) StartVector(elemSize, numElems, alignment int) UOffsetT {
-	b.assertNotNested()
-	b.nested = true
-	b.Prep(SizeUint32, elemSize*numElems)
-	b.Prep(alignment, elemSize*numElems) // Just in case alignment > int.
-	return b.Offset()
-}
-
-// EndVector writes data necessary to finish vector construction.
-func (b *Builder) EndVector(vectorNumElems int) UOffsetT {
-	b.assertNested()
-
-	// we already made space for this, so write without PrependUint32
-	b.PlaceUOffsetT(UOffsetT(vectorNumElems))
-
-	b.nested = false
-	return b.Offset()
-}
-
-// CreateString writes a null-terminated string as a vector.
-func (b *Builder) CreateString(s string) UOffsetT {
-	b.assertNotNested()
-	b.nested = true
-
-	b.Prep(int(SizeUOffsetT), (len(s)+1)*SizeByte)
-	b.PlaceByte(0)
-
-	l := UOffsetT(len(s))
-
-	b.head -= l
-	copy(b.Bytes[b.head:b.head+l], s)
-
-	return b.EndVector(len(s))
-}
-
-// CreateByteString writes a byte slice as a string (null-terminated).
-func (b *Builder) CreateByteString(s []byte) UOffsetT {
-	b.assertNotNested()
-	b.nested = true
-
-	b.Prep(int(SizeUOffsetT), (len(s)+1)*SizeByte)
-	b.PlaceByte(0)
-
-	l := UOffsetT(len(s))
-
-	b.head -= l
-	copy(b.Bytes[b.head:b.head+l], s)
-
-	return b.EndVector(len(s))
-}
-
-// CreateByteVector writes a ubyte vector
-func (b *Builder) CreateByteVector(v []byte) UOffsetT {
-	b.assertNotNested()
-	b.nested = true
-
-	b.Prep(int(SizeUOffsetT), len(v)*SizeByte)
-
-	l := UOffsetT(len(v))
-
-	b.head -= l
-	copy(b.Bytes[b.head:b.head+l], v)
-
-	return b.EndVector(len(v))
-}
-
-func (b *Builder) assertNested() {
-	// If you get this assert, you're in an object while trying to write
-	// data that belongs outside of an object.
-	// To fix this, write non-inline data (like vectors) before creating
-	// objects.
-	if !b.nested {
-		panic("Incorrect creation order: must be inside object.")
-	}
-}
-
-func (b *Builder) assertNotNested() {
-	// If you hit this, you're trying to construct a Table/Vector/String
-	// during the construction of its parent table (between the MyTableBuilder
-	// and builder.Finish()).
-	// Move the creation of these sub-objects to above the MyTableBuilder to
-	// not get this assert.
-	// Ignoring this assert may appear to work in simple cases, but the reason
-	// it is here is that storing objects in-line may cause vtable offsets
-	// to not fit anymore. It also leads to vtable duplication.
-	if b.nested {
-		panic("Incorrect creation order: object must not be nested.")
-	}
-}
-
-func (b *Builder) assertFinished() {
-	// If you get this assert, you're attempting to get access a buffer
-	// which hasn't been finished yet. Be sure to call builder.Finish()
-	// with your root table.
-	// If you really need to access an unfinished buffer, use the Bytes
-	// buffer directly.
-	if !b.finished {
-		panic("Incorrect use of FinishedBytes(): must call 'Finish' first.")
-	}
-}
-
-// PrependBoolSlot prepends a bool onto the object at vtable slot `o`.
-// If value `x` equals default `d`, then the slot will be set to zero and no
-// other data will be written.
-func (b *Builder) PrependBoolSlot(o int, x, d bool) {
-	val := byte(0)
-	if x {
-		val = 1
-	}
-	def := byte(0)
-	if d {
-		def = 1
-	}
-	b.PrependByteSlot(o, val, def)
-}
-
-// PrependByteSlot prepends a byte onto the object at vtable slot `o`.
-// If value `x` equals default `d`, then the slot will be set to zero and no
-// other data will be written.
-func (b *Builder) PrependByteSlot(o int, x, d byte) {
-	if x != d {
-		b.PrependByte(x)
-		b.Slot(o)
-	}
-}
-
-// PrependUint8Slot prepends a uint8 onto the object at vtable slot `o`.
-// If value `x` equals default `d`, then the slot will be set to zero and no
-// other data will be written.
-func (b *Builder) PrependUint8Slot(o int, x, d uint8) {
-	if x != d {
-		b.PrependUint8(x)
-		b.Slot(o)
-	}
-}
-
-// PrependUint16Slot prepends a uint16 onto the object at vtable slot `o`.
-// If value `x` equals default `d`, then the slot will be set to zero and no
-// other data will be written.
-func (b *Builder) PrependUint16Slot(o int, x, d uint16) {
-	if x != d {
-		b.PrependUint16(x)
-		b.Slot(o)
-	}
-}
-
-// PrependUint32Slot prepends a uint32 onto the object at vtable slot `o`.
-// If value `x` equals default `d`, then the slot will be set to zero and no
-// other data will be written.
-func (b *Builder) PrependUint32Slot(o int, x, d uint32) {
-	if x != d {
-		b.PrependUint32(x)
-		b.Slot(o)
-	}
-}
-
-// PrependUint64Slot prepends a uint64 onto the object at vtable slot `o`.
-// If value `x` equals default `d`, then the slot will be set to zero and no
-// other data will be written.
-func (b *Builder) PrependUint64Slot(o int, x, d uint64) {
-	if x != d {
-		b.PrependUint64(x)
-		b.Slot(o)
-	}
-}
-
-// PrependInt8Slot prepends a int8 onto the object at vtable slot `o`.
-// If value `x` equals default `d`, then the slot will be set to zero and no
-// other data will be written.
-func (b *Builder) PrependInt8Slot(o int, x, d int8) {
-	if x != d {
-		b.PrependInt8(x)
-		b.Slot(o)
-	}
-}
-
-// PrependInt16Slot prepends a int16 onto the object at vtable slot `o`.
-// If value `x` equals default `d`, then the slot will be set to zero and no
-// other data will be written.
-func (b *Builder) PrependInt16Slot(o int, x, d int16) {
-	if x != d {
-		b.PrependInt16(x)
-		b.Slot(o)
-	}
-}
-
-// PrependInt32Slot prepends a int32 onto the object at vtable slot `o`.
-// If value `x` equals default `d`, then the slot will be set to zero and no
-// other data will be written.
-func (b *Builder) PrependInt32Slot(o int, x, d int32) {
-	if x != d {
-		b.PrependInt32(x)
-		b.Slot(o)
-	}
-}
-
-// PrependInt64Slot prepends a int64 onto the object at vtable slot `o`.
-// If value `x` equals default `d`, then the slot will be set to zero and no
-// other data will be written.
-func (b *Builder) PrependInt64Slot(o int, x, d int64) {
-	if x != d {
-		b.PrependInt64(x)
-		b.Slot(o)
-	}
-}
-
-// PrependFloat32Slot prepends a float32 onto the object at vtable slot `o`.
-// If value `x` equals default `d`, then the slot will be set to zero and no
-// other data will be written.
-func (b *Builder) PrependFloat32Slot(o int, x, d float32) {
-	if x != d {
-		b.PrependFloat32(x)
-		b.Slot(o)
-	}
-}
-
-// PrependFloat64Slot prepends a float64 onto the object at vtable slot `o`.
-// If value `x` equals default `d`, then the slot will be set to zero and no
-// other data will be written.
-func (b *Builder) PrependFloat64Slot(o int, x, d float64) {
-	if x != d {
-		b.PrependFloat64(x)
-		b.Slot(o)
-	}
-}
-
-// PrependUOffsetTSlot prepends an UOffsetT onto the object at vtable slot `o`.
-// If value `x` equals default `d`, then the slot will be set to zero and no
-// other data will be written.
-func (b *Builder) PrependUOffsetTSlot(o int, x, d UOffsetT) {
-	if x != d {
-		b.PrependUOffsetT(x)
-		b.Slot(o)
-	}
-}
-
-// PrependStructSlot prepends a struct onto the object at vtable slot `o`.
-// Structs are stored inline, so nothing additional is being added.
-// In generated code, `d` is always 0.
-func (b *Builder) PrependStructSlot(voffset int, x, d UOffsetT) {
-	if x != d {
-		b.assertNested()
-		if x != b.Offset() {
-			panic("inline data write outside of object")
-		}
-		b.Slot(voffset)
-	}
-}
-
-// Slot sets the vtable key `voffset` to the current location in the buffer.
-func (b *Builder) Slot(slotnum int) {
-	b.vtable[slotnum] = UOffsetT(b.Offset())
-}
-
-// Finish finalizes a buffer, pointing to the given `rootTable`.
-func (b *Builder) Finish(rootTable UOffsetT) {
-	b.assertNotNested()
-	b.Prep(b.minalign, SizeUOffsetT)
-	b.PrependUOffsetT(rootTable)
-	b.finished = true
-}
-
-// vtableEqual compares an unwritten vtable to a written vtable.
-func vtableEqual(a []UOffsetT, objectStart UOffsetT, b []byte) bool {
-	if len(a)*SizeVOffsetT != len(b) {
-		return false
-	}
-
-	for i := 0; i < len(a); i++ {
-		x := GetVOffsetT(b[i*SizeVOffsetT : (i+1)*SizeVOffsetT])
-
-		// Skip vtable entries that indicate a default value.
-		if x == 0 && a[i] == 0 {
-			continue
-		}
-
-		y := SOffsetT(objectStart) - SOffsetT(a[i])
-		if SOffsetT(x) != y {
-			return false
-		}
-	}
-	return true
-}
-
-// PrependBool prepends a bool to the Builder buffer.
-// Aligns and checks for space.
-func (b *Builder) PrependBool(x bool) {
-	b.Prep(SizeBool, 0)
-	b.PlaceBool(x)
-}
-
-// PrependUint8 prepends a uint8 to the Builder buffer.
-// Aligns and checks for space.
-func (b *Builder) PrependUint8(x uint8) {
-	b.Prep(SizeUint8, 0)
-	b.PlaceUint8(x)
-}
-
-// PrependUint16 prepends a uint16 to the Builder buffer.
-// Aligns and checks for space.
-func (b *Builder) PrependUint16(x uint16) {
-	b.Prep(SizeUint16, 0)
-	b.PlaceUint16(x)
-}
-
-// PrependUint32 prepends a uint32 to the Builder buffer.
-// Aligns and checks for space.
-func (b *Builder) PrependUint32(x uint32) {
-	b.Prep(SizeUint32, 0)
-	b.PlaceUint32(x)
-}
-
-// PrependUint64 prepends a uint64 to the Builder buffer.
-// Aligns and checks for space.
-func (b *Builder) PrependUint64(x uint64) {
-	b.Prep(SizeUint64, 0)
-	b.PlaceUint64(x)
-}
-
-// PrependInt8 prepends a int8 to the Builder buffer.
-// Aligns and checks for space.
-func (b *Builder) PrependInt8(x int8) {
-	b.Prep(SizeInt8, 0)
-	b.PlaceInt8(x)
-}
-
-// PrependInt16 prepends a int16 to the Builder buffer.
-// Aligns and checks for space.
-func (b *Builder) PrependInt16(x int16) {
-	b.Prep(SizeInt16, 0)
-	b.PlaceInt16(x)
-}
-
-// PrependInt32 prepends a int32 to the Builder buffer.
-// Aligns and checks for space.
-func (b *Builder) PrependInt32(x int32) {
-	b.Prep(SizeInt32, 0)
-	b.PlaceInt32(x)
-}
-
-// PrependInt64 prepends a int64 to the Builder buffer.
-// Aligns and checks for space.
-func (b *Builder) PrependInt64(x int64) {
-	b.Prep(SizeInt64, 0)
-	b.PlaceInt64(x)
-}
-
-// PrependFloat32 prepends a float32 to the Builder buffer.
-// Aligns and checks for space.
-func (b *Builder) PrependFloat32(x float32) {
-	b.Prep(SizeFloat32, 0)
-	b.PlaceFloat32(x)
-}
-
-// PrependFloat64 prepends a float64 to the Builder buffer.
-// Aligns and checks for space.
-func (b *Builder) PrependFloat64(x float64) {
-	b.Prep(SizeFloat64, 0)
-	b.PlaceFloat64(x)
-}
-
-// PrependByte prepends a byte to the Builder buffer.
-// Aligns and checks for space.
-func (b *Builder) PrependByte(x byte) {
-	b.Prep(SizeByte, 0)
-	b.PlaceByte(x)
-}
-
-// PrependVOffsetT prepends a VOffsetT to the Builder buffer.
-// Aligns and checks for space.
-func (b *Builder) PrependVOffsetT(x VOffsetT) {
-	b.Prep(SizeVOffsetT, 0)
-	b.PlaceVOffsetT(x)
-}
-
-// PlaceBool prepends a bool to the Builder, without checking for space.
-func (b *Builder) PlaceBool(x bool) {
-	b.head -= UOffsetT(SizeBool)
-	WriteBool(b.Bytes[b.head:], x)
-}
-
-// PlaceUint8 prepends a uint8 to the Builder, without checking for space.
-func (b *Builder) PlaceUint8(x uint8) {
-	b.head -= UOffsetT(SizeUint8)
-	WriteUint8(b.Bytes[b.head:], x)
-}
-
-// PlaceUint16 prepends a uint16 to the Builder, without checking for space.
-func (b *Builder) PlaceUint16(x uint16) {
-	b.head -= UOffsetT(SizeUint16)
-	WriteUint16(b.Bytes[b.head:], x)
-}
-
-// PlaceUint32 prepends a uint32 to the Builder, without checking for space.
-func (b *Builder) PlaceUint32(x uint32) {
-	b.head -= UOffsetT(SizeUint32)
-	WriteUint32(b.Bytes[b.head:], x)
-}
-
-// PlaceUint64 prepends a uint64 to the Builder, without checking for space.
-func (b *Builder) PlaceUint64(x uint64) {
-	b.head -= UOffsetT(SizeUint64)
-	WriteUint64(b.Bytes[b.head:], x)
-}
-
-// PlaceInt8 prepends a int8 to the Builder, without checking for space.
-func (b *Builder) PlaceInt8(x int8) {
-	b.head -= UOffsetT(SizeInt8)
-	WriteInt8(b.Bytes[b.head:], x)
-}
-
-// PlaceInt16 prepends a int16 to the Builder, without checking for space.
-func (b *Builder) PlaceInt16(x int16) {
-	b.head -= UOffsetT(SizeInt16)
-	WriteInt16(b.Bytes[b.head:], x)
-}
-
-// PlaceInt32 prepends a int32 to the Builder, without checking for space.
-func (b *Builder) PlaceInt32(x int32) {
-	b.head -= UOffsetT(SizeInt32)
-	WriteInt32(b.Bytes[b.head:], x)
-}
-
-// PlaceInt64 prepends a int64 to the Builder, without checking for space.
-func (b *Builder) PlaceInt64(x int64) {
-	b.head -= UOffsetT(SizeInt64)
-	WriteInt64(b.Bytes[b.head:], x)
-}
-
-// PlaceFloat32 prepends a float32 to the Builder, without checking for space.
-func (b *Builder) PlaceFloat32(x float32) {
-	b.head -= UOffsetT(SizeFloat32)
-	WriteFloat32(b.Bytes[b.head:], x)
-}
-
-// PlaceFloat64 prepends a float64 to the Builder, without checking for space.
-func (b *Builder) PlaceFloat64(x float64) {
-	b.head -= UOffsetT(SizeFloat64)
-	WriteFloat64(b.Bytes[b.head:], x)
-}
-
-// PlaceByte prepends a byte to the Builder, without checking for space.
-func (b *Builder) PlaceByte(x byte) {
-	b.head -= UOffsetT(SizeByte)
-	WriteByte(b.Bytes[b.head:], x)
-}
-
-// PlaceVOffsetT prepends a VOffsetT to the Builder, without checking for space.
-func (b *Builder) PlaceVOffsetT(x VOffsetT) {
-	b.head -= UOffsetT(SizeVOffsetT)
-	WriteVOffsetT(b.Bytes[b.head:], x)
-}
-
-// PlaceSOffsetT prepends a SOffsetT to the Builder, without checking for space.
-func (b *Builder) PlaceSOffsetT(x SOffsetT) {
-	b.head -= UOffsetT(SizeSOffsetT)
-	WriteSOffsetT(b.Bytes[b.head:], x)
-}
-
-// PlaceUOffsetT prepends a UOffsetT to the Builder, without checking for space.
-func (b *Builder) PlaceUOffsetT(x UOffsetT) {
-	b.head -= UOffsetT(SizeUOffsetT)
-	WriteUOffsetT(b.Bytes[b.head:], x)
-}
diff --git a/third_party/flatbuffers/go/doc.go b/third_party/flatbuffers/go/doc.go
deleted file mode 100644
index 694edc7..0000000
--- a/third_party/flatbuffers/go/doc.go
+++ /dev/null
@@ -1,3 +0,0 @@
-// Package flatbuffers provides facilities to read and write flatbuffers
-// objects.
-package flatbuffers
diff --git a/third_party/flatbuffers/go/encode.go b/third_party/flatbuffers/go/encode.go
deleted file mode 100644
index 48ff36e..0000000
--- a/third_party/flatbuffers/go/encode.go
+++ /dev/null
@@ -1,216 +0,0 @@
-package flatbuffers
-
-import (
-	"math"
-)
-
-type (
-	// A SOffsetT stores a signed offset into arbitrary data.
-	SOffsetT int32
-	// A UOffsetT stores an unsigned offset into vector data.
-	UOffsetT uint32
-	// A VOffsetT stores an unsigned offset in a vtable.
-	VOffsetT uint16
-)
-
-const (
-	// VtableMetadataFields is the count of metadata fields in each vtable.
-	VtableMetadataFields = 2
-)
-
-// GetByte decodes a little-endian byte from a byte slice.
-func GetByte(buf []byte) byte {
-	return byte(GetUint8(buf))
-}
-
-// GetBool decodes a little-endian bool from a byte slice.
-func GetBool(buf []byte) bool {
-	return buf[0] == 1
-}
-
-// GetUint8 decodes a little-endian uint8 from a byte slice.
-func GetUint8(buf []byte) (n uint8) {
-	n = uint8(buf[0])
-	return
-}
-
-// GetUint16 decodes a little-endian uint16 from a byte slice.
-func GetUint16(buf []byte) (n uint16) {
-	n |= uint16(buf[0])
-	n |= uint16(buf[1]) << 8
-	return
-}
-
-// GetUint32 decodes a little-endian uint32 from a byte slice.
-func GetUint32(buf []byte) (n uint32) {
-	n |= uint32(buf[0])
-	n |= uint32(buf[1]) << 8
-	n |= uint32(buf[2]) << 16
-	n |= uint32(buf[3]) << 24
-	return
-}
-
-// GetUint64 decodes a little-endian uint64 from a byte slice.
-func GetUint64(buf []byte) (n uint64) {
-	n |= uint64(buf[0])
-	n |= uint64(buf[1]) << 8
-	n |= uint64(buf[2]) << 16
-	n |= uint64(buf[3]) << 24
-	n |= uint64(buf[4]) << 32
-	n |= uint64(buf[5]) << 40
-	n |= uint64(buf[6]) << 48
-	n |= uint64(buf[7]) << 56
-	return
-}
-
-// GetInt8 decodes a little-endian int8 from a byte slice.
-func GetInt8(buf []byte) (n int8) {
-	n = int8(buf[0])
-	return
-}
-
-// GetInt16 decodes a little-endian int16 from a byte slice.
-func GetInt16(buf []byte) (n int16) {
-	n |= int16(buf[0])
-	n |= int16(buf[1]) << 8
-	return
-}
-
-// GetInt32 decodes a little-endian int32 from a byte slice.
-func GetInt32(buf []byte) (n int32) {
-	n |= int32(buf[0])
-	n |= int32(buf[1]) << 8
-	n |= int32(buf[2]) << 16
-	n |= int32(buf[3]) << 24
-	return
-}
-
-// GetInt64 decodes a little-endian int64 from a byte slice.
-func GetInt64(buf []byte) (n int64) {
-	n |= int64(buf[0])
-	n |= int64(buf[1]) << 8
-	n |= int64(buf[2]) << 16
-	n |= int64(buf[3]) << 24
-	n |= int64(buf[4]) << 32
-	n |= int64(buf[5]) << 40
-	n |= int64(buf[6]) << 48
-	n |= int64(buf[7]) << 56
-	return
-}
-
-// GetFloat32 decodes a little-endian float32 from a byte slice.
-func GetFloat32(buf []byte) float32 {
-	x := GetUint32(buf)
-	return math.Float32frombits(x)
-}
-
-// GetFloat64 decodes a little-endian float64 from a byte slice.
-func GetFloat64(buf []byte) float64 {
-	x := GetUint64(buf)
-	return math.Float64frombits(x)
-}
-
-// GetUOffsetT decodes a little-endian UOffsetT from a byte slice.
-func GetUOffsetT(buf []byte) UOffsetT {
-	return UOffsetT(GetInt32(buf))
-}
-
-// GetSOffsetT decodes a little-endian SOffsetT from a byte slice.
-func GetSOffsetT(buf []byte) SOffsetT {
-	return SOffsetT(GetInt32(buf))
-}
-
-// GetVOffsetT decodes a little-endian VOffsetT from a byte slice.
-func GetVOffsetT(buf []byte) VOffsetT {
-	return VOffsetT(GetUint16(buf))
-}
-
-// WriteByte encodes a little-endian uint8 into a byte slice.
-func WriteByte(buf []byte, n byte) {
-	WriteUint8(buf, uint8(n))
-}
-
-// WriteBool encodes a little-endian bool into a byte slice.
-func WriteBool(buf []byte, b bool) {
-	buf[0] = 0
-	if b {
-		buf[0] = 1
-	}
-}
-
-// WriteUint8 encodes a little-endian uint8 into a byte slice.
-func WriteUint8(buf []byte, n uint8) {
-	buf[0] = byte(n)
-}
-
-// WriteUint16 encodes a little-endian uint16 into a byte slice.
-func WriteUint16(buf []byte, n uint16) {
-	buf[0] = byte(n)
-	buf[1] = byte(n >> 8)
-}
-
-// WriteUint32 encodes a little-endian uint32 into a byte slice.
-func WriteUint32(buf []byte, n uint32) {
-	buf[0] = byte(n)
-	buf[1] = byte(n >> 8)
-	buf[2] = byte(n >> 16)
-	buf[3] = byte(n >> 24)
-}
-
-// WriteUint64 encodes a little-endian uint64 into a byte slice.
-func WriteUint64(buf []byte, n uint64) {
-	for i := uint(0); i < uint(SizeUint64); i++ {
-		buf[i] = byte(n >> (i * 8))
-	}
-}
-
-// WriteInt8 encodes a little-endian int8 into a byte slice.
-func WriteInt8(buf []byte, n int8) {
-	buf[0] = byte(n)
-}
-
-// WriteInt16 encodes a little-endian int16 into a byte slice.
-func WriteInt16(buf []byte, n int16) {
-	buf[0] = byte(n)
-	buf[1] = byte(n >> 8)
-}
-
-// WriteInt32 encodes a little-endian int32 into a byte slice.
-func WriteInt32(buf []byte, n int32) {
-	buf[0] = byte(n)
-	buf[1] = byte(n >> 8)
-	buf[2] = byte(n >> 16)
-	buf[3] = byte(n >> 24)
-}
-
-// WriteInt64 encodes a little-endian int64 into a byte slice.
-func WriteInt64(buf []byte, n int64) {
-	for i := uint(0); i < uint(SizeInt64); i++ {
-		buf[i] = byte(n >> (i * 8))
-	}
-}
-
-// WriteFloat32 encodes a little-endian float32 into a byte slice.
-func WriteFloat32(buf []byte, n float32) {
-	WriteUint32(buf, math.Float32bits(n))
-}
-
-// WriteFloat64 encodes a little-endian float64 into a byte slice.
-func WriteFloat64(buf []byte, n float64) {
-	WriteUint64(buf, math.Float64bits(n))
-}
-
-// WriteVOffsetT encodes a little-endian VOffsetT into a byte slice.
-func WriteVOffsetT(buf []byte, n VOffsetT) {
-	WriteUint16(buf, uint16(n))
-}
-
-// WriteSOffsetT encodes a little-endian SOffsetT into a byte slice.
-func WriteSOffsetT(buf []byte, n SOffsetT) {
-	WriteInt32(buf, int32(n))
-}
-
-// WriteUOffsetT encodes a little-endian UOffsetT into a byte slice.
-func WriteUOffsetT(buf []byte, n UOffsetT) {
-	WriteUint32(buf, uint32(n))
-}
diff --git a/third_party/flatbuffers/go/grpc.go b/third_party/flatbuffers/go/grpc.go
deleted file mode 100644
index e7dabd3..0000000
--- a/third_party/flatbuffers/go/grpc.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package flatbuffers
-
-// Codec implements gRPC-go Codec which is used to encode and decode messages.
-var Codec = "flatbuffers"
-
-type FlatbuffersCodec struct{}
-
-func (FlatbuffersCodec) Marshal(v interface{}) ([]byte, error) {
-	return v.(*Builder).FinishedBytes(), nil
-}
-
-func (FlatbuffersCodec) Unmarshal(data []byte, v interface{}) error {
-	v.(flatbuffersInit).Init(data, GetUOffsetT(data))
-	return nil
-}
-
-func (FlatbuffersCodec) String() string {
-	return Codec
-}
-
-type flatbuffersInit interface {
-	Init(data []byte, i UOffsetT)
-}
diff --git a/third_party/flatbuffers/go/lib.go b/third_party/flatbuffers/go/lib.go
deleted file mode 100644
index adfce52..0000000
--- a/third_party/flatbuffers/go/lib.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package flatbuffers
-
-// FlatBuffer is the interface that represents a flatbuffer.
-type FlatBuffer interface {
-	Table() Table
-	Init(buf []byte, i UOffsetT)
-}
-
-// GetRootAs is a generic helper to initialize a FlatBuffer with the provided buffer bytes and its data offset.
-func GetRootAs(buf []byte, offset UOffsetT, fb FlatBuffer) {
-	n := GetUOffsetT(buf[offset:])
-	fb.Init(buf, n+offset)
-}
diff --git a/third_party/flatbuffers/go/sizes.go b/third_party/flatbuffers/go/sizes.go
deleted file mode 100644
index ba22169..0000000
--- a/third_party/flatbuffers/go/sizes.go
+++ /dev/null
@@ -1,55 +0,0 @@
-package flatbuffers
-
-import (
-	"unsafe"
-)
-
-const (
-	// See http://golang.org/ref/spec#Numeric_types
-
-	// SizeUint8 is the byte size of a uint8.
-	SizeUint8 = 1
-	// SizeUint16 is the byte size of a uint16.
-	SizeUint16 = 2
-	// SizeUint32 is the byte size of a uint32.
-	SizeUint32 = 4
-	// SizeUint64 is the byte size of a uint64.
-	SizeUint64 = 8
-
-	// SizeInt8 is the byte size of a int8.
-	SizeInt8 = 1
-	// SizeInt16 is the byte size of a int16.
-	SizeInt16 = 2
-	// SizeInt32 is the byte size of a int32.
-	SizeInt32 = 4
-	// SizeInt64 is the byte size of a int64.
-	SizeInt64 = 8
-
-	// SizeFloat32 is the byte size of a float32.
-	SizeFloat32 = 4
-	// SizeFloat64 is the byte size of a float64.
-	SizeFloat64 = 8
-
-	// SizeByte is the byte size of a byte.
-	// The `byte` type is aliased (by Go definition) to uint8.
-	SizeByte = 1
-
-	// SizeBool is the byte size of a bool.
-	// The `bool` type is aliased (by flatbuffers convention) to uint8.
-	SizeBool = 1
-
-	// SizeSOffsetT is the byte size of an SOffsetT.
-	// The `SOffsetT` type is aliased (by flatbuffers convention) to int32.
-	SizeSOffsetT = 4
-	// SizeUOffsetT is the byte size of an UOffsetT.
-	// The `UOffsetT` type is aliased (by flatbuffers convention) to uint32.
-	SizeUOffsetT = 4
-	// SizeVOffsetT is the byte size of an VOffsetT.
-	// The `VOffsetT` type is aliased (by flatbuffers convention) to uint16.
-	SizeVOffsetT = 2
-)
-
-// byteSliceToString converts a []byte to string without a heap allocation.
-func byteSliceToString(b []byte) string {
-	return *(*string)(unsafe.Pointer(&b))
-}
diff --git a/third_party/flatbuffers/go/struct.go b/third_party/flatbuffers/go/struct.go
deleted file mode 100644
index 11258f7..0000000
--- a/third_party/flatbuffers/go/struct.go
+++ /dev/null
@@ -1,8 +0,0 @@
-package flatbuffers
-
-// Struct wraps a byte slice and provides read access to its data.
-//
-// Structs do not have a vtable.
-type Struct struct {
-	Table
-}
diff --git a/third_party/flatbuffers/go/table.go b/third_party/flatbuffers/go/table.go
deleted file mode 100644
index b273146..0000000
--- a/third_party/flatbuffers/go/table.go
+++ /dev/null
@@ -1,505 +0,0 @@
-package flatbuffers
-
-// Table wraps a byte slice and provides read access to its data.
-//
-// The variable `Pos` indicates the root of the FlatBuffers object therein.
-type Table struct {
-	Bytes []byte
-	Pos   UOffsetT // Always < 1<<31.
-}
-
-// Offset provides access into the Table's vtable.
-//
-// Fields which are deprecated are ignored by checking against the vtable's length.
-func (t *Table) Offset(vtableOffset VOffsetT) VOffsetT {
-	vtable := UOffsetT(SOffsetT(t.Pos) - t.GetSOffsetT(t.Pos))
-	if vtableOffset < t.GetVOffsetT(vtable) {
-		return t.GetVOffsetT(vtable + UOffsetT(vtableOffset))
-	}
-	return 0
-}
-
-// Indirect retrieves the relative offset stored at `offset`.
-func (t *Table) Indirect(off UOffsetT) UOffsetT {
-	return off + GetUOffsetT(t.Bytes[off:])
-}
-
-// String gets a string from data stored inside the flatbuffer.
-func (t *Table) String(off UOffsetT) string {
-	b := t.ByteVector(off)
-	return byteSliceToString(b)
-}
-
-// ByteVector gets a byte slice from data stored inside the flatbuffer.
-func (t *Table) ByteVector(off UOffsetT) []byte {
-	off += GetUOffsetT(t.Bytes[off:])
-	start := off + UOffsetT(SizeUOffsetT)
-	length := GetUOffsetT(t.Bytes[off:])
-	return t.Bytes[start : start+length]
-}
-
-// VectorLen retrieves the length of the vector whose offset is stored at
-// "off" in this object.
-func (t *Table) VectorLen(off UOffsetT) int {
-	off += t.Pos
-	off += GetUOffsetT(t.Bytes[off:])
-	return int(GetUOffsetT(t.Bytes[off:]))
-}
-
-// Vector retrieves the start of data of the vector whose offset is stored
-// at "off" in this object.
-func (t *Table) Vector(off UOffsetT) UOffsetT {
-	off += t.Pos
-	x := off + GetUOffsetT(t.Bytes[off:])
-	// data starts after metadata containing the vector length
-	x += UOffsetT(SizeUOffsetT)
-	return x
-}
-
-// Union initializes any Table-derived type to point to the union at the given
-// offset.
-func (t *Table) Union(t2 *Table, off UOffsetT) {
-	off += t.Pos
-	t2.Pos = off + t.GetUOffsetT(off)
-	t2.Bytes = t.Bytes
-}
-
-// GetBool retrieves a bool at the given offset.
-func (t *Table) GetBool(off UOffsetT) bool {
-	return GetBool(t.Bytes[off:])
-}
-
-// GetByte retrieves a byte at the given offset.
-func (t *Table) GetByte(off UOffsetT) byte {
-	return GetByte(t.Bytes[off:])
-}
-
-// GetUint8 retrieves a uint8 at the given offset.
-func (t *Table) GetUint8(off UOffsetT) uint8 {
-	return GetUint8(t.Bytes[off:])
-}
-
-// GetUint16 retrieves a uint16 at the given offset.
-func (t *Table) GetUint16(off UOffsetT) uint16 {
-	return GetUint16(t.Bytes[off:])
-}
-
-// GetUint32 retrieves a uint32 at the given offset.
-func (t *Table) GetUint32(off UOffsetT) uint32 {
-	return GetUint32(t.Bytes[off:])
-}
-
-// GetUint64 retrieves a uint64 at the given offset.
-func (t *Table) GetUint64(off UOffsetT) uint64 {
-	return GetUint64(t.Bytes[off:])
-}
-
-// GetInt8 retrieves a int8 at the given offset.
-func (t *Table) GetInt8(off UOffsetT) int8 {
-	return GetInt8(t.Bytes[off:])
-}
-
-// GetInt16 retrieves a int16 at the given offset.
-func (t *Table) GetInt16(off UOffsetT) int16 {
-	return GetInt16(t.Bytes[off:])
-}
-
-// GetInt32 retrieves a int32 at the given offset.
-func (t *Table) GetInt32(off UOffsetT) int32 {
-	return GetInt32(t.Bytes[off:])
-}
-
-// GetInt64 retrieves a int64 at the given offset.
-func (t *Table) GetInt64(off UOffsetT) int64 {
-	return GetInt64(t.Bytes[off:])
-}
-
-// GetFloat32 retrieves a float32 at the given offset.
-func (t *Table) GetFloat32(off UOffsetT) float32 {
-	return GetFloat32(t.Bytes[off:])
-}
-
-// GetFloat64 retrieves a float64 at the given offset.
-func (t *Table) GetFloat64(off UOffsetT) float64 {
-	return GetFloat64(t.Bytes[off:])
-}
-
-// GetUOffsetT retrieves a UOffsetT at the given offset.
-func (t *Table) GetUOffsetT(off UOffsetT) UOffsetT {
-	return GetUOffsetT(t.Bytes[off:])
-}
-
-// GetVOffsetT retrieves a VOffsetT at the given offset.
-func (t *Table) GetVOffsetT(off UOffsetT) VOffsetT {
-	return GetVOffsetT(t.Bytes[off:])
-}
-
-// GetSOffsetT retrieves a SOffsetT at the given offset.
-func (t *Table) GetSOffsetT(off UOffsetT) SOffsetT {
-	return GetSOffsetT(t.Bytes[off:])
-}
-
-// GetBoolSlot retrieves the bool that the given vtable location
-// points to. If the vtable value is zero, the default value `d`
-// will be returned.
-func (t *Table) GetBoolSlot(slot VOffsetT, d bool) bool {
-	off := t.Offset(slot)
-	if off == 0 {
-		return d
-	}
-
-	return t.GetBool(t.Pos + UOffsetT(off))
-}
-
-// GetByteSlot retrieves the byte that the given vtable location
-// points to. If the vtable value is zero, the default value `d`
-// will be returned.
-func (t *Table) GetByteSlot(slot VOffsetT, d byte) byte {
-	off := t.Offset(slot)
-	if off == 0 {
-		return d
-	}
-
-	return t.GetByte(t.Pos + UOffsetT(off))
-}
-
-// GetInt8Slot retrieves the int8 that the given vtable location
-// points to. If the vtable value is zero, the default value `d`
-// will be returned.
-func (t *Table) GetInt8Slot(slot VOffsetT, d int8) int8 {
-	off := t.Offset(slot)
-	if off == 0 {
-		return d
-	}
-
-	return t.GetInt8(t.Pos + UOffsetT(off))
-}
-
-// GetUint8Slot retrieves the uint8 that the given vtable location
-// points to. If the vtable value is zero, the default value `d`
-// will be returned.
-func (t *Table) GetUint8Slot(slot VOffsetT, d uint8) uint8 {
-	off := t.Offset(slot)
-	if off == 0 {
-		return d
-	}
-
-	return t.GetUint8(t.Pos + UOffsetT(off))
-}
-
-// GetInt16Slot retrieves the int16 that the given vtable location
-// points to. If the vtable value is zero, the default value `d`
-// will be returned.
-func (t *Table) GetInt16Slot(slot VOffsetT, d int16) int16 {
-	off := t.Offset(slot)
-	if off == 0 {
-		return d
-	}
-
-	return t.GetInt16(t.Pos + UOffsetT(off))
-}
-
-// GetUint16Slot retrieves the uint16 that the given vtable location
-// points to. If the vtable value is zero, the default value `d`
-// will be returned.
-func (t *Table) GetUint16Slot(slot VOffsetT, d uint16) uint16 {
-	off := t.Offset(slot)
-	if off == 0 {
-		return d
-	}
-
-	return t.GetUint16(t.Pos + UOffsetT(off))
-}
-
-// GetInt32Slot retrieves the int32 that the given vtable location
-// points to. If the vtable value is zero, the default value `d`
-// will be returned.
-func (t *Table) GetInt32Slot(slot VOffsetT, d int32) int32 {
-	off := t.Offset(slot)
-	if off == 0 {
-		return d
-	}
-
-	return t.GetInt32(t.Pos + UOffsetT(off))
-}
-
-// GetUint32Slot retrieves the uint32 that the given vtable location
-// points to. If the vtable value is zero, the default value `d`
-// will be returned.
-func (t *Table) GetUint32Slot(slot VOffsetT, d uint32) uint32 {
-	off := t.Offset(slot)
-	if off == 0 {
-		return d
-	}
-
-	return t.GetUint32(t.Pos + UOffsetT(off))
-}
-
-// GetInt64Slot retrieves the int64 that the given vtable location
-// points to. If the vtable value is zero, the default value `d`
-// will be returned.
-func (t *Table) GetInt64Slot(slot VOffsetT, d int64) int64 {
-	off := t.Offset(slot)
-	if off == 0 {
-		return d
-	}
-
-	return t.GetInt64(t.Pos + UOffsetT(off))
-}
-
-// GetUint64Slot retrieves the uint64 that the given vtable location
-// points to. If the vtable value is zero, the default value `d`
-// will be returned.
-func (t *Table) GetUint64Slot(slot VOffsetT, d uint64) uint64 {
-	off := t.Offset(slot)
-	if off == 0 {
-		return d
-	}
-
-	return t.GetUint64(t.Pos + UOffsetT(off))
-}
-
-// GetFloat32Slot retrieves the float32 that the given vtable location
-// points to. If the vtable value is zero, the default value `d`
-// will be returned.
-func (t *Table) GetFloat32Slot(slot VOffsetT, d float32) float32 {
-	off := t.Offset(slot)
-	if off == 0 {
-		return d
-	}
-
-	return t.GetFloat32(t.Pos + UOffsetT(off))
-}
-
-// GetFloat64Slot retrieves the float64 that the given vtable location
-// points to. If the vtable value is zero, the default value `d`
-// will be returned.
-func (t *Table) GetFloat64Slot(slot VOffsetT, d float64) float64 {
-	off := t.Offset(slot)
-	if off == 0 {
-		return d
-	}
-
-	return t.GetFloat64(t.Pos + UOffsetT(off))
-}
-
-// GetVOffsetTSlot retrieves the VOffsetT that the given vtable location
-// points to. If the vtable value is zero, the default value `d`
-// will be returned.
-func (t *Table) GetVOffsetTSlot(slot VOffsetT, d VOffsetT) VOffsetT {
-	off := t.Offset(slot)
-	if off == 0 {
-		return d
-	}
-	return VOffsetT(off)
-}
-
-// MutateBool updates a bool at the given offset.
-func (t *Table) MutateBool(off UOffsetT, n bool) bool {
-	WriteBool(t.Bytes[off:], n)
-	return true
-}
-
-// MutateByte updates a Byte at the given offset.
-func (t *Table) MutateByte(off UOffsetT, n byte) bool {
-	WriteByte(t.Bytes[off:], n)
-	return true
-}
-
-// MutateUint8 updates a Uint8 at the given offset.
-func (t *Table) MutateUint8(off UOffsetT, n uint8) bool {
-	WriteUint8(t.Bytes[off:], n)
-	return true
-}
-
-// MutateUint16 updates a Uint16 at the given offset.
-func (t *Table) MutateUint16(off UOffsetT, n uint16) bool {
-	WriteUint16(t.Bytes[off:], n)
-	return true
-}
-
-// MutateUint32 updates a Uint32 at the given offset.
-func (t *Table) MutateUint32(off UOffsetT, n uint32) bool {
-	WriteUint32(t.Bytes[off:], n)
-	return true
-}
-
-// MutateUint64 updates a Uint64 at the given offset.
-func (t *Table) MutateUint64(off UOffsetT, n uint64) bool {
-	WriteUint64(t.Bytes[off:], n)
-	return true
-}
-
-// MutateInt8 updates a Int8 at the given offset.
-func (t *Table) MutateInt8(off UOffsetT, n int8) bool {
-	WriteInt8(t.Bytes[off:], n)
-	return true
-}
-
-// MutateInt16 updates a Int16 at the given offset.
-func (t *Table) MutateInt16(off UOffsetT, n int16) bool {
-	WriteInt16(t.Bytes[off:], n)
-	return true
-}
-
-// MutateInt32 updates a Int32 at the given offset.
-func (t *Table) MutateInt32(off UOffsetT, n int32) bool {
-	WriteInt32(t.Bytes[off:], n)
-	return true
-}
-
-// MutateInt64 updates a Int64 at the given offset.
-func (t *Table) MutateInt64(off UOffsetT, n int64) bool {
-	WriteInt64(t.Bytes[off:], n)
-	return true
-}
-
-// MutateFloat32 updates a Float32 at the given offset.
-func (t *Table) MutateFloat32(off UOffsetT, n float32) bool {
-	WriteFloat32(t.Bytes[off:], n)
-	return true
-}
-
-// MutateFloat64 updates a Float64 at the given offset.
-func (t *Table) MutateFloat64(off UOffsetT, n float64) bool {
-	WriteFloat64(t.Bytes[off:], n)
-	return true
-}
-
-// MutateUOffsetT updates a UOffsetT at the given offset.
-func (t *Table) MutateUOffsetT(off UOffsetT, n UOffsetT) bool {
-	WriteUOffsetT(t.Bytes[off:], n)
-	return true
-}
-
-// MutateVOffsetT updates a VOffsetT at the given offset.
-func (t *Table) MutateVOffsetT(off UOffsetT, n VOffsetT) bool {
-	WriteVOffsetT(t.Bytes[off:], n)
-	return true
-}
-
-// MutateSOffsetT updates a SOffsetT at the given offset.
-func (t *Table) MutateSOffsetT(off UOffsetT, n SOffsetT) bool {
-	WriteSOffsetT(t.Bytes[off:], n)
-	return true
-}
-
-// MutateBoolSlot updates the bool at given vtable location
-func (t *Table) MutateBoolSlot(slot VOffsetT, n bool) bool {
-	if off := t.Offset(slot); off != 0 {
-		t.MutateBool(t.Pos+UOffsetT(off), n)
-		return true
-	}
-
-	return false
-}
-
-// MutateByteSlot updates the byte at given vtable location
-func (t *Table) MutateByteSlot(slot VOffsetT, n byte) bool {
-	if off := t.Offset(slot); off != 0 {
-		t.MutateByte(t.Pos+UOffsetT(off), n)
-		return true
-	}
-
-	return false
-}
-
-// MutateInt8Slot updates the int8 at given vtable location
-func (t *Table) MutateInt8Slot(slot VOffsetT, n int8) bool {
-	if off := t.Offset(slot); off != 0 {
-		t.MutateInt8(t.Pos+UOffsetT(off), n)
-		return true
-	}
-
-	return false
-}
-
-// MutateUint8Slot updates the uint8 at given vtable location
-func (t *Table) MutateUint8Slot(slot VOffsetT, n uint8) bool {
-	if off := t.Offset(slot); off != 0 {
-		t.MutateUint8(t.Pos+UOffsetT(off), n)
-		return true
-	}
-
-	return false
-}
-
-// MutateInt16Slot updates the int16 at given vtable location
-func (t *Table) MutateInt16Slot(slot VOffsetT, n int16) bool {
-	if off := t.Offset(slot); off != 0 {
-		t.MutateInt16(t.Pos+UOffsetT(off), n)
-		return true
-	}
-
-	return false
-}
-
-// MutateUint16Slot updates the uint16 at given vtable location
-func (t *Table) MutateUint16Slot(slot VOffsetT, n uint16) bool {
-	if off := t.Offset(slot); off != 0 {
-		t.MutateUint16(t.Pos+UOffsetT(off), n)
-		return true
-	}
-
-	return false
-}
-
-// MutateInt32Slot updates the int32 at given vtable location
-func (t *Table) MutateInt32Slot(slot VOffsetT, n int32) bool {
-	if off := t.Offset(slot); off != 0 {
-		t.MutateInt32(t.Pos+UOffsetT(off), n)
-		return true
-	}
-
-	return false
-}
-
-// MutateUint32Slot updates the uint32 at given vtable location
-func (t *Table) MutateUint32Slot(slot VOffsetT, n uint32) bool {
-	if off := t.Offset(slot); off != 0 {
-		t.MutateUint32(t.Pos+UOffsetT(off), n)
-		return true
-	}
-
-	return false
-}
-
-// MutateInt64Slot updates the int64 at given vtable location
-func (t *Table) MutateInt64Slot(slot VOffsetT, n int64) bool {
-	if off := t.Offset(slot); off != 0 {
-		t.MutateInt64(t.Pos+UOffsetT(off), n)
-		return true
-	}
-
-	return false
-}
-
-// MutateUint64Slot updates the uint64 at given vtable location
-func (t *Table) MutateUint64Slot(slot VOffsetT, n uint64) bool {
-	if off := t.Offset(slot); off != 0 {
-		t.MutateUint64(t.Pos+UOffsetT(off), n)
-		return true
-	}
-
-	return false
-}
-
-// MutateFloat32Slot updates the float32 at given vtable location
-func (t *Table) MutateFloat32Slot(slot VOffsetT, n float32) bool {
-	if off := t.Offset(slot); off != 0 {
-		t.MutateFloat32(t.Pos+UOffsetT(off), n)
-		return true
-	}
-
-	return false
-}
-
-// MutateFloat64Slot updates the float64 at given vtable location
-func (t *Table) MutateFloat64Slot(slot VOffsetT, n float64) bool {
-	if off := t.Offset(slot); off != 0 {
-		t.MutateFloat64(t.Pos+UOffsetT(off), n)
-		return true
-	}
-
-	return false
-}
diff --git a/third_party/flatbuffers/grpc/README.md b/third_party/flatbuffers/grpc/README.md
deleted file mode 100644
index 1348519..0000000
--- a/third_party/flatbuffers/grpc/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-GRPC implementation and test
-============================
-
-NOTE: files in `src/` are shared with the GRPC project, and maintained there
-(any changes should be submitted to GRPC instead). These files are copied
-from GRPC, and work with both the Protobuf and FlatBuffers code generator.
-
-`tests/` contains a GRPC specific test, you need to have built and installed
-the GRPC libraries for this to compile. This test will build using the
-`FLATBUFFERS_BUILD_GRPCTEST` option to the main FlatBuffers CMake project.
-
diff --git a/third_party/flatbuffers/grpc/src/compiler/cpp_generator.cc b/third_party/flatbuffers/grpc/src/compiler/cpp_generator.cc
deleted file mode 100644
index da58ee0..0000000
--- a/third_party/flatbuffers/grpc/src/compiler/cpp_generator.cc
+++ /dev/null
@@ -1,1203 +0,0 @@
-/*
- *
- * Copyright 2015, 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
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include <map>
-
-#include "src/compiler/cpp_generator.h"
-
-#include <sstream>
-
-namespace grpc_cpp_generator {
-namespace {
-
-template <class T>
-grpc::string as_string(T x) {
-  std::ostringstream out;
-  out << x;
-  return out.str();
-}
-
-grpc::string FilenameIdentifier(const grpc::string &filename) {
-  grpc::string result;
-  for (unsigned i = 0; i < filename.size(); i++) {
-    char c = filename[i];
-    if (isalnum(c)) {
-      result.push_back(c);
-    } else {
-      static char hex[] = "0123456789abcdef";
-      result.push_back('_');
-      result.push_back(hex[(c >> 4) & 0xf]);
-      result.push_back(hex[c & 0xf]);
-    }
-  }
-  return result;
-}
-}  // namespace
-
-template<class T, size_t N>
-T *array_end(T (&array)[N]) { return array + N; }
-
-void PrintIncludes(grpc_generator::Printer *printer, 
-                   const std::vector<grpc::string>& headers, const Parameters &params) {
-  std::map<grpc::string, grpc::string> vars;
-
-  vars["l"] = params.use_system_headers ? '<' : '"';
-  vars["r"] = params.use_system_headers ? '>' : '"';
-
-  if (!params.grpc_search_path.empty()) {
-    vars["l"] += params.grpc_search_path;
-    if (params.grpc_search_path.back() != '/') {
-      vars["l"] += '/';
-    }
-  }
-
-  for (auto i = headers.begin(); i != headers.end(); i++) {
-    vars["h"] = *i;
-    printer->Print(vars, "#include $l$$h$$r$\n");
-  }
-}
-
-grpc::string GetHeaderPrologue(grpc_generator::File *file, const Parameters & /*params*/) {
-  grpc::string output;
-  {
-    // Scope the output stream so it closes and finalizes output to the string.
-    auto printer = file->CreatePrinter(&output);
-    std::map<grpc::string, grpc::string> vars;
-
-    vars["filename"] = file->filename();
-    vars["filename_identifier"] = FilenameIdentifier(file->filename());
-    vars["filename_base"] = file->filename_without_ext();
-    vars["message_header_ext"] = file->message_header_ext();
-
-    printer->Print(vars, "// Generated by the gRPC protobuf plugin.\n");
-    printer->Print(vars,
-                  "// If you make any local change, they will be lost.\n");
-    printer->Print(vars, "// source: $filename$\n");
-    printer->Print(vars, "#ifndef GRPC_$filename_identifier$__INCLUDED\n");
-    printer->Print(vars, "#define GRPC_$filename_identifier$__INCLUDED\n");
-    printer->Print(vars, "\n");
-    printer->Print(vars, "#include \"$filename_base$$message_header_ext$\"\n");
-    printer->Print(vars, file->additional_headers().c_str());
-    printer->Print(vars, "\n");
-  }
-  return output;
-}
-
-grpc::string GetHeaderIncludes(grpc_generator::File *file,
-                               const Parameters &params) {
-  grpc::string output;
-  {
-    // Scope the output stream so it closes and finalizes output to the string.
-    auto printer = file->CreatePrinter(&output);
-    std::map<grpc::string, grpc::string> vars;
-
-    static const char *headers_strs[] = {
-      "grpc++/impl/codegen/async_stream.h",
-      "grpc++/impl/codegen/async_unary_call.h",
-      "grpc++/impl/codegen/rpc_method.h",
-      "grpc++/impl/codegen/service_type.h",
-      "grpc++/impl/codegen/status.h",
-      "grpc++/impl/codegen/stub_options.h",
-      "grpc++/impl/codegen/sync_stream.h"
-    };
-    std::vector<grpc::string> headers(headers_strs, array_end(headers_strs));
-    PrintIncludes(printer.get(), headers, params);
-    printer->Print(vars, "\n");
-    printer->Print(vars, "namespace grpc {\n");
-    printer->Print(vars, "class CompletionQueue;\n");
-    printer->Print(vars, "class Channel;\n");
-    printer->Print(vars, "class RpcService;\n");
-    printer->Print(vars, "class ServerCompletionQueue;\n");
-    printer->Print(vars, "class ServerContext;\n");
-    printer->Print(vars, "}  // namespace grpc\n\n");
-
-    if (!file->package().empty()) {
-      std::vector<grpc::string> parts = file->package_parts();
-
-      for (auto part = parts.begin(); part != parts.end(); part++) {
-        vars["part"] = *part;
-        printer->Print(vars, "namespace $part$ {\n");
-      }
-      printer->Print(vars, "\n");
-    }
-  }
-  return output;
-}
-
-void PrintHeaderClientMethodInterfaces(
-    grpc_generator::Printer *printer, const grpc_generator::Method *method,
-    std::map<grpc::string, grpc::string> *vars, bool is_public) {
-  (*vars)["Method"] = method->name();
-  (*vars)["Request"] = method->input_type_name();
-  (*vars)["Response"] = method->output_type_name();
-
-  if (is_public) {
-    if (method->NoStreaming()) {
-      printer->Print(
-          *vars,
-          "virtual ::grpc::Status $Method$(::grpc::ClientContext* context, "
-          "const $Request$& request, $Response$* response) = 0;\n");
-      printer->Print(*vars,
-                     "std::unique_ptr< "
-                     "::grpc::ClientAsyncResponseReaderInterface< $Response$>> "
-                     "Async$Method$(::grpc::ClientContext* context, "
-                     "const $Request$& request, "
-                     "::grpc::CompletionQueue* cq) {\n");
-      printer->Indent();
-      printer->Print(*vars,
-                     "return std::unique_ptr< "
-                     "::grpc::ClientAsyncResponseReaderInterface< $Response$>>("
-                     "Async$Method$Raw(context, request, cq));\n");
-      printer->Outdent();
-      printer->Print("}\n");
-    } else if (method->ClientOnlyStreaming()) {
-      printer->Print(
-          *vars,
-          "std::unique_ptr< ::grpc::ClientWriterInterface< $Request$>>"
-          " $Method$("
-          "::grpc::ClientContext* context, $Response$* response) {\n");
-      printer->Indent();
-      printer->Print(
-          *vars,
-          "return std::unique_ptr< ::grpc::ClientWriterInterface< $Request$>>"
-          "($Method$Raw(context, response));\n");
-      printer->Outdent();
-      printer->Print("}\n");
-      printer->Print(
-          *vars,
-          "std::unique_ptr< ::grpc::ClientAsyncWriterInterface< $Request$>>"
-          " Async$Method$(::grpc::ClientContext* context, $Response$* "
-          "response, "
-          "::grpc::CompletionQueue* cq, void* tag) {\n");
-      printer->Indent();
-      printer->Print(*vars,
-                     "return std::unique_ptr< "
-                     "::grpc::ClientAsyncWriterInterface< $Request$>>("
-                     "Async$Method$Raw(context, response, cq, tag));\n");
-      printer->Outdent();
-      printer->Print("}\n");
-    } else if (method->ServerOnlyStreaming()) {
-      printer->Print(
-          *vars,
-          "std::unique_ptr< ::grpc::ClientReaderInterface< $Response$>>"
-          " $Method$(::grpc::ClientContext* context, const $Request$& request)"
-          " {\n");
-      printer->Indent();
-      printer->Print(
-          *vars,
-          "return std::unique_ptr< ::grpc::ClientReaderInterface< $Response$>>"
-          "($Method$Raw(context, request));\n");
-      printer->Outdent();
-      printer->Print("}\n");
-      printer->Print(
-          *vars,
-          "std::unique_ptr< ::grpc::ClientAsyncReaderInterface< $Response$>> "
-          "Async$Method$("
-          "::grpc::ClientContext* context, const $Request$& request, "
-          "::grpc::CompletionQueue* cq, void* tag) {\n");
-      printer->Indent();
-      printer->Print(*vars,
-                     "return std::unique_ptr< "
-                     "::grpc::ClientAsyncReaderInterface< $Response$>>("
-                     "Async$Method$Raw(context, request, cq, tag));\n");
-      printer->Outdent();
-      printer->Print("}\n");
-    } else if (method->BidiStreaming()) {
-      printer->Print(*vars,
-                     "std::unique_ptr< ::grpc::ClientReaderWriterInterface< "
-                     "$Request$, $Response$>> "
-                     "$Method$(::grpc::ClientContext* context) {\n");
-      printer->Indent();
-      printer->Print(
-          *vars,
-          "return std::unique_ptr< "
-          "::grpc::ClientReaderWriterInterface< $Request$, $Response$>>("
-          "$Method$Raw(context));\n");
-      printer->Outdent();
-      printer->Print("}\n");
-      printer->Print(
-          *vars,
-          "std::unique_ptr< "
-          "::grpc::ClientAsyncReaderWriterInterface< $Request$, $Response$>> "
-          "Async$Method$(::grpc::ClientContext* context, "
-          "::grpc::CompletionQueue* cq, void* tag) {\n");
-      printer->Indent();
-      printer->Print(
-          *vars,
-          "return std::unique_ptr< "
-          "::grpc::ClientAsyncReaderWriterInterface< $Request$, $Response$>>("
-          "Async$Method$Raw(context, cq, tag));\n");
-      printer->Outdent();
-      printer->Print("}\n");
-    }
-  } else {
-    if (method->NoStreaming()) {
-      printer->Print(
-          *vars,
-          "virtual ::grpc::ClientAsyncResponseReaderInterface< $Response$>* "
-          "Async$Method$Raw(::grpc::ClientContext* context, "
-          "const $Request$& request, "
-          "::grpc::CompletionQueue* cq) = 0;\n");
-    } else if (method->ClientOnlyStreaming()) {
-      printer->Print(
-          *vars,
-          "virtual ::grpc::ClientWriterInterface< $Request$>*"
-          " $Method$Raw("
-          "::grpc::ClientContext* context, $Response$* response) = 0;\n");
-      printer->Print(*vars,
-                     "virtual ::grpc::ClientAsyncWriterInterface< $Request$>*"
-                     " Async$Method$Raw(::grpc::ClientContext* context, "
-                     "$Response$* response, "
-                     "::grpc::CompletionQueue* cq, void* tag) = 0;\n");
-    } else if (method->ServerOnlyStreaming()) {
-      printer->Print(
-          *vars,
-          "virtual ::grpc::ClientReaderInterface< $Response$>* $Method$Raw("
-          "::grpc::ClientContext* context, const $Request$& request) = 0;\n");
-      printer->Print(
-          *vars,
-          "virtual ::grpc::ClientAsyncReaderInterface< $Response$>* "
-          "Async$Method$Raw("
-          "::grpc::ClientContext* context, const $Request$& request, "
-          "::grpc::CompletionQueue* cq, void* tag) = 0;\n");
-    } else if (method->BidiStreaming()) {
-      printer->Print(*vars,
-                     "virtual ::grpc::ClientReaderWriterInterface< $Request$, "
-                     "$Response$>* "
-                     "$Method$Raw(::grpc::ClientContext* context) = 0;\n");
-      printer->Print(*vars,
-                     "virtual ::grpc::ClientAsyncReaderWriterInterface< "
-                     "$Request$, $Response$>* "
-                     "Async$Method$Raw(::grpc::ClientContext* context, "
-                     "::grpc::CompletionQueue* cq, void* tag) = 0;\n");
-    }
-  }
-}
-
-void PrintHeaderClientMethod(grpc_generator::Printer *printer,
-                             const grpc_generator::Method *method,
-                             std::map<grpc::string, grpc::string> *vars,
-                             bool is_public) {
-  (*vars)["Method"] = method->name();
-  (*vars)["Request"] = method->input_type_name();
-  (*vars)["Response"] = method->output_type_name();
-  if (is_public) {
-    if (method->NoStreaming()) {
-      printer->Print(
-          *vars,
-          "::grpc::Status $Method$(::grpc::ClientContext* context, "
-          "const $Request$& request, $Response$* response) GRPC_OVERRIDE;\n");
-      printer->Print(
-          *vars,
-          "std::unique_ptr< ::grpc::ClientAsyncResponseReader< $Response$>> "
-          "Async$Method$(::grpc::ClientContext* context, "
-          "const $Request$& request, "
-          "::grpc::CompletionQueue* cq) {\n");
-      printer->Indent();
-      printer->Print(*vars,
-                     "return std::unique_ptr< "
-                     "::grpc::ClientAsyncResponseReader< $Response$>>("
-                     "Async$Method$Raw(context, request, cq));\n");
-      printer->Outdent();
-      printer->Print("}\n");
-    } else if (method->ClientOnlyStreaming()) {
-      printer->Print(
-          *vars,
-          "std::unique_ptr< ::grpc::ClientWriter< $Request$>>"
-          " $Method$("
-          "::grpc::ClientContext* context, $Response$* response) {\n");
-      printer->Indent();
-      printer->Print(*vars,
-                     "return std::unique_ptr< ::grpc::ClientWriter< $Request$>>"
-                     "($Method$Raw(context, response));\n");
-      printer->Outdent();
-      printer->Print("}\n");
-      printer->Print(*vars,
-                     "std::unique_ptr< ::grpc::ClientAsyncWriter< $Request$>>"
-                     " Async$Method$(::grpc::ClientContext* context, "
-                     "$Response$* response, "
-                     "::grpc::CompletionQueue* cq, void* tag) {\n");
-      printer->Indent();
-      printer->Print(
-          *vars,
-          "return std::unique_ptr< ::grpc::ClientAsyncWriter< $Request$>>("
-          "Async$Method$Raw(context, response, cq, tag));\n");
-      printer->Outdent();
-      printer->Print("}\n");
-    } else if (method->ServerOnlyStreaming()) {
-      printer->Print(
-          *vars,
-          "std::unique_ptr< ::grpc::ClientReader< $Response$>>"
-          " $Method$(::grpc::ClientContext* context, const $Request$& request)"
-          " {\n");
-      printer->Indent();
-      printer->Print(
-          *vars,
-          "return std::unique_ptr< ::grpc::ClientReader< $Response$>>"
-          "($Method$Raw(context, request));\n");
-      printer->Outdent();
-      printer->Print("}\n");
-      printer->Print(
-          *vars,
-          "std::unique_ptr< ::grpc::ClientAsyncReader< $Response$>> "
-          "Async$Method$("
-          "::grpc::ClientContext* context, const $Request$& request, "
-          "::grpc::CompletionQueue* cq, void* tag) {\n");
-      printer->Indent();
-      printer->Print(
-          *vars,
-          "return std::unique_ptr< ::grpc::ClientAsyncReader< $Response$>>("
-          "Async$Method$Raw(context, request, cq, tag));\n");
-      printer->Outdent();
-      printer->Print("}\n");
-    } else if (method->BidiStreaming()) {
-      printer->Print(
-          *vars,
-          "std::unique_ptr< ::grpc::ClientReaderWriter< $Request$, $Response$>>"
-          " $Method$(::grpc::ClientContext* context) {\n");
-      printer->Indent();
-      printer->Print(*vars,
-                     "return std::unique_ptr< "
-                     "::grpc::ClientReaderWriter< $Request$, $Response$>>("
-                     "$Method$Raw(context));\n");
-      printer->Outdent();
-      printer->Print("}\n");
-      printer->Print(*vars,
-                     "std::unique_ptr<  ::grpc::ClientAsyncReaderWriter< "
-                     "$Request$, $Response$>> "
-                     "Async$Method$(::grpc::ClientContext* context, "
-                     "::grpc::CompletionQueue* cq, void* tag) {\n");
-      printer->Indent();
-      printer->Print(*vars,
-                     "return std::unique_ptr< "
-                     "::grpc::ClientAsyncReaderWriter< $Request$, $Response$>>("
-                     "Async$Method$Raw(context, cq, tag));\n");
-      printer->Outdent();
-      printer->Print("}\n");
-    }
-  } else {
-    if (method->NoStreaming()) {
-      printer->Print(*vars,
-                     "::grpc::ClientAsyncResponseReader< $Response$>* "
-                     "Async$Method$Raw(::grpc::ClientContext* context, "
-                     "const $Request$& request, "
-                     "::grpc::CompletionQueue* cq) GRPC_OVERRIDE;\n");
-    } else if (method->ClientOnlyStreaming()) {
-      printer->Print(*vars,
-                     "::grpc::ClientWriter< $Request$>* $Method$Raw("
-                     "::grpc::ClientContext* context, $Response$* response) "
-                     "GRPC_OVERRIDE;\n");
-      printer->Print(
-          *vars,
-          "::grpc::ClientAsyncWriter< $Request$>* Async$Method$Raw("
-          "::grpc::ClientContext* context, $Response$* response, "
-          "::grpc::CompletionQueue* cq, void* tag) GRPC_OVERRIDE;\n");
-    } else if (method->ServerOnlyStreaming()) {
-      printer->Print(*vars,
-                     "::grpc::ClientReader< $Response$>* $Method$Raw("
-                     "::grpc::ClientContext* context, const $Request$& request)"
-                     " GRPC_OVERRIDE;\n");
-      printer->Print(
-          *vars,
-          "::grpc::ClientAsyncReader< $Response$>* Async$Method$Raw("
-          "::grpc::ClientContext* context, const $Request$& request, "
-          "::grpc::CompletionQueue* cq, void* tag) GRPC_OVERRIDE;\n");
-    } else if (method->BidiStreaming()) {
-      printer->Print(
-          *vars,
-          "::grpc::ClientReaderWriter< $Request$, $Response$>* "
-          "$Method$Raw(::grpc::ClientContext* context) GRPC_OVERRIDE;\n");
-      printer->Print(
-          *vars,
-          "::grpc::ClientAsyncReaderWriter< $Request$, $Response$>* "
-          "Async$Method$Raw(::grpc::ClientContext* context, "
-          "::grpc::CompletionQueue* cq, void* tag) GRPC_OVERRIDE;\n");
-    }
-  }
-}
-
-void PrintHeaderClientMethodData(grpc_generator::Printer *printer, const grpc_generator::Method *method,
-                                 std::map<grpc::string, grpc::string> *vars) {
-  (*vars)["Method"] = method->name();
-  printer->Print(*vars, "const ::grpc::RpcMethod rpcmethod_$Method$_;\n");
-}
-
-void PrintHeaderServerMethodSync(grpc_generator::Printer *printer, const grpc_generator::Method *method,
-                                 std::map<grpc::string, grpc::string> *vars) {
-  (*vars)["Method"] = method->name();
-  (*vars)["Request"] = method->input_type_name();
-  (*vars)["Response"] = method->output_type_name();
-  if (method->NoStreaming()) {
-    printer->Print(*vars,
-                   "virtual ::grpc::Status $Method$("
-                   "::grpc::ServerContext* context, const $Request$* request, "
-                   "$Response$* response);\n");
-  } else if (method->ClientOnlyStreaming()) {
-    printer->Print(*vars,
-                   "virtual ::grpc::Status $Method$("
-                   "::grpc::ServerContext* context, "
-                   "::grpc::ServerReader< $Request$>* reader, "
-                   "$Response$* response);\n");
-  } else if (method->ServerOnlyStreaming()) {
-    printer->Print(*vars,
-                   "virtual ::grpc::Status $Method$("
-                   "::grpc::ServerContext* context, const $Request$* request, "
-                   "::grpc::ServerWriter< $Response$>* writer);\n");
-  } else if (method->BidiStreaming()) {
-    printer->Print(
-        *vars,
-        "virtual ::grpc::Status $Method$("
-        "::grpc::ServerContext* context, "
-        "::grpc::ServerReaderWriter< $Response$, $Request$>* stream);"
-        "\n");
-  }
-}
-
-void PrintHeaderServerMethodAsync(
-    grpc_generator::Printer *printer,
-    const grpc_generator::Method *method,
-    std::map<grpc::string, grpc::string> *vars) {
-  (*vars)["Method"] = method->name();
-  (*vars)["Request"] = method->input_type_name();
-  (*vars)["Response"] = method->output_type_name();
-  printer->Print(*vars, "template <class BaseClass>\n");
-  printer->Print(*vars,
-                 "class WithAsyncMethod_$Method$ : public BaseClass {\n");
-  printer->Print(
-      " private:\n"
-      "  void BaseClassMustBeDerivedFromService(const Service *service) {}\n");
-  printer->Print(" public:\n");
-  printer->Indent();
-  printer->Print(*vars,
-                 "WithAsyncMethod_$Method$() {\n"
-                 "  ::grpc::Service::MarkMethodAsync($Idx$);\n"
-                 "}\n");
-  printer->Print(*vars,
-                 "~WithAsyncMethod_$Method$() GRPC_OVERRIDE {\n"
-                 "  BaseClassMustBeDerivedFromService(this);\n"
-                 "}\n");
-  if (method->NoStreaming()) {
-    printer->Print(
-        *vars,
-        "// disable synchronous version of this method\n"
-        "::grpc::Status $Method$("
-        "::grpc::ServerContext* context, const $Request$* request, "
-        "$Response$* response) GRPC_FINAL GRPC_OVERRIDE {\n"
-        "  abort();\n"
-        "  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
-        "}\n");
-    printer->Print(
-        *vars,
-        "void Request$Method$("
-        "::grpc::ServerContext* context, $Request$* request, "
-        "::grpc::ServerAsyncResponseWriter< $Response$>* response, "
-        "::grpc::CompletionQueue* new_call_cq, "
-        "::grpc::ServerCompletionQueue* notification_cq, void *tag) {\n");
-    printer->Print(*vars,
-                   "  ::grpc::Service::RequestAsyncUnary($Idx$, context, "
-                   "request, response, new_call_cq, notification_cq, tag);\n");
-    printer->Print("}\n");
-  } else if (method->ClientOnlyStreaming()) {
-    printer->Print(
-        *vars,
-        "// disable synchronous version of this method\n"
-        "::grpc::Status $Method$("
-        "::grpc::ServerContext* context, "
-        "::grpc::ServerReader< $Request$>* reader, "
-        "$Response$* response) GRPC_FINAL GRPC_OVERRIDE {\n"
-        "  abort();\n"
-        "  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
-        "}\n");
-    printer->Print(
-        *vars,
-        "void Request$Method$("
-        "::grpc::ServerContext* context, "
-        "::grpc::ServerAsyncReader< $Response$, $Request$>* reader, "
-        "::grpc::CompletionQueue* new_call_cq, "
-        "::grpc::ServerCompletionQueue* notification_cq, void *tag) {\n");
-    printer->Print(*vars,
-                   "  ::grpc::Service::RequestAsyncClientStreaming($Idx$, "
-                   "context, reader, new_call_cq, notification_cq, tag);\n");
-    printer->Print("}\n");
-  } else if (method->ServerOnlyStreaming()) {
-    printer->Print(
-        *vars,
-        "// disable synchronous version of this method\n"
-        "::grpc::Status $Method$("
-        "::grpc::ServerContext* context, const $Request$* request, "
-        "::grpc::ServerWriter< $Response$>* writer) GRPC_FINAL GRPC_OVERRIDE "
-        "{\n"
-        "  abort();\n"
-        "  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
-        "}\n");
-    printer->Print(
-        *vars,
-        "void Request$Method$("
-        "::grpc::ServerContext* context, $Request$* request, "
-        "::grpc::ServerAsyncWriter< $Response$>* writer, "
-        "::grpc::CompletionQueue* new_call_cq, "
-        "::grpc::ServerCompletionQueue* notification_cq, void *tag) {\n");
-    printer->Print(
-        *vars,
-        "  ::grpc::Service::RequestAsyncServerStreaming($Idx$, "
-        "context, request, writer, new_call_cq, notification_cq, tag);\n");
-    printer->Print("}\n");
-  } else if (method->BidiStreaming()) {
-    printer->Print(
-        *vars,
-        "// disable synchronous version of this method\n"
-        "::grpc::Status $Method$("
-        "::grpc::ServerContext* context, "
-        "::grpc::ServerReaderWriter< $Response$, $Request$>* stream) "
-        "GRPC_FINAL GRPC_OVERRIDE {\n"
-        "  abort();\n"
-        "  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
-        "}\n");
-    printer->Print(
-        *vars,
-        "void Request$Method$("
-        "::grpc::ServerContext* context, "
-        "::grpc::ServerAsyncReaderWriter< $Response$, $Request$>* stream, "
-        "::grpc::CompletionQueue* new_call_cq, "
-        "::grpc::ServerCompletionQueue* notification_cq, void *tag) {\n");
-    printer->Print(*vars,
-                   "  ::grpc::Service::RequestAsyncBidiStreaming($Idx$, "
-                   "context, stream, new_call_cq, notification_cq, tag);\n");
-    printer->Print("}\n");
-  }
-  printer->Outdent();
-  printer->Print(*vars, "};\n");
-}
-
-void PrintHeaderServerMethodGeneric(
-    grpc_generator::Printer *printer,
-    const grpc_generator::Method *method,
-    std::map<grpc::string, grpc::string> *vars) {
-  (*vars)["Method"] = method->name();
-  (*vars)["Request"] = method->input_type_name();
-  (*vars)["Response"] = method->output_type_name();
-  printer->Print(*vars, "template <class BaseClass>\n");
-  printer->Print(*vars,
-                 "class WithGenericMethod_$Method$ : public BaseClass {\n");
-  printer->Print(
-      " private:\n"
-      "  void BaseClassMustBeDerivedFromService(const Service *service) {}\n");
-  printer->Print(" public:\n");
-  printer->Indent();
-  printer->Print(*vars,
-                 "WithGenericMethod_$Method$() {\n"
-                 "  ::grpc::Service::MarkMethodGeneric($Idx$);\n"
-                 "}\n");
-  printer->Print(*vars,
-                 "~WithGenericMethod_$Method$() GRPC_OVERRIDE {\n"
-                 "  BaseClassMustBeDerivedFromService(this);\n"
-                 "}\n");
-  if (method->NoStreaming()) {
-    printer->Print(
-        *vars,
-        "// disable synchronous version of this method\n"
-        "::grpc::Status $Method$("
-        "::grpc::ServerContext* context, const $Request$* request, "
-        "$Response$* response) GRPC_FINAL GRPC_OVERRIDE {\n"
-        "  abort();\n"
-        "  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
-        "}\n");
-  } else if (method->ClientOnlyStreaming()) {
-    printer->Print(
-        *vars,
-        "// disable synchronous version of this method\n"
-        "::grpc::Status $Method$("
-        "::grpc::ServerContext* context, "
-        "::grpc::ServerReader< $Request$>* reader, "
-        "$Response$* response) GRPC_FINAL GRPC_OVERRIDE {\n"
-        "  abort();\n"
-        "  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
-        "}\n");
-  } else if (method->ServerOnlyStreaming()) {
-    printer->Print(
-        *vars,
-        "// disable synchronous version of this method\n"
-        "::grpc::Status $Method$("
-        "::grpc::ServerContext* context, const $Request$* request, "
-        "::grpc::ServerWriter< $Response$>* writer) GRPC_FINAL GRPC_OVERRIDE "
-        "{\n"
-        "  abort();\n"
-        "  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
-        "}\n");
-  } else if (method->BidiStreaming()) {
-    printer->Print(
-        *vars,
-        "// disable synchronous version of this method\n"
-        "::grpc::Status $Method$("
-        "::grpc::ServerContext* context, "
-        "::grpc::ServerReaderWriter< $Response$, $Request$>* stream) "
-        "GRPC_FINAL GRPC_OVERRIDE {\n"
-        "  abort();\n"
-        "  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, \"\");\n"
-        "}\n");
-  }
-  printer->Outdent();
-  printer->Print(*vars, "};\n");
-}
-
-void PrintHeaderService(grpc_generator::Printer *printer,
-                        const grpc_generator::Service *service,
-                        std::map<grpc::string, grpc::string> *vars) {
-  (*vars)["Service"] = service->name();
-
-  printer->Print(*vars,
-                 "class $Service$ GRPC_FINAL {\n"
-                 " public:\n");
-  printer->Indent();
-
-  // Client side
-  printer->Print(
-      "class StubInterface {\n"
-      " public:\n");
-  printer->Indent();
-  printer->Print("virtual ~StubInterface() {}\n");
-  for (int i = 0; i < service->method_count(); ++i) {
-    PrintHeaderClientMethodInterfaces(printer, service->method(i).get(), vars, true);
-  }
-  printer->Outdent();
-  printer->Print("private:\n");
-  printer->Indent();
-  for (int i = 0; i < service->method_count(); ++i) {
-    PrintHeaderClientMethodInterfaces(printer, service->method(i).get(), vars, false);
-  }
-  printer->Outdent();
-  printer->Print("};\n");
-  printer->Print(
-      "class Stub GRPC_FINAL : public StubInterface"
-      " {\n public:\n");
-  printer->Indent();
-  printer->Print("Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel);\n");
-  for (int i = 0; i < service->method_count(); ++i) {
-    PrintHeaderClientMethod(printer, service->method(i).get(), vars, true);
-  }
-  printer->Outdent();
-  printer->Print("\n private:\n");
-  printer->Indent();
-  printer->Print("std::shared_ptr< ::grpc::ChannelInterface> channel_;\n");
-  for (int i = 0; i < service->method_count(); ++i) {
-    PrintHeaderClientMethod(printer, service->method(i).get(), vars, false);
-  }
-  for (int i = 0; i < service->method_count(); ++i) {
-    PrintHeaderClientMethodData(printer, service->method(i).get(), vars);
-  }
-  printer->Outdent();
-  printer->Print("};\n");
-  printer->Print(
-      "static std::unique_ptr<Stub> NewStub(const std::shared_ptr< "
-      "::grpc::ChannelInterface>& channel, "
-      "const ::grpc::StubOptions& options = ::grpc::StubOptions());\n");
-
-  printer->Print("\n");
-
-  // Server side - base
-  printer->Print(
-      "class Service : public ::grpc::Service {\n"
-      " public:\n");
-  printer->Indent();
-  printer->Print("Service();\n");
-  printer->Print("virtual ~Service();\n");
-  for (int i = 0; i < service->method_count(); ++i) {
-    PrintHeaderServerMethodSync(printer, service->method(i).get(), vars);
-  }
-  printer->Outdent();
-  printer->Print("};\n");
-
-  // Server side - Asynchronous
-  for (int i = 0; i < service->method_count(); ++i) {
-    (*vars)["Idx"] = as_string(i);
-    PrintHeaderServerMethodAsync(printer, service->method(i).get(), vars);
-  }
-
-  printer->Print("typedef ");
-
-  for (int i = 0; i < service->method_count(); ++i) {
-    (*vars)["method_name"] = service->method(i).get()->name();
-    printer->Print(*vars, "WithAsyncMethod_$method_name$<");
-  }
-  printer->Print("Service");
-  for (int i = 0; i < service->method_count(); ++i) {
-    printer->Print(" >");
-  }
-  printer->Print(" AsyncService;\n");
-
-  // Server side - Generic
-  for (int i = 0; i < service->method_count(); ++i) {
-    (*vars)["Idx"] = as_string(i);
-    PrintHeaderServerMethodGeneric(printer, service->method(i).get(), vars);
-  }
-
-  printer->Outdent();
-  printer->Print("};\n");
-}
-
-grpc::string GetHeaderServices(grpc_generator::File *file,
-                               const Parameters &params) {
-  grpc::string output;
-  {
-    // Scope the output stream so it closes and finalizes output to the string.
-    auto printer = file->CreatePrinter(&output);
-    std::map<grpc::string, grpc::string> vars;
-    // Package string is empty or ends with a dot. It is used to fully qualify
-    // method names.
-    vars["Package"] = file->package();
-    if (!file->package().empty()) {
-      vars["Package"].append(".");
-    }
-
-    if (!params.services_namespace.empty()) {
-      vars["services_namespace"] = params.services_namespace;
-      printer->Print(vars, "\nnamespace $services_namespace$ {\n\n");
-    }
-
-    for (int i = 0; i < file->service_count(); ++i) {
-      PrintHeaderService(printer.get(), file->service(i).get(), &vars);
-      printer->Print("\n");
-    }
-
-    if (!params.services_namespace.empty()) {
-      printer->Print(vars, "}  // namespace $services_namespace$\n\n");
-    }
-  }
-  return output;
-}
-
-grpc::string GetHeaderEpilogue(grpc_generator::File *file, const Parameters & /*params*/) {
-  grpc::string output;
-  {
-    // Scope the output stream so it closes and finalizes output to the string.
-    auto printer = file->CreatePrinter(&output);
-    std::map<grpc::string, grpc::string> vars;
-
-    vars["filename"] = file->filename();
-    vars["filename_identifier"] = FilenameIdentifier(file->filename());
-
-    if (!file->package().empty()) {
-      std::vector<grpc::string> parts = file->package_parts();
-
-      for (auto part = parts.rbegin(); part != parts.rend(); part++) {
-        vars["part"] = *part;
-        printer->Print(vars, "}  // namespace $part$\n");
-      }
-      printer->Print(vars, "\n");
-    }
-
-    printer->Print(vars, "\n");
-    printer->Print(vars, "#endif  // GRPC_$filename_identifier$__INCLUDED\n");
-  }
-  return output;
-}
-
-grpc::string GetSourcePrologue(grpc_generator::File *file, const Parameters & /*params*/) {
-  grpc::string output;
-  {
-    // Scope the output stream so it closes and finalizes output to the string.
-    auto printer = file->CreatePrinter(&output);
-    std::map<grpc::string, grpc::string> vars;
-
-    vars["filename"] = file->filename();
-    vars["filename_base"] = file->filename_without_ext();
-    vars["message_header_ext"] = file->message_header_ext();
-    vars["service_header_ext"] = file->service_header_ext();
-
-    printer->Print(vars, "// Generated by the gRPC protobuf plugin.\n");
-    printer->Print(vars,
-                  "// If you make any local change, they will be lost.\n");
-    printer->Print(vars, "// source: $filename$\n\n");
-    printer->Print(vars, "#include \"$filename_base$$message_header_ext$\"\n");
-    printer->Print(vars, "#include \"$filename_base$$service_header_ext$\"\n");
-    printer->Print("\n");
-  }
-  return output;
-}
-
-grpc::string GetSourceIncludes(grpc_generator::File *file,
-                               const Parameters &params) {
-  grpc::string output;
-  {
-    // Scope the output stream so it closes and finalizes output to the string.
-    auto printer = file->CreatePrinter(&output);
-    std::map<grpc::string, grpc::string> vars;
-
-    static const char *headers_strs[] = {
-      "grpc++/impl/codegen/async_stream.h",
-      "grpc++/impl/codegen/async_unary_call.h",
-      "grpc++/impl/codegen/channel_interface.h",
-      "grpc++/impl/codegen/client_unary_call.h",
-      "grpc++/impl/codegen/method_handler_impl.h",
-      "grpc++/impl/codegen/rpc_service_method.h",
-      "grpc++/impl/codegen/service_type.h",
-      "grpc++/impl/codegen/sync_stream.h"
-    };
-    std::vector<grpc::string> headers(headers_strs, array_end(headers_strs));
-    PrintIncludes(printer.get(), headers, params);
-
-    if (!file->package().empty()) {
-      printer->Print("\n");
-      std::vector<grpc::string> parts = file->package_parts();
-
-      for (auto part = parts.begin(); part != parts.end(); part++) {
-        vars["part"] = *part;
-        printer->Print(vars, "namespace $part$ {\n");
-      }
-    }
-
-    printer->Print(vars, "\n");
-  }
-  return output;
-}
-
-void PrintSourceClientMethod(grpc_generator::Printer *printer,
-                             const grpc_generator::Method *method,
-                             std::map<grpc::string, grpc::string> *vars) {
-  (*vars)["Method"] = method->name();
-  (*vars)["Request"] = method->input_type_name();
-  (*vars)["Response"] = method->output_type_name();
-  if (method->NoStreaming()) {
-    printer->Print(*vars,
-                   "::grpc::Status $ns$$Service$::Stub::$Method$("
-                   "::grpc::ClientContext* context, "
-                   "const $Request$& request, $Response$* response) {\n");
-    printer->Print(*vars,
-                   "  return ::grpc::BlockingUnaryCall(channel_.get(), "
-                   "rpcmethod_$Method$_, "
-                   "context, request, response);\n"
-                   "}\n\n");
-    printer->Print(
-        *vars,
-        "::grpc::ClientAsyncResponseReader< $Response$>* "
-        "$ns$$Service$::Stub::Async$Method$Raw(::grpc::ClientContext* context, "
-        "const $Request$& request, "
-        "::grpc::CompletionQueue* cq) {\n");
-    printer->Print(*vars,
-                   "  return new "
-                   "::grpc::ClientAsyncResponseReader< $Response$>("
-                   "channel_.get(), cq, "
-                   "rpcmethod_$Method$_, "
-                   "context, request);\n"
-                   "}\n\n");
-  } else if (method->ClientOnlyStreaming()) {
-    printer->Print(*vars,
-                   "::grpc::ClientWriter< $Request$>* "
-                   "$ns$$Service$::Stub::$Method$Raw("
-                   "::grpc::ClientContext* context, $Response$* response) {\n");
-    printer->Print(*vars,
-                   "  return new ::grpc::ClientWriter< $Request$>("
-                   "channel_.get(), "
-                   "rpcmethod_$Method$_, "
-                   "context, response);\n"
-                   "}\n\n");
-    printer->Print(*vars,
-                   "::grpc::ClientAsyncWriter< $Request$>* "
-                   "$ns$$Service$::Stub::Async$Method$Raw("
-                   "::grpc::ClientContext* context, $Response$* response, "
-                   "::grpc::CompletionQueue* cq, void* tag) {\n");
-    printer->Print(*vars,
-                   "  return new ::grpc::ClientAsyncWriter< $Request$>("
-                   "channel_.get(), cq, "
-                   "rpcmethod_$Method$_, "
-                   "context, response, tag);\n"
-                   "}\n\n");
-  } else if (method->ServerOnlyStreaming()) {
-    printer->Print(
-        *vars,
-        "::grpc::ClientReader< $Response$>* "
-        "$ns$$Service$::Stub::$Method$Raw("
-        "::grpc::ClientContext* context, const $Request$& request) {\n");
-    printer->Print(*vars,
-                   "  return new ::grpc::ClientReader< $Response$>("
-                   "channel_.get(), "
-                   "rpcmethod_$Method$_, "
-                   "context, request);\n"
-                   "}\n\n");
-    printer->Print(*vars,
-                   "::grpc::ClientAsyncReader< $Response$>* "
-                   "$ns$$Service$::Stub::Async$Method$Raw("
-                   "::grpc::ClientContext* context, const $Request$& request, "
-                   "::grpc::CompletionQueue* cq, void* tag) {\n");
-    printer->Print(*vars,
-                   "  return new ::grpc::ClientAsyncReader< $Response$>("
-                   "channel_.get(), cq, "
-                   "rpcmethod_$Method$_, "
-                   "context, request, tag);\n"
-                   "}\n\n");
-  } else if (method->BidiStreaming()) {
-    printer->Print(
-        *vars,
-        "::grpc::ClientReaderWriter< $Request$, $Response$>* "
-        "$ns$$Service$::Stub::$Method$Raw(::grpc::ClientContext* context) {\n");
-    printer->Print(*vars,
-                   "  return new ::grpc::ClientReaderWriter< "
-                   "$Request$, $Response$>("
-                   "channel_.get(), "
-                   "rpcmethod_$Method$_, "
-                   "context);\n"
-                   "}\n\n");
-    printer->Print(
-        *vars,
-        "::grpc::ClientAsyncReaderWriter< $Request$, $Response$>* "
-        "$ns$$Service$::Stub::Async$Method$Raw(::grpc::ClientContext* context, "
-        "::grpc::CompletionQueue* cq, void* tag) {\n");
-    printer->Print(*vars,
-                   "  return new "
-                   "::grpc::ClientAsyncReaderWriter< $Request$, $Response$>("
-                   "channel_.get(), cq, "
-                   "rpcmethod_$Method$_, "
-                   "context, tag);\n"
-                   "}\n\n");
-  }
-}
-
-void PrintSourceServerMethod(grpc_generator::Printer *printer,
-                             const grpc_generator::Method *method,
-                             std::map<grpc::string, grpc::string> *vars) {
-  (*vars)["Method"] = method->name();
-  (*vars)["Request"] = method->input_type_name();
-  (*vars)["Response"] = method->output_type_name();
-  if (method->NoStreaming()) {
-    printer->Print(*vars,
-                   "::grpc::Status $ns$$Service$::Service::$Method$("
-                   "::grpc::ServerContext* context, "
-                   "const $Request$* request, $Response$* response) {\n");
-    printer->Print("  (void) context;\n");
-    printer->Print("  (void) request;\n");
-    printer->Print("  (void) response;\n");
-    printer->Print(
-        "  return ::grpc::Status("
-        "::grpc::StatusCode::UNIMPLEMENTED, \"\");\n");
-    printer->Print("}\n\n");
-  } else if (method->ClientOnlyStreaming()) {
-    printer->Print(*vars,
-                   "::grpc::Status $ns$$Service$::Service::$Method$("
-                   "::grpc::ServerContext* context, "
-                   "::grpc::ServerReader< $Request$>* reader, "
-                   "$Response$* response) {\n");
-    printer->Print("  (void) context;\n");
-    printer->Print("  (void) reader;\n");
-    printer->Print("  (void) response;\n");
-    printer->Print(
-        "  return ::grpc::Status("
-        "::grpc::StatusCode::UNIMPLEMENTED, \"\");\n");
-    printer->Print("}\n\n");
-  } else if (method->ServerOnlyStreaming()) {
-    printer->Print(*vars,
-                   "::grpc::Status $ns$$Service$::Service::$Method$("
-                   "::grpc::ServerContext* context, "
-                   "const $Request$* request, "
-                   "::grpc::ServerWriter< $Response$>* writer) {\n");
-    printer->Print("  (void) context;\n");
-    printer->Print("  (void) request;\n");
-    printer->Print("  (void) writer;\n");
-    printer->Print(
-        "  return ::grpc::Status("
-        "::grpc::StatusCode::UNIMPLEMENTED, \"\");\n");
-    printer->Print("}\n\n");
-  } else if (method->BidiStreaming()) {
-    printer->Print(*vars,
-                   "::grpc::Status $ns$$Service$::Service::$Method$("
-                   "::grpc::ServerContext* context, "
-                   "::grpc::ServerReaderWriter< $Response$, $Request$>* "
-                   "stream) {\n");
-    printer->Print("  (void) context;\n");
-    printer->Print("  (void) stream;\n");
-    printer->Print(
-        "  return ::grpc::Status("
-        "::grpc::StatusCode::UNIMPLEMENTED, \"\");\n");
-    printer->Print("}\n\n");
-  }
-}
-
-void PrintSourceService(grpc_generator::Printer *printer,
-                        const grpc_generator::Service *service,
-                        std::map<grpc::string, grpc::string> *vars) {
-  (*vars)["Service"] = service->name();
-
-  printer->Print(*vars,
-                 "static const char* $prefix$$Service$_method_names[] = {\n");
-  for (int i = 0; i < service->method_count(); ++i) {
-    (*vars)["Method"] = service->method(i).get()->name();
-    printer->Print(*vars, "  \"/$Package$$Service$/$Method$\",\n");
-  }
-  printer->Print(*vars, "};\n\n");
-
-  printer->Print(*vars,
-                 "std::unique_ptr< $ns$$Service$::Stub> $ns$$Service$::NewStub("
-                 "const std::shared_ptr< ::grpc::ChannelInterface>& channel, "
-                 "const ::grpc::StubOptions& options) {\n"
-                 "  std::unique_ptr< $ns$$Service$::Stub> stub(new "
-                 "$ns$$Service$::Stub(channel));\n"
-                 "  return stub;\n"
-                 "}\n\n");
-  printer->Print(*vars,
-                 "$ns$$Service$::Stub::Stub(const std::shared_ptr< "
-                 "::grpc::ChannelInterface>& channel)\n");
-  printer->Indent();
-  printer->Print(": channel_(channel)");
-  for (int i = 0; i < service->method_count(); ++i) {
-    auto method = service->method(i);
-    (*vars)["Method"] = method->name();
-    (*vars)["Idx"] = as_string(i);
-    if (method->NoStreaming()) {
-      (*vars)["StreamingType"] = "NORMAL_RPC";
-    } else if (method->ClientOnlyStreaming()) {
-      (*vars)["StreamingType"] = "CLIENT_STREAMING";
-    } else if (method->ServerOnlyStreaming()) {
-      (*vars)["StreamingType"] = "SERVER_STREAMING";
-    } else {
-      (*vars)["StreamingType"] = "BIDI_STREAMING";
-    }
-    printer->Print(*vars,
-                   ", rpcmethod_$Method$_("
-                   "$prefix$$Service$_method_names[$Idx$], "
-                   "::grpc::RpcMethod::$StreamingType$, "
-                   "channel"
-                   ")\n");
-  }
-  printer->Print("{}\n\n");
-  printer->Outdent();
-
-  for (int i = 0; i < service->method_count(); ++i) {
-    (*vars)["Idx"] = as_string(i);
-    PrintSourceClientMethod(printer, service->method(i).get(), vars);
-  }
-
-  printer->Print(*vars, "$ns$$Service$::Service::Service() {\n");
-  printer->Indent();
-  printer->Print(*vars, "(void)$prefix$$Service$_method_names;\n");
-  for (int i = 0; i < service->method_count(); ++i) {
-    auto method = service->method(i);
-    (*vars)["Idx"] = as_string(i);
-    (*vars)["Method"] = method->name();
-    (*vars)["Request"] = method->input_type_name();
-    (*vars)["Response"] = method->output_type_name();
-    if (method->NoStreaming()) {
-      printer->Print(
-          *vars,
-          "AddMethod(new ::grpc::RpcServiceMethod(\n"
-          "    $prefix$$Service$_method_names[$Idx$],\n"
-          "    ::grpc::RpcMethod::NORMAL_RPC,\n"
-          "    new ::grpc::RpcMethodHandler< $ns$$Service$::Service, "
-          "$Request$, "
-          "$Response$>(\n"
-          "        std::mem_fn(&$ns$$Service$::Service::$Method$), this)));\n");
-    } else if (method->ClientOnlyStreaming()) {
-      printer->Print(
-          *vars,
-          "AddMethod(new ::grpc::RpcServiceMethod(\n"
-          "    $prefix$$Service$_method_names[$Idx$],\n"
-          "    ::grpc::RpcMethod::CLIENT_STREAMING,\n"
-          "    new ::grpc::ClientStreamingHandler< "
-          "$ns$$Service$::Service, $Request$, $Response$>(\n"
-          "        std::mem_fn(&$ns$$Service$::Service::$Method$), this)));\n");
-    } else if (method->ServerOnlyStreaming()) {
-      printer->Print(
-          *vars,
-          "AddMethod(new ::grpc::RpcServiceMethod(\n"
-          "    $prefix$$Service$_method_names[$Idx$],\n"
-          "    ::grpc::RpcMethod::SERVER_STREAMING,\n"
-          "    new ::grpc::ServerStreamingHandler< "
-          "$ns$$Service$::Service, $Request$, $Response$>(\n"
-          "        std::mem_fn(&$ns$$Service$::Service::$Method$), this)));\n");
-    } else if (method->BidiStreaming()) {
-      printer->Print(
-          *vars,
-          "AddMethod(new ::grpc::RpcServiceMethod(\n"
-          "    $prefix$$Service$_method_names[$Idx$],\n"
-          "    ::grpc::RpcMethod::BIDI_STREAMING,\n"
-          "    new ::grpc::BidiStreamingHandler< "
-          "$ns$$Service$::Service, $Request$, $Response$>(\n"
-          "        std::mem_fn(&$ns$$Service$::Service::$Method$), this)));\n");
-    }
-  }
-  printer->Outdent();
-  printer->Print(*vars, "}\n\n");
-  printer->Print(*vars,
-                 "$ns$$Service$::Service::~Service() {\n"
-                 "}\n\n");
-  for (int i = 0; i < service->method_count(); ++i) {
-    (*vars)["Idx"] = as_string(i);
-    PrintSourceServerMethod(printer, service->method(i).get(), vars);
-  }
-}
-
-grpc::string GetSourceServices(grpc_generator::File *file,
-                               const Parameters &params) {
-  grpc::string output;
-  {
-    // Scope the output stream so it closes and finalizes output to the string.
-    auto printer = file->CreatePrinter(&output);
-    std::map<grpc::string, grpc::string> vars;
-    // Package string is empty or ends with a dot. It is used to fully qualify
-    // method names.
-    vars["Package"] = file->package();
-    if (!file->package().empty()) {
-      vars["Package"].append(".");
-    }
-    if (!params.services_namespace.empty()) {
-      vars["ns"] = params.services_namespace + "::";
-      vars["prefix"] = params.services_namespace;
-    } else {
-      vars["ns"] = "";
-      vars["prefix"] = "";
-    }
-
-    for (int i = 0; i < file->service_count(); ++i) {
-      PrintSourceService(printer.get(), file->service(i).get(), &vars);
-      printer->Print("\n");
-    }
-  }
-  return output;
-}
-
-grpc::string GetSourceEpilogue(grpc_generator::File *file, const Parameters & /*params*/) {
-  grpc::string temp;
-
-  if (!file->package().empty()) {
-    std::vector<grpc::string> parts = file->package_parts();
-
-    for (auto part = parts.begin(); part != parts.end(); part++) {
-      temp.append("}  // namespace ");
-      temp.append(*part);
-      temp.append("\n");
-    }
-    temp.append("\n");
-  }
-
-  return temp;
-}
-
-}  // namespace grpc_cpp_generator
diff --git a/third_party/flatbuffers/grpc/src/compiler/cpp_generator.h b/third_party/flatbuffers/grpc/src/compiler/cpp_generator.h
deleted file mode 100644
index a4adee7..0000000
--- a/third_party/flatbuffers/grpc/src/compiler/cpp_generator.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *
- * Copyright 2015, 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
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef GRPC_INTERNAL_COMPILER_CPP_GENERATOR_H
-#define GRPC_INTERNAL_COMPILER_CPP_GENERATOR_H
-
-// cpp_generator.h/.cc do not directly depend on GRPC/ProtoBuf, such that they
-// can be used to generate code for other serialization systems, such as
-// FlatBuffers.
-
-#include <memory>
-#include <vector>
-
-#include "src/compiler/schema_interface.h"
-
-namespace grpc_cpp_generator {
-
-// Contains all the parameters that are parsed from the command line.
-struct Parameters {
-  // Puts the service into a namespace
-  grpc::string services_namespace;
-  // Use system includes (<>) or local includes ("")
-  bool use_system_headers;
-  // Prefix to any grpc include
-  grpc::string grpc_search_path;
-};
-
-// Return the prologue of the generated header file.
-grpc::string GetHeaderPrologue(grpc_generator::File *file, const Parameters &params);
-
-// Return the includes needed for generated header file.
-grpc::string GetHeaderIncludes(grpc_generator::File *file, const Parameters &params);
-
-// Return the includes needed for generated source file.
-grpc::string GetSourceIncludes(grpc_generator::File *file, const Parameters &params);
-
-// Return the epilogue of the generated header file.
-grpc::string GetHeaderEpilogue(grpc_generator::File *file, const Parameters &params);
-
-// Return the prologue of the generated source file.
-grpc::string GetSourcePrologue(grpc_generator::File *file, const Parameters &params);
-
-// Return the services for generated header file.
-grpc::string GetHeaderServices(grpc_generator::File *file, const Parameters &params);
-
-// Return the services for generated source file.
-grpc::string GetSourceServices(grpc_generator::File *file, const Parameters &params);
-
-// Return the epilogue of the generated source file.
-grpc::string GetSourceEpilogue(grpc_generator::File *file, const Parameters &params);
-
-}  // namespace grpc_cpp_generator
-
-#endif  // GRPC_INTERNAL_COMPILER_CPP_GENERATOR_H
diff --git a/third_party/flatbuffers/grpc/src/compiler/go_generator.cc b/third_party/flatbuffers/grpc/src/compiler/go_generator.cc
deleted file mode 100644
index ce4223d..0000000
--- a/third_party/flatbuffers/grpc/src/compiler/go_generator.cc
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- *
- * Copyright 2015, 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
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation AN/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include <map>
-#include <cctype>
-#include <sstream>
-
-#include "src/compiler/go_generator.h"
-
-template <class T>
-grpc::string as_string(T x) {
-	std::ostringstream out;
-	out << x;
-	return out.str();
-}
-
-namespace grpc_go_generator {
-
-// Returns string with first letter to lowerCase
-grpc::string unexportName(grpc::string s) {
-	if (s.empty())
-		return s;
-	s[0] = static_cast<char>(std::tolower(s[0]));
-	return s;
-}
-
-// Returns string with first letter to uppercase
-grpc::string exportName(grpc::string s) {
-	if (s.empty())
-		return s;
-	s[0] = static_cast<char>(std::toupper(s[0]));
-	return s;
-}
-
-// Generates imports for the service
-void GenerateImports(grpc_generator::File *file, grpc_generator::Printer *printer,
-                     std::map<grpc::string, grpc::string> vars) {
-	vars["filename"] = file->filename();
-	printer->Print("//Generated by gRPC Go plugin\n");
-	printer->Print("//If you make any local changes, they will be lost\n");
-	printer->Print(vars, "//source: $filename$\n\n");
-	printer->Print(vars, "package $Package$\n\n");
-	if (file->additional_imports() != "") {
-		printer->Print(file->additional_imports().c_str());
-		printer->Print("\n\n");
-	}
-	printer->Print("import (\n");
-	printer->Indent();
-	printer->Print(vars, "$context$ \"golang.org/x/net/context\"\n");
-	printer->Print(vars, "$grpc$ \"google.golang.org/grpc\"\n");
-	printer->Outdent();
-	printer->Print(")\n\n");
-}
-
-// Generates Server method signature source
-void GenerateServerMethodSignature(const grpc_generator::Method *method, grpc_generator::Printer *printer,
-                                   std::map<grpc::string, grpc::string> vars) {
-	vars["Method"] = exportName(method->name());
-	vars["Request"] = method->input_name();
-	vars["Response"] = (vars["CustomMethodIO"] == "") ? method->output_name() : vars["CustomMethodIO"];
-	if (method->NoStreaming()) {
-		printer->Print(vars, "$Method$($context$.Context, *$Request$) (*$Response$, error)");
-	} else if (method->ServerOnlyStreaming()) {
-		printer->Print(vars, "$Method$(*$Request$, $Service$_$Method$Server) error");
-	} else {
-		printer->Print(vars, "$Method$($Service$_$Method$Server) error");
-	}
-}
-
-void GenerateServerMethod(const grpc_generator::Method *method, grpc_generator::Printer *printer,
-                          std::map<grpc::string, grpc::string> vars) {
-	vars["Method"] = exportName(method->name());
-	vars["Request"] = method->input_name();
-	vars["Response"] = (vars["CustomMethodIO"] == "") ? method->output_name() : vars["CustomMethodIO"];
-	vars["FullMethodName"] = "/" + vars["Package"] + "." + vars["Service"] + "/" + vars["Method"];
-	vars["Handler"] = "_" + vars["Service"] + "_" + vars["Method"] + "_Handler";
-	if (method->NoStreaming()) {
-		printer->Print(vars, "func $Handler$(srv interface{}, ctx $context$.Context,\n\tdec func(interface{}) error, interceptor $grpc$.UnaryServerInterceptor) (interface{}, error) {\n");
-		printer->Indent();
-		printer->Print(vars, "in := new($Request$)\n");
-		printer->Print("if err := dec(in); err != nil { return nil, err }\n");
-		printer->Print(vars, "if interceptor == nil { return srv.($Service$Server).$Method$(ctx, in) }\n");
-		printer->Print(vars, "info := &$grpc$.UnaryServerInfo{\n");
-		printer->Indent();
-		printer->Print("Server: srv,\n");
-		printer->Print(vars, "FullMethod: \"$FullMethodName$\",\n");
-		printer->Outdent();
-		printer->Print("}\n\n");
-		printer->Print(vars, "handler := func(ctx $context$.Context, req interface{}) (interface{}, error) {\n");
-		printer->Indent();
-		printer->Print(vars, "return srv.($Service$Server).$Method$(ctx, req.(* $Request$))\n");
-		printer->Outdent();
-		printer->Print("}\n");
-		printer->Print("return interceptor(ctx, in, info, handler)\n");
-		printer->Outdent();
-		printer->Print("}\n\n");
-		return;
-	}
-	vars["StreamType"] = vars["ServiceUnexported"] + vars["Method"] + "Server";
-	printer->Print(vars, "func $Handler$(srv interface{}, stream $grpc$.ServerStream) error {\n");
-	printer->Indent();
-	if (method->ServerOnlyStreaming()) {
-		printer->Print(vars, "m := new($Request$)\n");
-		printer->Print(vars, "if err := stream.RecvMsg(m); err != nil { return err }\n");
-		printer->Print(vars, "return srv.($Service$Server).$Method$(m, &$StreamType${stream})\n");
-	} else {
-		printer->Print(vars, "return srv.($Service$Server).$Method$(&$StreamType${stream})\n");
-	}
-	printer->Outdent();
-	printer->Print("}\n\n");
-
-	bool genSend = method->BidiStreaming() || method->ServerOnlyStreaming();
-	bool genRecv = method->BidiStreaming() || method->ClientOnlyStreaming();
-	bool genSendAndClose = method->ClientOnlyStreaming();
-
-	printer->Print(vars, "type $Service$_$Method$Server interface { \n");
-	printer->Indent();
-	if (genSend) {
-		printer->Print(vars, "Send(* $Response$) error\n");
-	}
-	if (genRecv) {
-		printer->Print(vars, "Recv() (* $Request$, error)\n");
-	}
-	if (genSendAndClose) {
-		printer->Print(vars, "SendAndClose(* $Response$) error\n");
-	}
-	printer->Print(vars, "$grpc$.ServerStream\n");
-	printer->Outdent();
-	printer->Print("}\n\n");
-
-	printer->Print(vars, "type $StreamType$ struct {\n");
-	printer->Indent();
-	printer->Print(vars, "$grpc$.ServerStream\n");
-	printer->Outdent();
-	printer->Print("}\n\n");
-
-	if (genSend) {
-		printer->Print(vars, "func (x *$StreamType$) Send(m *$Response$) error {\n");
-		printer->Indent();
-		printer->Print("return x.ServerStream.SendMsg(m)\n");
-		printer->Outdent();
-		printer->Print("}\n\n");
-	}
-	if (genRecv) {
-		printer->Print(vars, "func (x *$StreamType$) Recv() (*$Request$, error) {\n");
-		printer->Indent();
-		printer->Print(vars, "m := new($Request$)\n");
-		printer->Print("if err := x.ServerStream.RecvMsg(m); err != nil { return nil, err }\n");
-		printer->Print("return m, nil\n");
-		printer->Outdent();
-		printer->Print("}\n\n");
-	}
-	if (genSendAndClose) {
-		printer->Print(vars, "func (x *$StreamType$) SendAndClose(m *$Response$) error {\n");
-		printer->Indent();
-		printer->Print("return x.ServerStream.SendMsg(m)\n");
-		printer->Outdent();
-		printer->Print("}\n\n");
-	}
-
-}
-
-// Generates Client method signature source
-void GenerateClientMethodSignature(const grpc_generator::Method *method, grpc_generator::Printer *printer,
-                                   std::map<grpc::string, grpc::string> vars) {
-	vars["Method"] = exportName(method->name());
-	vars["Request"] = ", in *" + ((vars["CustomMethodIO"] == "") ? method->input_name() : vars["CustomMethodIO"]);
-	if (method->ClientOnlyStreaming() || method->BidiStreaming()) {
-		vars["Request"] = "";
-	}
-	vars["Response"] = "* " + method->output_name();
-	if (method->ClientOnlyStreaming() || method->BidiStreaming() || method->ServerOnlyStreaming()) {
-		vars["Response"] = vars["Service"] + "_" + vars["Method"] + "Client" ;
-	}
-	printer->Print(vars, "$Method$(ctx $context$.Context$Request$, \n\topts... $grpc$.CallOption) ($Response$, error)");
-}
-
-// Generates Client method source
-void GenerateClientMethod(const grpc_generator::Method *method, grpc_generator::Printer *printer,
-                          std::map<grpc::string, grpc::string> vars) {
-	printer->Print(vars, "func (c *$ServiceUnexported$Client) ");
-	GenerateClientMethodSignature(method, printer, vars);
-	printer->Print(" {\n");
-	printer->Indent();
-	vars["Method"] = exportName(method->name());
-	vars["Request"] = (vars["CustomMethodIO"] == "") ? method->input_name() : vars["CustomMethodIO"];
-	vars["Response"] = method->output_name();
-	vars["FullMethodName"] = "/" + vars["Package"] + "." + vars["Service"] + "/" + vars["Method"];
-	if (method->NoStreaming()) {
-		printer->Print(vars, "out := new($Response$)\n");
-		printer->Print(vars, "err := $grpc$.Invoke(ctx, \"$FullMethodName$\", in, out, c.cc, opts...)\n");
-		printer->Print("if err != nil { return nil, err }\n");
-		printer->Print("return out, nil\n");
-		printer->Outdent();
-		printer->Print("}\n\n");
-		return;
-	}
-	vars["StreamType"] = vars["ServiceUnexported"] + vars["Method"] + "Client";
-	printer->Print(vars, "stream, err := $grpc$.NewClientStream(ctx, &$MethodDesc$, c.cc, \"$FullMethodName$\", opts...)\n");
-	printer->Print("if err != nil { return nil, err }\n");
-
-	printer->Print(vars, "x := &$StreamType${stream}\n");
-	if (method->ServerOnlyStreaming()) {
-		printer->Print("if err := x.ClientStream.SendMsg(in); err != nil { return nil, err }\n");
-		printer->Print("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }\n");
-	}
-	printer->Print("return x,nil\n");
-	printer->Outdent();
-	printer->Print("}\n\n");
-
-	bool genSend = method->BidiStreaming() || method->ClientOnlyStreaming();
-	bool genRecv = method->BidiStreaming() || method->ServerOnlyStreaming();
-	bool genCloseAndRecv = method->ClientOnlyStreaming();
-
-	//Stream interface
-	printer->Print(vars, "type $Service$_$Method$Client interface {\n");
-	printer->Indent();
-	if (genSend) {
-		printer->Print(vars, "Send(*$Request$) error\n");
-	}
-	if (genRecv) {
-		printer->Print(vars, "Recv() (*$Response$, error)\n");
-	}
-	if (genCloseAndRecv) {
-		printer->Print(vars, "CloseAndRecv() (*$Response$, error)\n");
-	}
-	printer->Print(vars, "$grpc$.ClientStream\n");
-	printer->Outdent();
-	printer->Print("}\n\n");
-
-	//Stream Client
-	printer->Print(vars, "type $StreamType$ struct{\n");
-	printer->Indent();
-	printer->Print(vars, "$grpc$.ClientStream\n");
-	printer->Outdent();
-	printer->Print("}\n\n");
-
-	if (genSend) {
-		printer->Print(vars, "func (x *$StreamType$) Send(m *$Request$) error {\n");
-		printer->Indent();
-		printer->Print("return x.ClientStream.SendMsg(m)\n");
-		printer->Outdent();
-		printer->Print("}\n\n");
-	}
-
-	if (genRecv) {
-		printer->Print(vars, "func (x *$StreamType$) Recv() (*$Response$, error) {\n");
-		printer->Indent();
-		printer->Print(vars, "m := new($Response$)\n");
-		printer->Print("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }\n");
-		printer->Print("return m, nil\n");
-		printer->Outdent();
-		printer->Print("}\n\n");
-	}
-
-	if (genCloseAndRecv) {
-		printer->Print(vars, "func (x *$StreamType$) CloseAndRecv() (*$Response$, error) {\n");
-		printer->Indent();
-		printer->Print("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }\n");
-		printer->Print(vars, "m := new ($Response$)\n");
-		printer->Print("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }\n");
-		printer->Print("return m, nil\n");
-		printer->Outdent();
-		printer->Print("}\n\n");
-	}
-}
-
-// Generates client API for the service
-void GenerateService(const grpc_generator::Service *service, grpc_generator::Printer* printer,
-                     std::map<grpc::string, grpc::string> vars) {
-	vars["Service"] = exportName(service->name());
-	// Client Interface
-	printer->Print(vars, "// Client API for $Service$ service\n");
-	printer->Print(vars, "type $Service$Client interface{\n");
-	printer->Indent();
-	for (int i = 0; i < service->method_count(); i++) {
-		GenerateClientMethodSignature(service->method(i).get(), printer, vars);
-		printer->Print("\n");
-	}
-	printer->Outdent();
-	printer->Print("}\n\n");
-
-	// Client structure
-	vars["ServiceUnexported"] = unexportName(vars["Service"]);
-	printer->Print(vars, "type $ServiceUnexported$Client struct {\n");
-	printer->Indent();
-	printer->Print(vars, "cc *$grpc$.ClientConn\n");
-	printer->Outdent();
-	printer->Print("}\n\n");
-
-	// NewClient
-	printer->Print(vars, "func New$Service$Client(cc *$grpc$.ClientConn) $Service$Client {\n");
-	printer->Indent();
-	printer->Print(vars, "return &$ServiceUnexported$Client{cc}");
-	printer->Outdent();
-	printer->Print("\n}\n\n");
-
-	int unary_methods = 0, streaming_methods = 0;
-	vars["ServiceDesc"] = "_" + vars["Service"] + "_serviceDesc";
-	for (int i = 0; i < service->method_count(); i++) {
-		auto method = service->method(i);
-		if (method->NoStreaming()) {
-			vars["MethodDesc"] = vars["ServiceDesc"] + ".Method[" + as_string(unary_methods) + "]";
-			unary_methods++;
-		} else {
-			vars["MethodDesc"] = vars["ServiceDesc"] + ".Streams[" + as_string(streaming_methods) + "]";
-			streaming_methods++;
-		}
-		GenerateClientMethod(method.get(), printer, vars);
-	}
-
-	//Server Interface
-	printer->Print(vars, "// Server API for $Service$ service\n");
-	printer->Print(vars, "type $Service$Server interface {\n");
-	printer->Indent();
-	for (int i = 0; i < service->method_count(); i++) {
-		GenerateServerMethodSignature(service->method(i).get(), printer, vars);
-		printer->Print("\n");
-	}
-	printer->Outdent();
-	printer->Print("}\n\n");
-
-	// Server registration.
-	printer->Print(vars, "func Register$Service$Server(s *$grpc$.Server, srv $Service$Server) {\n");
-	printer->Indent();
-	printer->Print(vars, "s.RegisterService(&$ServiceDesc$, srv)\n");
-	printer->Outdent();
-	printer->Print("}\n\n");
-
-	for (int i = 0; i < service->method_count(); i++) {
-		GenerateServerMethod(service->method(i).get(), printer, vars);
-		printer->Print("\n");
-	}
-
-
-	//Service Descriptor
-	printer->Print(vars, "var $ServiceDesc$ = $grpc$.ServiceDesc{\n");
-	printer->Indent();
-	printer->Print(vars, "ServiceName: \"$Package$.$Service$\",\n");
-	printer->Print(vars, "HandlerType: (*$Service$Server)(nil),\n");
-	printer->Print(vars, "Methods: []$grpc$.MethodDesc{\n");
-	printer->Indent();
-	for (int i = 0; i < service->method_count(); i++) {
-		auto method = service->method(i);
-		vars["Method"] = method->name();
-		vars["Handler"] = "_" + vars["Service"] + "_" + vars["Method"] + "_Handler";
-		if (method->NoStreaming()) {
-			printer->Print("{\n");
-			printer->Indent();
-			printer->Print(vars, "MethodName: \"$Method$\",\n");
-			printer->Print(vars, "Handler: $Handler$, \n");
-			printer->Outdent();
-			printer->Print("},\n");
-		}
-	}
-	printer->Outdent();
-	printer->Print("},\n");
-	printer->Print(vars, "Streams: []$grpc$.StreamDesc{\n");
-	printer->Indent();
-	for (int i = 0; i < service->method_count(); i++) {
-		auto method = service->method(i);
-		vars["Method"] = method->name();
-		vars["Handler"] = "_" + vars["Service"] + "_" + vars["Method"] + "_Handler";
-		if (!method->NoStreaming()) {
-			printer->Print("{\n");
-			printer->Indent();
-			printer->Print(vars, "StreamName: \"$Method$\",\n");
-			printer->Print(vars, "Handler: $Handler$, \n");
-			if (method->ClientOnlyStreaming()) {
-				printer->Print("ClientStreams: true,\n");
-			} else if (method->ServerOnlyStreaming()) {
-				printer->Print("ServerStreams: true,\n");
-			} else {
-				printer->Print("ServerStreams: true,\n");
-				printer->Print("ClientStreams: true,\n");
-			}
-			printer->Outdent();
-			printer->Print("},\n");
-		}
-	}
-	printer->Outdent();
-	printer->Print("},\n");
-	printer->Outdent();
-	printer->Print("}\n\n");
-
-}
-
-
-// Returns source for the service
-grpc::string GenerateServiceSource(grpc_generator::File *file,
-                                   const grpc_generator::Service *service,
-                                   grpc_go_generator::Parameters *parameters) {
-	grpc::string out;
-	auto p = file->CreatePrinter(&out);
-	auto printer = p.get();
-	std::map<grpc::string, grpc::string> vars;
-	vars["Package"] = parameters->package_name;
-	vars["grpc"] = "grpc";
-	vars["context"] = "context";
-	GenerateImports(file, printer, vars);
-	if (parameters->custom_method_io_type != "") {
-		vars["CustomMethodIO"] = parameters->custom_method_io_type;
-	}
-	GenerateService(service, printer, vars);
-	return out;
-}
-}// Namespace grpc_go_generator
diff --git a/third_party/flatbuffers/grpc/src/compiler/go_generator.h b/third_party/flatbuffers/grpc/src/compiler/go_generator.h
deleted file mode 100644
index a8f7a3d..0000000
--- a/third_party/flatbuffers/grpc/src/compiler/go_generator.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *
- * Copyright 2015, 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
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef GRPC_INTERNAL_COMPILER_GO_GENERATOR_H
-#define GRPC_INTERNAL_COMPILER_GO_GENERATOR_H
-
-//go generator is used to generate GRPC code for serialization system, such as flatbuffers
-#include <memory>
-#include <vector>
-
-#include "src/compiler/schema_interface.h"
-
-namespace grpc_go_generator {
-
-struct Parameters {
-	//Defines the custom parameter types for methods
-	//eg: flatbuffers uses flatbuffers.Builder as input for the client and output for the server
-	grpc::string custom_method_io_type;
-
-	//Package name for the service
-	grpc::string package_name;
-};
-
-// Return the source of the generated service file.
-grpc::string GenerateServiceSource(grpc_generator::File *file,
-                                   const grpc_generator::Service *service,
-                                   grpc_go_generator::Parameters *parameters);
-
-}
-
-#endif  // GRPC_INTERNAL_COMPILER_GO_GENERATOR_H
diff --git a/third_party/flatbuffers/grpc/src/compiler/schema_interface.h b/third_party/flatbuffers/grpc/src/compiler/schema_interface.h
deleted file mode 100644
index c9b7f46..0000000
--- a/third_party/flatbuffers/grpc/src/compiler/schema_interface.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- *
- * Copyright 2015, 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
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef GRPC_INTERNAL_COMPILER_SCHEMA_INTERFACE_H
-#define GRPC_INTERNAL_COMPILER_SCHEMA_INTERFACE_H
-
-#include <map>
-#include <memory>
-#include <vector>
-
- #ifndef GRPC_CUSTOM_STRING
- #include <string>
- #define GRPC_CUSTOM_STRING std::string
- #endif
-
-namespace grpc {
-
-  typedef GRPC_CUSTOM_STRING string;
-
-}  // namespace grpc
-
-namespace grpc_generator {
-
-  // An abstract interface representing a method.
-  struct Method {
-    virtual ~Method() {}
-
-    virtual grpc::string name() const = 0;
-
-    virtual grpc::string input_type_name() const = 0;
-    virtual grpc::string output_type_name() const = 0;
-    virtual grpc::string input_name() const = 0;
-    virtual grpc::string output_name() const = 0;
-
-    virtual bool NoStreaming() const = 0;
-    virtual bool ClientOnlyStreaming() const = 0;
-    virtual bool ServerOnlyStreaming() const = 0;
-    virtual bool BidiStreaming() const = 0;
-  };
-
-  // An abstract interface representing a service.
-  struct Service {
-    virtual ~Service() {}
-
-    virtual grpc::string name() const = 0;
-
-    virtual int method_count() const = 0;
-    virtual std::unique_ptr<const Method> method(int i) const = 0;
-  };
-
-  struct Printer {
-    virtual ~Printer() {}
-
-    virtual void Print(const std::map<grpc::string, grpc::string> &vars,
-                       const char *template_string) = 0;
-    virtual void Print(const char *string) = 0;
-    virtual void Indent() = 0;
-    virtual void Outdent() = 0;
-  };
-
-  // An interface that allows the source generated to be output using various
-  // libraries/idls/serializers.
-  struct File {
-    virtual ~File() {}
-
-    virtual grpc::string filename() const = 0;
-    virtual grpc::string filename_without_ext() const = 0;
-    virtual grpc::string message_header_ext() const = 0;
-    virtual grpc::string service_header_ext() const = 0;
-    virtual grpc::string package() const = 0;
-    virtual std::vector<grpc::string> package_parts() const = 0;
-    virtual grpc::string additional_headers() const = 0;
-    virtual grpc::string additional_imports() const = 0;
-
-    virtual int service_count() const = 0;
-    virtual std::unique_ptr<const Service> service(int i) const = 0;
-
-    virtual std::unique_ptr<Printer> CreatePrinter(grpc::string *str) const = 0;
-  };
-} // namespace grpc_generator
-
-#endif  // GRPC_INTERNAL_COMPILER_SCHEMA_INTERFACE_H
diff --git a/third_party/flatbuffers/grpc/tests/go_test.go b/third_party/flatbuffers/grpc/tests/go_test.go
deleted file mode 100644
index 7192f97..0000000
--- a/third_party/flatbuffers/grpc/tests/go_test.go
+++ /dev/null
@@ -1,93 +0,0 @@
-package testing
-
-import (
-	"../../tests/MyGame/Example"
-
-	"net"
-	"testing"
-
-	"golang.org/x/net/context"
-	"google.golang.org/grpc"
-)
-
-type server struct{}
-
-// test used to send and receive in grpc methods
-var test = "Flatbuffers"
-var addr = "0.0.0.0:50051"
-
-// gRPC server store method
-func (s *server) Store(context context.Context, in *Example.Monster) (*flatbuffers.Builder, error) {
-	b := flatbuffers.NewBuilder(0)
-	i := b.CreateString(test)
-	Example.StatStart(b)
-	Example.StatAddId(b, i)
-	b.Finish(Example.StatEnd(b))
-	return b, nil
-
-}
-
-// gRPC server retrieve method
-func (s *server) Retrieve(context context.Context, in *Example.Stat) (*flatbuffers.Builder, error) {
-	b := flatbuffers.NewBuilder(0)
-	i := b.CreateString(test)
-	Example.MonsterStart(b)
-	Example.MonsterAddName(b, i)
-	b.Finish(Example.MonsterEnd(b))
-	return b, nil
-}
-
-func StoreClient(c Example.MonsterStorageClient, t *testing.T) {
-	b := flatbuffers.NewBuilder(0)
-	i := b.CreateString(test)
-	Example.MonsterStart(b)
-	Example.MonsterAddName(b, i)
-	b.Finish(Example.MonsterEnd(b))
-	out, err := c.Store(context.Background(), b)
-	if err != nil {
-		t.Fatalf("Store client failed: %v", err)
-	}
-	if string(out.Id()) != test {
-		t.Errorf("StoreClient failed: expected=%s, got=%s\n", test, out.Id())
-		t.Fail()
-	}
-}
-
-func RetrieveClient(c Example.MonsterStorageClient, t *testing.T) {
-	b := flatbuffers.NewBuilder(0)
-	i := b.CreateString(test)
-	Example.StatStart(b)
-	Example.StatAddId(b, i)
-	b.Finish(Example.StatEnd(b))
-	out, err := c.Retrieve(context.Background(), b)
-	if err != nil {
-		t.Fatalf("Retrieve client failed: %v", err)
-	}
-	if string(out.Name()) != test {
-		t.Errorf("RetrieveClient failed: expected=%s, got=%s\n", test, out.Name())
-		t.Fail()
-	}
-}
-
-func TestGRPC(t *testing.T) {
-	lis, err := net.Listen("tcp", addr)
-	if err != nil {
-		t.Fatalf("Failed to listen: %v", err)
-	}
-	ser := grpc.NewServer(grpc.CustomCodec(flatbuffers.FlatbuffersCodec{}))
-	Example.RegisterMonsterStorageServer(ser, &server{})
-	go func() {
-		if err := ser.Serve(lis); err != nil {
-			t.Fatalf("Failed to serve: %v", err)
-			t.FailNow()
-		}
-	}()
-	conn, err := grpc.Dial(addr, grpc.WithInsecure(), grpc.WithCodec(flatbuffers.FlatbuffersCodec{}))
-	if err != nil {
-		t.Fatalf("Failed to connect: %v", err)
-	}
-	defer conn.Close()
-	client := Example.NewMonsterStorageClient(conn)
-	StoreClient(client, t)
-	RetrieveClient(client, t)
-}
diff --git a/third_party/flatbuffers/grpc/tests/grpctest.cpp b/third_party/flatbuffers/grpc/tests/grpctest.cpp
deleted file mode 100644
index 77b79fc..0000000
--- a/third_party/flatbuffers/grpc/tests/grpctest.cpp
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <thread>
-
-#include <grpc++/grpc++.h>
-
-#include "monster_test_generated.h"
-#include "monster_test.grpc.fb.h"
-
-using namespace MyGame::Example;
-
-// The callback implementation of our server, that derives from the generated
-// code. It implements all rpcs specified in the FlatBuffers schema.
-class ServiceImpl final : public MyGame::Example::MonsterStorage::Service {
-  virtual ::grpc::Status Store(::grpc::ServerContext* context,
-                               const flatbuffers::BufferRef<Monster> *request,
-                               flatbuffers::BufferRef<Stat> *response)
-                               override {
-    // Create a response from the incoming request name.
-    fbb_.Clear();
-    auto stat_offset = CreateStat(fbb_, fbb_.CreateString("Hello, " +
-                                        request->GetRoot()->name()->str()));
-    fbb_.Finish(stat_offset);
-    // Since we keep reusing the same FlatBufferBuilder, the memory it owns
-    // remains valid until the next call (this BufferRef doesn't own the
-    // memory it points to).
-    *response = flatbuffers::BufferRef<Stat>(fbb_.GetBufferPointer(),
-                                             fbb_.GetSize());
-    return grpc::Status::OK;
-  }
-  virtual ::grpc::Status Retrieve(::grpc::ServerContext *context,
-                                  const flatbuffers::BufferRef<Stat> *request,
-                                   ::grpc::ServerWriter< flatbuffers::BufferRef<Monster>>* writer)
-                                  override {
-    assert(false);  // We're not actually using this RPC.
-    return grpc::Status::CANCELLED;
-  }
-
- private:
-  flatbuffers::FlatBufferBuilder fbb_;
-};
-
-// Track the server instance, so we can terminate it later.
-grpc::Server *server_instance = nullptr;
-// Mutex to protec this variable.
-std::mutex wait_for_server;
-std::condition_variable server_instance_cv;
-
-// This function implements the server thread.
-void RunServer() {
-  auto server_address = "0.0.0.0:50051";
-  // Callback interface we implemented above.
-  ServiceImpl service;
-  grpc::ServerBuilder builder;
-  builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
-  builder.RegisterService(&service);
-
-  // Start the server. Lock to change the variable we're changing.
-  wait_for_server.lock();
-  server_instance = builder.BuildAndStart().release();
-  wait_for_server.unlock();
-  server_instance_cv.notify_one();
-
-  std::cout << "Server listening on " << server_address << std::endl;
-  // This will block the thread and serve requests.
-  server_instance->Wait();
-}
-
-int main(int /*argc*/, const char * /*argv*/[]) {
-  // Launch server.
-  std::thread server_thread(RunServer);
-
-  // wait for server to spin up.
-  std::unique_lock<std::mutex> lock(wait_for_server);
-  while (!server_instance) server_instance_cv.wait(lock);
-
-  // Now connect the client.
-  auto channel = grpc::CreateChannel("localhost:50051",
-                                     grpc::InsecureChannelCredentials());
-  auto stub = MyGame::Example::MonsterStorage::NewStub(channel);
-
-  grpc::ClientContext context;
-
-  // Build a request with the name set.
-  flatbuffers::FlatBufferBuilder fbb;
-  auto monster_offset = CreateMonster(fbb, 0, 0, 0, fbb.CreateString("Fred"));
-  fbb.Finish(monster_offset);
-  auto request = flatbuffers::BufferRef<Monster>(fbb.GetBufferPointer(),
-                                                 fbb.GetSize());
-  flatbuffers::BufferRef<Stat> response;
-
-  // The actual RPC.
-  auto status = stub->Store(&context, request, &response);
-
-  if (status.ok()) {
-    auto resp = response.GetRoot()->id();
-    std::cout << "RPC response: " << resp->str() << std::endl;
-  } else {
-    std::cout << "RPC failed" << std::endl;
-  }
-
-  server_instance->Shutdown();
-
-  server_thread.join();
-
-  delete server_instance;
-
-  return 0;
-}
-
diff --git a/third_party/flatbuffers/include/flatbuffers/code_generators.h b/third_party/flatbuffers/include/flatbuffers/code_generators.h
deleted file mode 100644
index 3e85df2..0000000
--- a/third_party/flatbuffers/include/flatbuffers/code_generators.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FLATBUFFERS_CODE_GENERATORS_H_
-#define FLATBUFFERS_CODE_GENERATORS_H_
-
-#include <map>
-#include <sstream>
-#include "flatbuffers/idl.h"
-
-namespace flatbuffers {
-
-// Utility class to assist in generating code through use of text templates.
-//
-// Example code:
-//   CodeWriter code;
-//   code.SetValue("NAME", "Foo");
-//   code += "void {{NAME}}() { printf("%s", "{{NAME}}"); }";
-//   code.SetValue("NAME", "Bar");
-//   code += "void {{NAME}}() { printf("%s", "{{NAME}}"); }";
-//   std::cout << code.ToString() << std::endl;
-//
-// Output:
-//  void Foo() { printf("%s", "Foo"); }
-//  void Bar() { printf("%s", "Bar"); }
-class CodeWriter {
- public:
-  CodeWriter() {}
-
-  // Clears the current "written" code.
-  void Clear() {
-    stream_.str("");
-    stream_.clear();
-  }
-
-  // Associates a key with a value.  All subsequent calls to operator+=, where
-  // the specified key is contained in {{ and }} delimiters will be replaced by
-  // the given value.
-  void SetValue(const std::string& key, const std::string& value) {
-    value_map_[key] = value;
-  }
-
-  // Appends the given text to the generated code as well as a newline
-  // character.  Any text within {{ and }} delimeters is replaced by values
-  // previously stored in the CodeWriter by calling SetValue above.  The newline
-  // will be suppressed if the text ends with the \\ character.
-  void operator+=(std::string text);
-
-  // Returns the current contents of the CodeWriter as a std::string.
-  std::string ToString() const { return stream_.str(); }
-
- private:
-  std::map<std::string, std::string> value_map_;
-  std::stringstream stream_;
-};
-
-class BaseGenerator {
- public:
-  virtual bool generate() = 0;
-
-  static std::string NamespaceDir(const Parser &parser,
-                                  const std::string &path,
-                                  const Namespace &ns);
-
- protected:
-  BaseGenerator(const Parser &parser, const std::string &path,
-                const std::string &file_name,
-                const std::string qualifying_start,
-                const std::string qualifying_separator)
-      : parser_(parser),
-        path_(path),
-        file_name_(file_name),
-        qualifying_start_(qualifying_start),
-        qualifying_separator_(qualifying_separator) {}
-  virtual ~BaseGenerator() {}
-
-  // No copy/assign.
-  BaseGenerator &operator=(const BaseGenerator &);
-  BaseGenerator(const BaseGenerator &);
-
-  std::string NamespaceDir(const Namespace &ns) const;
-
-  static const char *FlatBuffersGeneratedWarning();
-
-  bool IsEverythingGenerated() const;
-
-  static std::string FullNamespace(const char *separator, const Namespace &ns);
-
-  static std::string LastNamespacePart(const Namespace &ns);
-
-  // tracks the current namespace for early exit in WrapInNameSpace
-  // c++, java and csharp returns a different namespace from
-  // the following default (no early exit, always fully qualify),
-  // which works for js and php
-  virtual const Namespace *CurrentNameSpace() const { return nullptr; }
-
-  // Ensure that a type is prefixed with its namespace whenever it is used
-  // outside of its namespace.
-  std::string WrapInNameSpace(const Namespace *ns,
-                              const std::string &name) const;
-
-  std::string WrapInNameSpace(const Definition &def) const;
-
-  std::string GetNameSpace(const Definition &def) const;
-
-  const Parser &parser_;
-  const std::string &path_;
-  const std::string &file_name_;
-  const std::string qualifying_start_;
-  const std::string qualifying_separator_;
-};
-
-struct CommentConfig {
-  const char *first_line;
-  const char *content_line_prefix;
-  const char *last_line;
-};
-
-extern void GenComment(const std::vector<std::string> &dc,
-                       std::string *code_ptr,
-                       const CommentConfig *config,
-                       const char *prefix = "");
-
-}  // namespace flatbuffers
-
-#endif  // FLATBUFFERS_CODE_GENERATORS_H_
diff --git a/third_party/flatbuffers/include/flatbuffers/flatbuffers.h b/third_party/flatbuffers/include/flatbuffers/flatbuffers.h
deleted file mode 100644
index e38e552..0000000
--- a/third_party/flatbuffers/include/flatbuffers/flatbuffers.h
+++ /dev/null
@@ -1,2037 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FLATBUFFERS_H_
-#define FLATBUFFERS_H_
-
-#include <assert.h>
-
-#ifndef ARDUINO
-#include <cstdint>
-#endif
-#include <cstddef>
-#include <cstdlib>
-#include <cstring>
-#include <string>
-#ifndef ARDUINO
-#include <utility>
-#else
-#include <utility.h>
-#endif
-#include <type_traits>
-#include <vector>
-#include <set>
-#include <algorithm>
-#include <memory>
-
-#ifdef _STLPORT_VERSION
-  #define FLATBUFFERS_CPP98_STL
-#endif
-#ifndef FLATBUFFERS_CPP98_STL
-  #include <functional>
-#endif
-
-/// @cond FLATBUFFERS_INTERNAL
-#if __cplusplus <= 199711L && \
-    (!defined(_MSC_VER) || _MSC_VER < 1600) && \
-    (!defined(__GNUC__) || \
-      (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ < 40400))
-  #error A C++11 compatible compiler with support for the auto typing is \
-         required for FlatBuffers.
-  #error __cplusplus _MSC_VER __GNUC__  __GNUC_MINOR__  __GNUC_PATCHLEVEL__
-#endif
-
-#if !defined(__clang__) && \
-    defined(__GNUC__) && \
-    (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ < 40600)
-  // Backwards compatability for g++ 4.4, and 4.5 which don't have the nullptr
-  // and constexpr keywords. Note the __clang__ check is needed, because clang
-  // presents itself as an older GNUC compiler.
-  #ifndef nullptr_t
-    const class nullptr_t {
-    public:
-      template<class T> inline operator T*() const { return 0; }
-    private:
-      void operator&() const;
-    } nullptr = {};
-  #endif
-  #ifndef constexpr
-    #define constexpr const
-  #endif
-#endif
-
-// The wire format uses a little endian encoding (since that's efficient for
-// the common platforms).
-#if !defined(FLATBUFFERS_LITTLEENDIAN)
-  #if defined(__GNUC__) || defined(__clang__)
-    #ifdef __BIG_ENDIAN__
-      #define FLATBUFFERS_LITTLEENDIAN 0
-    #else
-      #define FLATBUFFERS_LITTLEENDIAN 1
-    #endif // __BIG_ENDIAN__
-  #elif defined(_MSC_VER)
-    #if defined(_M_PPC)
-      #define FLATBUFFERS_LITTLEENDIAN 0
-    #else
-      #define FLATBUFFERS_LITTLEENDIAN 1
-    #endif
-  #else
-    #error Unable to determine endianness, define FLATBUFFERS_LITTLEENDIAN.
-  #endif
-#endif // !defined(FLATBUFFERS_LITTLEENDIAN)
-
-#define FLATBUFFERS_VERSION_MAJOR 1
-#define FLATBUFFERS_VERSION_MINOR 6
-#define FLATBUFFERS_VERSION_REVISION 0
-#define FLATBUFFERS_STRING_EXPAND(X) #X
-#define FLATBUFFERS_STRING(X) FLATBUFFERS_STRING_EXPAND(X)
-
-#if (!defined(_MSC_VER) || _MSC_VER > 1600) && \
-    (!defined(__GNUC__) || (__GNUC__ * 100 + __GNUC_MINOR__ >= 407))
-  #define FLATBUFFERS_FINAL_CLASS final
-#else
-  #define FLATBUFFERS_FINAL_CLASS
-#endif
-
-#if (!defined(_MSC_VER) || _MSC_VER >= 1900) && \
-    (!defined(__GNUC__) || (__GNUC__ * 100 + __GNUC_MINOR__ >= 406))
-  #define FLATBUFFERS_CONSTEXPR constexpr
-#else
-  #define FLATBUFFERS_CONSTEXPR
-#endif
-
-#if defined(__GXX_EXPERIMENTAL_CXX0X__) && __GNUC__ * 10 + __GNUC_MINOR__ >= 46 || \
-    defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023026
-  #define FLATBUFFERS_NOEXCEPT noexcept
-#else
-  #define FLATBUFFERS_NOEXCEPT
-#endif
-
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable: 4127) // C4127: conditional expression is constant
-#endif
-
-/// @endcond
-
-/// @file
-namespace flatbuffers {
-
-/// @cond FLATBUFFERS_INTERNAL
-// Our default offset / size type, 32bit on purpose on 64bit systems.
-// Also, using a consistent offset type maintains compatibility of serialized
-// offset values between 32bit and 64bit systems.
-typedef uint32_t uoffset_t;
-
-// Signed offsets for references that can go in both directions.
-typedef int32_t soffset_t;
-
-// Offset/index used in v-tables, can be changed to uint8_t in
-// format forks to save a bit of space if desired.
-typedef uint16_t voffset_t;
-
-typedef uintmax_t largest_scalar_t;
-
-// In 32bits, this evaluates to 2GB - 1
-#define FLATBUFFERS_MAX_BUFFER_SIZE ((1ULL << (sizeof(soffset_t) * 8 - 1)) - 1)
-
-// We support aligning the contents of buffers up to this size.
-#define FLATBUFFERS_MAX_ALIGNMENT 16
-
-#ifndef FLATBUFFERS_CPP98_STL
-// Pointer to relinquished memory.
-typedef std::unique_ptr<uint8_t, std::function<void(uint8_t * /* unused */)>>
-          unique_ptr_t;
-#endif
-
-// Wrapper for uoffset_t to allow safe template specialization.
-template<typename T> struct Offset {
-  uoffset_t o;
-  Offset() : o(0) {}
-  Offset(uoffset_t _o) : o(_o) {}
-  Offset<void> Union() const { return Offset<void>(o); }
-};
-
-inline void EndianCheck() {
-  int endiantest = 1;
-  // If this fails, see FLATBUFFERS_LITTLEENDIAN above.
-  assert(*reinterpret_cast<char *>(&endiantest) == FLATBUFFERS_LITTLEENDIAN);
-  (void)endiantest;
-}
-
-template<typename T> T EndianSwap(T t) {
-  #if defined(_MSC_VER)
-    #define FLATBUFFERS_BYTESWAP16 _byteswap_ushort
-    #define FLATBUFFERS_BYTESWAP32 _byteswap_ulong
-    #define FLATBUFFERS_BYTESWAP64 _byteswap_uint64
-  #else
-    #if defined(__GNUC__) && __GNUC__ * 100 + __GNUC_MINOR__ < 408
-      // __builtin_bswap16 was missing prior to GCC 4.8.
-      #define FLATBUFFERS_BYTESWAP16(x) \
-        static_cast<uint16_t>(__builtin_bswap32(static_cast<uint32_t>(x) << 16))
-    #else
-      #define FLATBUFFERS_BYTESWAP16 __builtin_bswap16
-    #endif
-    #define FLATBUFFERS_BYTESWAP32 __builtin_bswap32
-    #define FLATBUFFERS_BYTESWAP64 __builtin_bswap64
-  #endif
-  if (sizeof(T) == 1) {   // Compile-time if-then's.
-    return t;
-  } else if (sizeof(T) == 2) {
-    auto r = FLATBUFFERS_BYTESWAP16(*reinterpret_cast<uint16_t *>(&t));
-    return *reinterpret_cast<T *>(&r);
-  } else if (sizeof(T) == 4) {
-    auto r = FLATBUFFERS_BYTESWAP32(*reinterpret_cast<uint32_t *>(&t));
-    return *reinterpret_cast<T *>(&r);
-  } else if (sizeof(T) == 8) {
-    auto r = FLATBUFFERS_BYTESWAP64(*reinterpret_cast<uint64_t *>(&t));
-    return *reinterpret_cast<T *>(&r);
-  } else {
-    assert(0);
-  }
-}
-
-template<typename T> T EndianScalar(T t) {
-  #if FLATBUFFERS_LITTLEENDIAN
-    return t;
-  #else
-    return EndianSwap(t);
-  #endif
-}
-
-template<typename T> T ReadScalar(const void *p) {
-  return EndianScalar(*reinterpret_cast<const T *>(p));
-}
-
-template<typename T> void WriteScalar(void *p, T t) {
-  *reinterpret_cast<T *>(p) = EndianScalar(t);
-}
-
-template<typename T> size_t AlignOf() {
-  #ifdef _MSC_VER
-    return __alignof(T);
-  #else
-    #ifndef alignof
-      return __alignof__(T);
-    #else
-      return alignof(T);
-    #endif
-  #endif
-}
-
-// When we read serialized data from memory, in the case of most scalars,
-// we want to just read T, but in the case of Offset, we want to actually
-// perform the indirection and return a pointer.
-// The template specialization below does just that.
-// It is wrapped in a struct since function templates can't overload on the
-// return type like this.
-// The typedef is for the convenience of callers of this function
-// (avoiding the need for a trailing return decltype)
-template<typename T> struct IndirectHelper {
-  typedef T return_type;
-  typedef T mutable_return_type;
-  static const size_t element_stride = sizeof(T);
-  static return_type Read(const uint8_t *p, uoffset_t i) {
-    return EndianScalar((reinterpret_cast<const T *>(p))[i]);
-  }
-};
-template<typename T> struct IndirectHelper<Offset<T>> {
-  typedef const T *return_type;
-  typedef T *mutable_return_type;
-  static const size_t element_stride = sizeof(uoffset_t);
-  static return_type Read(const uint8_t *p, uoffset_t i) {
-    p += i * sizeof(uoffset_t);
-    return reinterpret_cast<return_type>(p + ReadScalar<uoffset_t>(p));
-  }
-};
-template<typename T> struct IndirectHelper<const T *> {
-  typedef const T *return_type;
-  typedef T *mutable_return_type;
-  static const size_t element_stride = sizeof(T);
-  static return_type Read(const uint8_t *p, uoffset_t i) {
-    return reinterpret_cast<const T *>(p + i * sizeof(T));
-  }
-};
-
-// An STL compatible iterator implementation for Vector below, effectively
-// calling Get() for every element.
-template<typename T, typename IT>
-struct VectorIterator
-    : public std::iterator<std::random_access_iterator_tag, IT, uoffset_t> {
-
-  typedef std::iterator<std::random_access_iterator_tag, IT, uoffset_t> super_type;
-
-public:
-  VectorIterator(const uint8_t *data, uoffset_t i) :
-      data_(data + IndirectHelper<T>::element_stride * i) {}
-  VectorIterator(const VectorIterator &other) : data_(other.data_) {}
-  #ifndef FLATBUFFERS_CPP98_STL
-  VectorIterator(VectorIterator &&other) : data_(std::move(other.data_)) {}
-  #endif
-
-  VectorIterator &operator=(const VectorIterator &other) {
-    data_ = other.data_;
-    return *this;
-  }
-
-  VectorIterator &operator=(VectorIterator &&other) {
-    data_ = other.data_;
-    return *this;
-  }
-
-  bool operator==(const VectorIterator &other) const {
-    return data_ == other.data_;
-  }
-
-  bool operator<(const VectorIterator &other) const {
-    return data_ < other.data_;
-  }
-
-  bool operator!=(const VectorIterator &other) const {
-    return data_ != other.data_;
-  }
-
-  ptrdiff_t operator-(const VectorIterator &other) const {
-    return (data_ - other.data_) / IndirectHelper<T>::element_stride;
-  }
-
-  typename super_type::value_type operator *() const {
-    return IndirectHelper<T>::Read(data_, 0);
-  }
-
-  typename super_type::value_type operator->() const {
-    return IndirectHelper<T>::Read(data_, 0);
-  }
-
-  VectorIterator &operator++() {
-    data_ += IndirectHelper<T>::element_stride;
-    return *this;
-  }
-
-  VectorIterator operator++(int) {
-    VectorIterator temp(data_, 0);
-    data_ += IndirectHelper<T>::element_stride;
-    return temp;
-  }
-
-  VectorIterator operator+(const uoffset_t &offset) const {
-    return VectorIterator(data_ + offset * IndirectHelper<T>::element_stride, 0);
-  }
-
-  VectorIterator& operator+=(const uoffset_t &offset) {
-    data_ += offset * IndirectHelper<T>::element_stride;
-    return *this;
-  }
-
-  VectorIterator &operator--() {
-    data_ -= IndirectHelper<T>::element_stride;
-    return *this;
-  }
-
-  VectorIterator operator--(int) {
-    VectorIterator temp(data_, 0);
-    data_ -= IndirectHelper<T>::element_stride;
-    return temp;
-  }
-
-  VectorIterator operator-(const uoffset_t &offset) {
-    return VectorIterator(data_ - offset * IndirectHelper<T>::element_stride, 0);
-  }
-
-  VectorIterator& operator-=(const uoffset_t &offset) {
-    data_ -= offset * IndirectHelper<T>::element_stride;
-    return *this;
-  }
-
-private:
-  const uint8_t *data_;
-};
-
-struct String;
-
-// This is used as a helper type for accessing vectors.
-// Vector::data() assumes the vector elements start after the length field.
-template<typename T> class Vector {
-public:
-  typedef VectorIterator<T, typename IndirectHelper<T>::mutable_return_type>
-    iterator;
-  typedef VectorIterator<T, typename IndirectHelper<T>::return_type>
-    const_iterator;
-
-  uoffset_t size() const { return EndianScalar(length_); }
-
-  // Deprecated: use size(). Here for backwards compatibility.
-  uoffset_t Length() const { return size(); }
-
-  typedef typename IndirectHelper<T>::return_type return_type;
-  typedef typename IndirectHelper<T>::mutable_return_type mutable_return_type;
-
-  return_type Get(uoffset_t i) const {
-    assert(i < size());
-    return IndirectHelper<T>::Read(Data(), i);
-  }
-
-  return_type operator[](uoffset_t i) const { return Get(i); }
-
-  // If this is a Vector of enums, T will be its storage type, not the enum
-  // type. This function makes it convenient to retrieve value with enum
-  // type E.
-  template<typename E> E GetEnum(uoffset_t i) const {
-    return static_cast<E>(Get(i));
-  }
-
-  // If this a vector of unions, this does the cast for you. There's no check
-  // to make sure this is the right type!
-  template<typename U> const U *GetAs(uoffset_t i) const {
-    return reinterpret_cast<const U *>(Get(i));
-  }
-
-  // If this a vector of unions, this does the cast for you. There's no check
-  // to make sure this is actually a string!
-  const String *GetAsString(uoffset_t i) const {
-    return reinterpret_cast<const String *>(Get(i));
-  }
-
-  const void *GetStructFromOffset(size_t o) const {
-    return reinterpret_cast<const void *>(Data() + o);
-  }
-
-  iterator begin() { return iterator(Data(), 0); }
-  const_iterator begin() const { return const_iterator(Data(), 0); }
-
-  iterator end() { return iterator(Data(), size()); }
-  const_iterator end() const { return const_iterator(Data(), size()); }
-
-  // Change elements if you have a non-const pointer to this object.
-  // Scalars only. See reflection.h, and the documentation.
-  void Mutate(uoffset_t i, const T& val) {
-    assert(i < size());
-    WriteScalar(data() + i, val);
-  }
-
-  // Change an element of a vector of tables (or strings).
-  // "val" points to the new table/string, as you can obtain from
-  // e.g. reflection::AddFlatBuffer().
-  void MutateOffset(uoffset_t i, const uint8_t *val) {
-    assert(i < size());
-    assert(sizeof(T) == sizeof(uoffset_t));
-    WriteScalar(data() + i,
-                static_cast<uoffset_t>(val - (Data() + i * sizeof(uoffset_t))));
-  }
-
-  // Get a mutable pointer to tables/strings inside this vector.
-  mutable_return_type GetMutableObject(uoffset_t i) const {
-    assert(i < size());
-    return const_cast<mutable_return_type>(IndirectHelper<T>::Read(Data(), i));
-  }
-
-  // The raw data in little endian format. Use with care.
-  const uint8_t *Data() const {
-    return reinterpret_cast<const uint8_t *>(&length_ + 1);
-  }
-
-  uint8_t *Data() {
-    return reinterpret_cast<uint8_t *>(&length_ + 1);
-  }
-
-  // Similarly, but typed, much like std::vector::data
-  const T *data() const { return reinterpret_cast<const T *>(Data()); }
-  T *data() { return reinterpret_cast<T *>(Data()); }
-
-  template<typename K> return_type LookupByKey(K key) const {
-    void *search_result = std::bsearch(&key, Data(), size(),
-        IndirectHelper<T>::element_stride, KeyCompare<K>);
-
-    if (!search_result) {
-      return nullptr;  // Key not found.
-    }
-
-    const uint8_t *element = reinterpret_cast<const uint8_t *>(search_result);
-
-    return IndirectHelper<T>::Read(element, 0);
-  }
-
-protected:
-  // This class is only used to access pre-existing data. Don't ever
-  // try to construct these manually.
-  Vector();
-
-  uoffset_t length_;
-
-private:
-  // This class is a pointer. Copying will therefore create an invalid object.
-  // Private and unimplemented copy constructor.
-  Vector(const Vector&);
-
-  template<typename K> static int KeyCompare(const void *ap, const void *bp) {
-    const K *key = reinterpret_cast<const K *>(ap);
-    const uint8_t *data = reinterpret_cast<const uint8_t *>(bp);
-    auto table = IndirectHelper<T>::Read(data, 0);
-
-    // std::bsearch compares with the operands transposed, so we negate the
-    // result here.
-    return -table->KeyCompareWithValue(*key);
-  }
-};
-
-// Represent a vector much like the template above, but in this case we
-// don't know what the element types are (used with reflection.h).
-class VectorOfAny {
-public:
-  uoffset_t size() const { return EndianScalar(length_); }
-
-  const uint8_t *Data() const {
-    return reinterpret_cast<const uint8_t *>(&length_ + 1);
-  }
-  uint8_t *Data() {
-    return reinterpret_cast<uint8_t *>(&length_ + 1);
-  }
-protected:
-  VectorOfAny();
-
-  uoffset_t length_;
-
-private:
-  VectorOfAny(const VectorOfAny&);
-};
-
-#ifndef FLATBUFFERS_CPP98_STL
-template<typename T, typename U>
-Vector<Offset<T>> *VectorCast(Vector<Offset<U>> *ptr) {
-  static_assert(std::is_base_of<T, U>::value, "Unrelated types");
-  return reinterpret_cast<Vector<Offset<T>> *>(ptr);
-}
-
-template<typename T, typename U>
-const Vector<Offset<T>> *VectorCast(const Vector<Offset<U>> *ptr) {
-  static_assert(std::is_base_of<T, U>::value, "Unrelated types");
-  return reinterpret_cast<const Vector<Offset<T>> *>(ptr);
-}
-#endif
-
-// Convenient helper function to get the length of any vector, regardless
-// of wether it is null or not (the field is not set).
-template<typename T> static inline size_t VectorLength(const Vector<T> *v) {
-  return v ? v->Length() : 0;
-}
-
-struct String : public Vector<char> {
-  const char *c_str() const { return reinterpret_cast<const char *>(Data()); }
-  std::string str() const { return std::string(c_str(), Length()); }
-
-  bool operator <(const String &o) const {
-    return strcmp(c_str(), o.c_str()) < 0;
-  }
-};
-
-// Simple indirection for buffer allocation, to allow this to be overridden
-// with custom allocation (see the FlatBufferBuilder constructor).
-class simple_allocator {
- public:
-  virtual ~simple_allocator() {}
-  virtual uint8_t *allocate(size_t size) const { return new uint8_t[size]; }
-  virtual void deallocate(uint8_t *p) const { delete[] p; }
-};
-
-// This is a minimal replication of std::vector<uint8_t> functionality,
-// except growing from higher to lower addresses. i.e push_back() inserts data
-// in the lowest address in the vector.
-class vector_downward {
- public:
-  explicit vector_downward(size_t initial_size,
-                           const simple_allocator &allocator)
-    : reserved_((initial_size + sizeof(largest_scalar_t) - 1) &
-        ~(sizeof(largest_scalar_t) - 1)),
-      buf_(allocator.allocate(reserved_)),
-      cur_(buf_ + reserved_),
-      allocator_(allocator) {}
-
-  ~vector_downward() {
-    if (buf_)
-      allocator_.deallocate(buf_);
-  }
-
-  void clear() {
-    if (buf_ == nullptr)
-      buf_ = allocator_.allocate(reserved_);
-
-    cur_ = buf_ + reserved_;
-  }
-
-  #ifndef FLATBUFFERS_CPP98_STL
-  // Relinquish the pointer to the caller.
-  unique_ptr_t release() {
-    // Actually deallocate from the start of the allocated memory.
-    std::function<void(uint8_t *)> deleter(
-      std::bind(&simple_allocator::deallocate, allocator_, buf_));
-
-    // Point to the desired offset.
-    unique_ptr_t retval(data(), deleter);
-
-    // Don't deallocate when this instance is destroyed.
-    buf_ = nullptr;
-    cur_ = nullptr;
-
-    return retval;
-  }
-  #endif
-
-  size_t growth_policy(size_t bytes) {
-    return (bytes / 2) & ~(sizeof(largest_scalar_t) - 1);
-  }
-
-  uint8_t *make_space(size_t len) {
-    if (len > static_cast<size_t>(cur_ - buf_)) {
-      reallocate(len);
-    }
-    cur_ -= len;
-    // Beyond this, signed offsets may not have enough range:
-    // (FlatBuffers > 2GB not supported).
-    assert(size() < FLATBUFFERS_MAX_BUFFER_SIZE);
-    return cur_;
-  }
-
-  uoffset_t size() const {
-    assert(cur_ != nullptr && buf_ != nullptr);
-    return static_cast<uoffset_t>(reserved_ - (cur_ - buf_));
-  }
-
-  uint8_t *data() const {
-    assert(cur_ != nullptr);
-    return cur_;
-  }
-
-  uint8_t *data_at(size_t offset) const { return buf_ + reserved_ - offset; }
-
-  void push(const uint8_t *bytes, size_t num) {
-    auto dest = make_space(num);
-    memcpy(dest, bytes, num);
-  }
-
-  // Specialized version of push() that avoids memcpy call for small data.
-  template<typename T> void push_small(const T& little_endian_t) {
-    auto dest = make_space(sizeof(T));
-    *reinterpret_cast<T *>(dest) = little_endian_t;
-  }
-
-  // fill() is most frequently called with small byte counts (<= 4),
-  // which is why we're using loops rather than calling memset.
-  void fill(size_t zero_pad_bytes) {
-    auto dest = make_space(zero_pad_bytes);
-    for (size_t i = 0; i < zero_pad_bytes; i++) dest[i] = 0;
-  }
-
-  // Version for when we know the size is larger.
-  void fill_big(size_t zero_pad_bytes) {
-    auto dest = make_space(zero_pad_bytes);
-    memset(dest, 0, zero_pad_bytes);
-  }
-
-  void pop(size_t bytes_to_remove) { cur_ += bytes_to_remove; }
-
- private:
-  // You shouldn't really be copying instances of this class.
-  vector_downward(const vector_downward &);
-  vector_downward &operator=(const vector_downward &);
-
-  size_t reserved_;
-  uint8_t *buf_;
-  uint8_t *cur_;  // Points at location between empty (below) and used (above).
-  const simple_allocator &allocator_;
-
-  void reallocate(size_t len) {
-    auto old_size = size();
-    auto largest_align = AlignOf<largest_scalar_t>();
-    reserved_ += (std::max)(len, growth_policy(reserved_));
-    // Round up to avoid undefined behavior from unaligned loads and stores.
-    reserved_ = (reserved_ + (largest_align - 1)) & ~(largest_align - 1);
-    auto new_buf = allocator_.allocate(reserved_);
-    auto new_cur = new_buf + reserved_ - old_size;
-    memcpy(new_cur, cur_, old_size);
-    cur_ = new_cur;
-    allocator_.deallocate(buf_);
-    buf_ = new_buf;
-  }
-};
-
-// Converts a Field ID to a virtual table offset.
-inline voffset_t FieldIndexToOffset(voffset_t field_id) {
-  // Should correspond to what EndTable() below builds up.
-  const int fixed_fields = 2;  // Vtable size and Object Size.
-  return static_cast<voffset_t>((field_id + fixed_fields) * sizeof(voffset_t));
-}
-
-// Computes how many bytes you'd have to pad to be able to write an
-// "scalar_size" scalar if the buffer had grown to "buf_size" (downwards in
-// memory).
-inline size_t PaddingBytes(size_t buf_size, size_t scalar_size) {
-  return ((~buf_size) + 1) & (scalar_size - 1);
-}
-
-template <typename T> const T* data(const std::vector<T> &v) {
-  return v.empty() ? nullptr : &v.front();
-}
-template <typename T> T* data(std::vector<T> &v) {
-  return v.empty() ? nullptr : &v.front();
-}
-
-/// @endcond
-
-/// @addtogroup flatbuffers_cpp_api
-/// @{
-/// @class FlatBufferBuilder
-/// @brief Helper class to hold data needed in creation of a FlatBuffer.
-/// To serialize data, you typically call one of the `Create*()` functions in
-/// the generated code, which in turn call a sequence of `StartTable`/
-/// `PushElement`/`AddElement`/`EndTable`, or the builtin `CreateString`/
-/// `CreateVector` functions. Do this is depth-first order to build up a tree to
-/// the root. `Finish()` wraps up the buffer ready for transport.
-class FlatBufferBuilder
-/// @cond FLATBUFFERS_INTERNAL
-FLATBUFFERS_FINAL_CLASS
-/// @endcond
-{
- public:
-  /// @brief Default constructor for FlatBufferBuilder.
-  /// @param[in] initial_size The initial size of the buffer, in bytes. Defaults
-  /// to`1024`.
-  /// @param[in] allocator A pointer to the `simple_allocator` that should be
-  /// used. Defaults to `nullptr`, which means the `default_allocator` will be
-  /// be used.
-  explicit FlatBufferBuilder(uoffset_t initial_size = 1024,
-                             const simple_allocator *allocator = nullptr)
-      : buf_(initial_size, allocator ? *allocator : default_allocator),
-        nested(false), finished(false), minalign_(1), force_defaults_(false),
-        dedup_vtables_(true), string_pool(nullptr) {
-    offsetbuf_.reserve(16);  // Avoid first few reallocs.
-    vtables_.reserve(16);
-    EndianCheck();
-  }
-
-  ~FlatBufferBuilder() {
-    if (string_pool) delete string_pool;
-  }
-
-  /// @brief Reset all the state in this FlatBufferBuilder so it can be reused
-  /// to construct another buffer.
-  void Clear() {
-    buf_.clear();
-    offsetbuf_.clear();
-    nested = false;
-    finished = false;
-    vtables_.clear();
-    minalign_ = 1;
-    if (string_pool) string_pool->clear();
-  }
-
-  /// @brief The current size of the serialized buffer, counting from the end.
-  /// @return Returns an `uoffset_t` with the current size of the buffer.
-  uoffset_t GetSize() const { return buf_.size(); }
-
-  /// @brief Get the serialized buffer (after you call `Finish()`).
-  /// @return Returns an `uint8_t` pointer to the FlatBuffer data inside the
-  /// buffer.
-  uint8_t *GetBufferPointer() const {
-    Finished();
-    return buf_.data();
-  }
-
-  /// @brief Get a pointer to an unfinished buffer.
-  /// @return Returns a `uint8_t` pointer to the unfinished buffer.
-  uint8_t *GetCurrentBufferPointer() const { return buf_.data(); }
-
-  #ifndef FLATBUFFERS_CPP98_STL
-  /// @brief Get the released pointer to the serialized buffer.
-  /// @warning Do NOT attempt to use this FlatBufferBuilder afterwards!
-  /// @return The `unique_ptr` returned has a special allocator that knows how
-  /// to deallocate this pointer (since it points to the middle of an
-  /// allocation). Thus, do not mix this pointer with other `unique_ptr`'s, or
-  /// call `release()`/`reset()` on it.
-  unique_ptr_t ReleaseBufferPointer() {
-    Finished();
-    return buf_.release();
-  }
-  #endif
-
-  /// @brief get the minimum alignment this buffer needs to be accessed
-  /// properly. This is only known once all elements have been written (after
-  /// you call Finish()). You can use this information if you need to embed
-  /// a FlatBuffer in some other buffer, such that you can later read it
-  /// without first having to copy it into its own buffer.
-  size_t GetBufferMinAlignment() {
-    Finished();
-    return minalign_;
-  }
-
-  /// @cond FLATBUFFERS_INTERNAL
-  void Finished() const {
-    // If you get this assert, you're attempting to get access a buffer
-    // which hasn't been finished yet. Be sure to call
-    // FlatBufferBuilder::Finish with your root table.
-    // If you really need to access an unfinished buffer, call
-    // GetCurrentBufferPointer instead.
-    assert(finished);
-  }
-  /// @endcond
-
-  /// @brief In order to save space, fields that are set to their default value
-  /// don't get serialized into the buffer.
-  /// @param[in] bool fd When set to `true`, always serializes default values.
-  void ForceDefaults(bool fd) { force_defaults_ = fd; }
-
-  /// @brief By default vtables are deduped in order to save space.
-  /// @param[in] bool dedup When set to `true`, dedup vtables.
-  void DedupVtables(bool dedup) { dedup_vtables_ = dedup; }
-
-  /// @cond FLATBUFFERS_INTERNAL
-  void Pad(size_t num_bytes) { buf_.fill(num_bytes); }
-
-  void Align(size_t elem_size) {
-    if (elem_size > minalign_) minalign_ = elem_size;
-    buf_.fill(PaddingBytes(buf_.size(), elem_size));
-  }
-
-  void PushFlatBuffer(const uint8_t *bytes, size_t size) {
-    PushBytes(bytes, size);
-    finished = true;
-  }
-
-  void PushBytes(const uint8_t *bytes, size_t size) {
-    buf_.push(bytes, size);
-  }
-
-  void PopBytes(size_t amount) { buf_.pop(amount); }
-
-  template<typename T> void AssertScalarT() {
-    #ifndef FLATBUFFERS_CPP98_STL
-    // The code assumes power of 2 sizes and endian-swap-ability.
-    static_assert(std::is_scalar<T>::value
-        // The Offset<T> type is essentially a scalar but fails is_scalar.
-        || sizeof(T) == sizeof(Offset<void>),
-           "T must be a scalar type");
-    #endif
-  }
-
-  // Write a single aligned scalar to the buffer
-  template<typename T> uoffset_t PushElement(T element) {
-    AssertScalarT<T>();
-    T litle_endian_element = EndianScalar(element);
-    Align(sizeof(T));
-    buf_.push_small(litle_endian_element);
-    return GetSize();
-  }
-
-  template<typename T> uoffset_t PushElement(Offset<T> off) {
-    // Special case for offsets: see ReferTo below.
-    return PushElement(ReferTo(off.o));
-  }
-
-  // When writing fields, we track where they are, so we can create correct
-  // vtables later.
-  void TrackField(voffset_t field, uoffset_t off) {
-    FieldLoc fl = { off, field };
-    offsetbuf_.push_back(fl);
-  }
-
-  // Like PushElement, but additionally tracks the field this represents.
-  template<typename T> void AddElement(voffset_t field, T e, T def) {
-    // We don't serialize values equal to the default.
-    if (e == def && !force_defaults_) return;
-    auto off = PushElement(e);
-    TrackField(field, off);
-  }
-
-  template<typename T> void AddOffset(voffset_t field, Offset<T> off) {
-    if (!off.o) return;  // An offset of 0 means NULL, don't store.
-    AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));
-  }
-
-  template<typename T> void AddStruct(voffset_t field, const T *structptr) {
-    if (!structptr) return;  // Default, don't store.
-    Align(AlignOf<T>());
-    buf_.push_small(*structptr);
-    TrackField(field, GetSize());
-  }
-
-  void AddStructOffset(voffset_t field, uoffset_t off) {
-    TrackField(field, off);
-  }
-
-  // Offsets initially are relative to the end of the buffer (downwards).
-  // This function converts them to be relative to the current location
-  // in the buffer (when stored here), pointing upwards.
-  uoffset_t ReferTo(uoffset_t off) {
-    // Align to ensure GetSize() below is correct.
-    Align(sizeof(uoffset_t));
-    // Offset must refer to something already in buffer.
-    assert(off && off <= GetSize());
-    return GetSize() - off + static_cast<uoffset_t>(sizeof(uoffset_t));
-  }
-
-  void NotNested() {
-    // If you hit this, you're trying to construct a Table/Vector/String
-    // during the construction of its parent table (between the MyTableBuilder
-    // and table.Finish().
-    // Move the creation of these sub-objects to above the MyTableBuilder to
-    // not get this assert.
-    // Ignoring this assert may appear to work in simple cases, but the reason
-    // it is here is that storing objects in-line may cause vtable offsets
-    // to not fit anymore. It also leads to vtable duplication.
-    assert(!nested);
-  }
-
-  // From generated code (or from the parser), we call StartTable/EndTable
-  // with a sequence of AddElement calls in between.
-  uoffset_t StartTable() {
-    NotNested();
-    nested = true;
-    return GetSize();
-  }
-
-  // This finishes one serialized object by generating the vtable if it's a
-  // table, comparing it against existing vtables, and writing the
-  // resulting vtable offset.
-  uoffset_t EndTable(uoffset_t start, voffset_t numfields) {
-    // If you get this assert, a corresponding StartTable wasn't called.
-    assert(nested);
-    // Write the vtable offset, which is the start of any Table.
-    // We fill it's value later.
-    auto vtableoffsetloc = PushElement<soffset_t>(0);
-    // Write a vtable, which consists entirely of voffset_t elements.
-    // It starts with the number of offsets, followed by a type id, followed
-    // by the offsets themselves. In reverse:
-    buf_.fill_big(numfields * sizeof(voffset_t));
-    auto table_object_size = vtableoffsetloc - start;
-    assert(table_object_size < 0x10000);  // Vtable use 16bit offsets.
-    PushElement<voffset_t>(static_cast<voffset_t>(table_object_size));
-    PushElement<voffset_t>(FieldIndexToOffset(numfields));
-    // Write the offsets into the table
-    for (auto field_location = offsetbuf_.begin();
-              field_location != offsetbuf_.end();
-            ++field_location) {
-      auto pos = static_cast<voffset_t>(vtableoffsetloc - field_location->off);
-      // If this asserts, it means you've set a field twice.
-      assert(!ReadScalar<voffset_t>(buf_.data() + field_location->id));
-      WriteScalar<voffset_t>(buf_.data() + field_location->id, pos);
-    }
-    offsetbuf_.clear();
-    auto vt1 = reinterpret_cast<voffset_t *>(buf_.data());
-    auto vt1_size = ReadScalar<voffset_t>(vt1);
-    auto vt_use = GetSize();
-    // See if we already have generated a vtable with this exact same
-    // layout before. If so, make it point to the old one, remove this one.
-    if (dedup_vtables_) {
-      for (auto it = vtables_.begin(); it != vtables_.end(); ++it) {
-        auto vt2 = reinterpret_cast<voffset_t *>(buf_.data_at(*it));
-        auto vt2_size = *vt2;
-        if (vt1_size != vt2_size || memcmp(vt2, vt1, vt1_size)) continue;
-        vt_use = *it;
-        buf_.pop(GetSize() - vtableoffsetloc);
-        break;
-      }
-    }
-    // If this is a new vtable, remember it.
-    if (vt_use == GetSize()) {
-      vtables_.push_back(vt_use);
-    }
-    // Fill the vtable offset we created above.
-    // The offset points from the beginning of the object to where the
-    // vtable is stored.
-    // Offsets default direction is downward in memory for future format
-    // flexibility (storing all vtables at the start of the file).
-    WriteScalar(buf_.data_at(vtableoffsetloc),
-                static_cast<soffset_t>(vt_use) -
-                  static_cast<soffset_t>(vtableoffsetloc));
-
-    nested = false;
-    return vtableoffsetloc;
-  }
-
-  // This checks a required field has been set in a given table that has
-  // just been constructed.
-  template<typename T> void Required(Offset<T> table, voffset_t field) {
-    auto table_ptr = buf_.data_at(table.o);
-    auto vtable_ptr = table_ptr - ReadScalar<soffset_t>(table_ptr);
-    bool ok = ReadScalar<voffset_t>(vtable_ptr + field) != 0;
-    // If this fails, the caller will show what field needs to be set.
-    assert(ok);
-    (void)ok;
-  }
-
-  uoffset_t StartStruct(size_t alignment) {
-    Align(alignment);
-    return GetSize();
-  }
-
-  uoffset_t EndStruct() { return GetSize(); }
-
-  void ClearOffsets() { offsetbuf_.clear(); }
-
-  // Aligns such that when "len" bytes are written, an object can be written
-  // after it with "alignment" without padding.
-  void PreAlign(size_t len, size_t alignment) {
-    buf_.fill(PaddingBytes(GetSize() + len, alignment));
-  }
-  template<typename T> void PreAlign(size_t len) {
-    AssertScalarT<T>();
-    PreAlign(len, sizeof(T));
-  }
-  /// @endcond
-
-  /// @brief Store a string in the buffer, which can contain any binary data.
-  /// @param[in] str A const char pointer to the data to be stored as a string.
-  /// @param[in] len The number of bytes that should be stored from `str`.
-  /// @return Returns the offset in the buffer where the string starts.
-  Offset<String> CreateString(const char *str, size_t len) {
-    NotNested();
-    PreAlign<uoffset_t>(len + 1);  // Always 0-terminated.
-    buf_.fill(1);
-    PushBytes(reinterpret_cast<const uint8_t *>(str), len);
-    PushElement(static_cast<uoffset_t>(len));
-    return Offset<String>(GetSize());
-  }
-
-  /// @brief Store a string in the buffer, which is null-terminated.
-  /// @param[in] str A const char pointer to a C-string to add to the buffer.
-  /// @return Returns the offset in the buffer where the string starts.
-  Offset<String> CreateString(const char *str) {
-    return CreateString(str, strlen(str));
-  }
-
-  /// @brief Store a string in the buffer, which can contain any binary data.
-  /// @param[in] str A const reference to a std::string to store in the buffer.
-  /// @return Returns the offset in the buffer where the string starts.
-  Offset<String> CreateString(const std::string &str) {
-    return CreateString(str.c_str(), str.length());
-  }
-
-  /// @brief Store a string in the buffer, which can contain any binary data.
-  /// @param[in] str A const pointer to a `String` struct to add to the buffer.
-  /// @return Returns the offset in the buffer where the string starts
-  Offset<String> CreateString(const String *str) {
-    return str ? CreateString(str->c_str(), str->Length()) : 0;
-  }
-
-  /// @brief Store a string in the buffer, which can contain any binary data.
-  /// @param[in] str A const reference to a std::string like type with support
-  /// of T::c_str() and T::length() to store in the buffer.
-  /// @return Returns the offset in the buffer where the string starts.
-  template<typename T>
-    Offset<String> CreateString(const T &str) {
-    return CreateString(str.c_str(), str.length());
-  }
-
-  /// @brief Store a string in the buffer, which can contain any binary data.
-  /// If a string with this exact contents has already been serialized before,
-  /// instead simply returns the offset of the existing string.
-  /// @param[in] str A const char pointer to the data to be stored as a string.
-  /// @param[in] len The number of bytes that should be stored from `str`.
-  /// @return Returns the offset in the buffer where the string starts.
-  Offset<String> CreateSharedString(const char *str, size_t len) {
-    if (!string_pool)
-      string_pool = new StringOffsetMap(StringOffsetCompare(buf_));
-    auto size_before_string = buf_.size();
-    // Must first serialize the string, since the set is all offsets into
-    // buffer.
-    auto off = CreateString(str, len);
-    auto it = string_pool->find(off);
-    // If it exists we reuse existing serialized data!
-    if (it != string_pool->end()) {
-      // We can remove the string we serialized.
-      buf_.pop(buf_.size() - size_before_string);
-      return *it;
-    }
-    // Record this string for future use.
-    string_pool->insert(off);
-    return off;
-  }
-
-  /// @brief Store a string in the buffer, which null-terminated.
-  /// If a string with this exact contents has already been serialized before,
-  /// instead simply returns the offset of the existing string.
-  /// @param[in] str A const char pointer to a C-string to add to the buffer.
-  /// @return Returns the offset in the buffer where the string starts.
-  Offset<String> CreateSharedString(const char *str) {
-    return CreateSharedString(str, strlen(str));
-  }
-
-  /// @brief Store a string in the buffer, which can contain any binary data.
-  /// If a string with this exact contents has already been serialized before,
-  /// instead simply returns the offset of the existing string.
-  /// @param[in] str A const reference to a std::string to store in the buffer.
-  /// @return Returns the offset in the buffer where the string starts.
-  Offset<String> CreateSharedString(const std::string &str) {
-    return CreateSharedString(str.c_str(), str.length());
-  }
-
-  /// @brief Store a string in the buffer, which can contain any binary data.
-  /// If a string with this exact contents has already been serialized before,
-  /// instead simply returns the offset of the existing string.
-  /// @param[in] str A const pointer to a `String` struct to add to the buffer.
-  /// @return Returns the offset in the buffer where the string starts
-  Offset<String> CreateSharedString(const String *str) {
-    return CreateSharedString(str->c_str(), str->Length());
-  }
-
-  /// @cond FLATBUFFERS_INTERNAL
-  uoffset_t EndVector(size_t len) {
-    assert(nested);  // Hit if no corresponding StartVector.
-    nested = false;
-    return PushElement(static_cast<uoffset_t>(len));
-  }
-
-  void StartVector(size_t len, size_t elemsize) {
-    NotNested();
-    nested = true;
-    PreAlign<uoffset_t>(len * elemsize);
-    PreAlign(len * elemsize, elemsize);  // Just in case elemsize > uoffset_t.
-  }
-
-  // Call this right before StartVector/CreateVector if you want to force the
-  // alignment to be something different than what the element size would
-  // normally dictate.
-  // This is useful when storing a nested_flatbuffer in a vector of bytes,
-  // or when storing SIMD floats, etc.
-  void ForceVectorAlignment(size_t len, size_t elemsize, size_t alignment) {
-    PreAlign(len * elemsize, alignment);
-  }
-
-  uint8_t *ReserveElements(size_t len, size_t elemsize) {
-    return buf_.make_space(len * elemsize);
-  }
-  /// @endcond
-
-  /// @brief Serialize an array into a FlatBuffer `vector`.
-  /// @tparam T The data type of the array elements.
-  /// @param[in] v A pointer to the array of type `T` to serialize into the
-  /// buffer as a `vector`.
-  /// @param[in] len The number of elements to serialize.
-  /// @return Returns a typed `Offset` into the serialized data indicating
-  /// where the vector is stored.
-  template<typename T> Offset<Vector<T>> CreateVector(const T *v, size_t len) {
-    StartVector(len, sizeof(T));
-    if (sizeof(T) == 1) {
-      PushBytes(reinterpret_cast<const uint8_t *>(v), len);
-    } else {
-      for (auto i = len; i > 0; ) {
-        PushElement(v[--i]);
-      }
-    }
-    return Offset<Vector<T>>(EndVector(len));
-  }
-
-  /// @brief Serialize a `std::vector` into a FlatBuffer `vector`.
-  /// @tparam T The data type of the `std::vector` elements.
-  /// @param v A const reference to the `std::vector` to serialize into the
-  /// buffer as a `vector`.
-  /// @return Returns a typed `Offset` into the serialized data indicating
-  /// where the vector is stored.
-  template<typename T> Offset<Vector<T>> CreateVector(const std::vector<T> &v) {
-    return CreateVector(data(v), v.size());
-  }
-
-  // vector<bool> may be implemented using a bit-set, so we can't access it as
-  // an array. Instead, read elements manually.
-  // Background: https://isocpp.org/blog/2012/11/on-vectorbool
-  Offset<Vector<uint8_t>> CreateVector(const std::vector<bool> &v) {
-    StartVector(v.size(), sizeof(uint8_t));
-    for (auto i = v.size(); i > 0; ) {
-      PushElement(static_cast<uint8_t>(v[--i]));
-    }
-    return Offset<Vector<uint8_t>>(EndVector(v.size()));
-  }
-
-  #ifndef FLATBUFFERS_CPP98_STL
-  /// @brief Serialize values returned by a function into a FlatBuffer `vector`.
-  /// This is a convenience function that takes care of iteration for you.
-  /// @tparam T The data type of the `std::vector` elements.
-  /// @param f A function that takes the current iteration 0..vector_size-1 and
-  /// returns any type that you can construct a FlatBuffers vector out of.
-  /// @return Returns a typed `Offset` into the serialized data indicating
-  /// where the vector is stored.
-  template<typename T> Offset<Vector<T>> CreateVector(size_t vector_size,
-      const std::function<T (size_t i)> &f) {
-    std::vector<T> elems(vector_size);
-    for (size_t i = 0; i < vector_size; i++) elems[i] = f(i);
-    return CreateVector(elems);
-  }
-  #endif
-
-  /// @brief Serialize a `std::vector<std::string>` into a FlatBuffer `vector`.
-  /// This is a convenience function for a common case.
-  /// @param v A const reference to the `std::vector` to serialize into the
-  /// buffer as a `vector`.
-  /// @return Returns a typed `Offset` into the serialized data indicating
-  /// where the vector is stored.
-  Offset<Vector<Offset<String>>> CreateVectorOfStrings(
-      const std::vector<std::string> &v) {
-    std::vector<Offset<String>> offsets(v.size());
-    for (size_t i = 0; i < v.size(); i++) offsets[i] = CreateString(v[i]);
-    return CreateVector(offsets);
-  }
-
-  /// @brief Serialize an array of structs into a FlatBuffer `vector`.
-  /// @tparam T The data type of the struct array elements.
-  /// @param[in] v A pointer to the array of type `T` to serialize into the
-  /// buffer as a `vector`.
-  /// @param[in] len The number of elements to serialize.
-  /// @return Returns a typed `Offset` into the serialized data indicating
-  /// where the vector is stored.
-  template<typename T> Offset<Vector<const T *>> CreateVectorOfStructs(
-      const T *v, size_t len) {
-    StartVector(len * sizeof(T) / AlignOf<T>(), AlignOf<T>());
-    PushBytes(reinterpret_cast<const uint8_t *>(v), sizeof(T) * len);
-    return Offset<Vector<const T *>>(EndVector(len));
-  }
-
-  /// @brief Serialize an array of native structs into a FlatBuffer `vector`.
-  /// @tparam T The data type of the struct array elements.
-  /// @tparam S The data type of the native struct array elements.
-  /// @param[in] v A pointer to the array of type `S` to serialize into the
-  /// buffer as a `vector`.
-  /// @param[in] len The number of elements to serialize.
-  /// @return Returns a typed `Offset` into the serialized data indicating
-  /// where the vector is stored.
-  template<typename T, typename S> Offset<Vector<const T *>> CreateVectorOfNativeStructs(
-      const S *v, size_t len) {
-    extern T Pack(const S&);
-    typedef T (*Pack_t)(const S&);
-    std::vector<T> vv(len);
-    std::transform(v, v+len, vv.begin(), *(Pack_t)&Pack);
-    return CreateVectorOfStructs<T>(vv.data(), vv.size());
-  }
-
-
-  #ifndef FLATBUFFERS_CPP98_STL
-  /// @brief Serialize an array of structs into a FlatBuffer `vector`.
-  /// @tparam T The data type of the struct array elements.
-  /// @param[in] f A function that takes the current iteration 0..vector_size-1
-  /// and a pointer to the struct that must be filled.
-  /// @return Returns a typed `Offset` into the serialized data indicating
-  /// where the vector is stored.
-  /// This is mostly useful when flatbuffers are generated with mutation
-  /// accessors.
-  template<typename T> Offset<Vector<const T *>> CreateVectorOfStructs(
-      size_t vector_size, const std::function<void(size_t i, T *)> &filler) {
-    StartVector(vector_size * sizeof(T) / AlignOf<T>(), AlignOf<T>());
-    T *structs = reinterpret_cast<T *>(buf_.make_space(vector_size * sizeof(T)));
-    for (size_t i = 0; i < vector_size; i++) {
-      filler(i, structs);
-      structs++;
-    }
-    return Offset<Vector<const T *>>(EndVector(vector_size));
-  }
-  #endif
-
-  /// @brief Serialize a `std::vector` of structs into a FlatBuffer `vector`.
-  /// @tparam T The data type of the `std::vector` struct elements.
-  /// @param[in]] v A const reference to the `std::vector` of structs to
-  /// serialize into the buffer as a `vector`.
-  /// @return Returns a typed `Offset` into the serialized data indicating
-  /// where the vector is stored.
-  template<typename T> Offset<Vector<const T *>> CreateVectorOfStructs(
-      const std::vector<T> &v) {
-    return CreateVectorOfStructs(data(v), v.size());
-  }
-
-  /// @brief Serialize a `std::vector` of native structs into a FlatBuffer `vector`.
-  /// @tparam T The data type of the `std::vector` struct elements.
-  /// @tparam S The data type of the `std::vector` native struct elements.
-  /// @param[in]] v A const reference to the `std::vector` of structs to
-  /// serialize into the buffer as a `vector`.
-  /// @return Returns a typed `Offset` into the serialized data indicating
-  /// where the vector is stored.
-  template<typename T, typename S> Offset<Vector<const T *>> CreateVectorOfNativeStructs(
-      const std::vector<S> &v) {
-    return CreateVectorOfNativeStructs<T, S>(data(v), v.size());
-  }
-
-
-  /// @cond FLATBUFFERS_INTERNAL
-  template<typename T>
-  struct StructKeyComparator {
-    bool operator()(const T &a, const T &b) const {
-      return a.KeyCompareLessThan(&b);
-    }
-
-  private:
-    StructKeyComparator& operator= (const StructKeyComparator&);
-  };
-  /// @endcond
-
-  /// @brief Serialize a `std::vector` of structs into a FlatBuffer `vector`
-  /// in sorted order.
-  /// @tparam T The data type of the `std::vector` struct elements.
-  /// @param[in]] v A const reference to the `std::vector` of structs to
-  /// serialize into the buffer as a `vector`.
-  /// @return Returns a typed `Offset` into the serialized data indicating
-  /// where the vector is stored.
-  template<typename T> Offset<Vector<const T *>> CreateVectorOfSortedStructs(
-      std::vector<T> *v) {
-    return CreateVectorOfSortedStructs(data(*v), v->size());
-  }
-
-  /// @brief Serialize a `std::vector` of native structs into a FlatBuffer `vector`
-  /// in sorted order.
-  /// @tparam T The data type of the `std::vector` struct elements.
-  /// @tparam S The data type of the `std::vector` native struct elements.
-  /// @param[in]] v A const reference to the `std::vector` of structs to
-  /// serialize into the buffer as a `vector`.
-  /// @return Returns a typed `Offset` into the serialized data indicating
-  /// where the vector is stored.
-  template<typename T, typename S> Offset<Vector<const T *>> CreateVectorOfSortedNativeStructs(
-      std::vector<S> *v) {
-    return CreateVectorOfSortedNativeStructs<T, S>(data(*v), v->size());
-  }
-
-  /// @brief Serialize an array of structs into a FlatBuffer `vector` in sorted
-  /// order.
-  /// @tparam T The data type of the struct array elements.
-  /// @param[in] v A pointer to the array of type `T` to serialize into the
-  /// buffer as a `vector`.
-  /// @param[in] len The number of elements to serialize.
-  /// @return Returns a typed `Offset` into the serialized data indicating
-  /// where the vector is stored.
-  template<typename T> Offset<Vector<const T *>> CreateVectorOfSortedStructs(
-      T *v, size_t len) {
-    std::sort(v, v + len, StructKeyComparator<T>());
-    return CreateVectorOfStructs(v, len);
-  }
-
-  /// @brief Serialize an array of native structs into a FlatBuffer `vector` in sorted
-  /// order.
-  /// @tparam T The data type of the struct array elements.
-  /// @tparam S The data type of the native struct array elements.
-  /// @param[in] v A pointer to the array of type `S` to serialize into the
-  /// buffer as a `vector`.
-  /// @param[in] len The number of elements to serialize.
-  /// @return Returns a typed `Offset` into the serialized data indicating
-  /// where the vector is stored.
-  template<typename T, typename S> Offset<Vector<const T *>> CreateVectorOfSortedNativeStructs(
-      S *v, size_t len) {
-    extern T Pack(const S&);
-    typedef T (*Pack_t)(const S&);
-    std::vector<T> vv(len);
-    std::transform(v, v+len, vv.begin(), *(Pack_t)&Pack);
-    return CreateVectorOfSortedStructs<T>(vv, len);
-  }
-
-  /// @cond FLATBUFFERS_INTERNAL
-  template<typename T>
-  struct TableKeyComparator {
-  TableKeyComparator(vector_downward& buf) : buf_(buf) {}
-    bool operator()(const Offset<T> &a, const Offset<T> &b) const {
-      auto table_a = reinterpret_cast<T *>(buf_.data_at(a.o));
-      auto table_b = reinterpret_cast<T *>(buf_.data_at(b.o));
-      return table_a->KeyCompareLessThan(table_b);
-    }
-    vector_downward& buf_;
-
-  private:
-    TableKeyComparator& operator= (const TableKeyComparator&);
-  };
-  /// @endcond
-
-  /// @brief Serialize an array of `table` offsets as a `vector` in the buffer
-  /// in sorted order.
-  /// @tparam T The data type that the offset refers to.
-  /// @param[in] v An array of type `Offset<T>` that contains the `table`
-  /// offsets to store in the buffer in sorted order.
-  /// @param[in] len The number of elements to store in the `vector`.
-  /// @return Returns a typed `Offset` into the serialized data indicating
-  /// where the vector is stored.
-  template<typename T> Offset<Vector<Offset<T>>> CreateVectorOfSortedTables(
-      Offset<T> *v, size_t len) {
-    std::sort(v, v + len, TableKeyComparator<T>(buf_));
-    return CreateVector(v, len);
-  }
-
-  /// @brief Serialize an array of `table` offsets as a `vector` in the buffer
-  /// in sorted order.
-  /// @tparam T The data type that the offset refers to.
-  /// @param[in] v An array of type `Offset<T>` that contains the `table`
-  /// offsets to store in the buffer in sorted order.
-  /// @return Returns a typed `Offset` into the serialized data indicating
-  /// where the vector is stored.
-  template<typename T> Offset<Vector<Offset<T>>> CreateVectorOfSortedTables(
-      std::vector<Offset<T>> *v) {
-    return CreateVectorOfSortedTables(data(*v), v->size());
-  }
-
-  /// @brief Specialized version of `CreateVector` for non-copying use cases.
-  /// Write the data any time later to the returned buffer pointer `buf`.
-  /// @param[in] len The number of elements to store in the `vector`.
-  /// @param[in] elemsize The size of each element in the `vector`.
-  /// @param[out] buf A pointer to a `uint8_t` pointer that can be
-  /// written to at a later time to serialize the data into a `vector`
-  /// in the buffer.
-  uoffset_t CreateUninitializedVector(size_t len, size_t elemsize,
-                                      uint8_t **buf) {
-    NotNested();
-    StartVector(len, elemsize);
-    buf_.make_space(len * elemsize);
-    auto vec_start = GetSize();
-    auto vec_end = EndVector(len);
-    *buf = buf_.data_at(vec_start);
-    return vec_end;
-  }
-
-  /// @brief Specialized version of `CreateVector` for non-copying use cases.
-  /// Write the data any time later to the returned buffer pointer `buf`.
-  /// @tparam T The data type of the data that will be stored in the buffer
-  /// as a `vector`.
-  /// @param[in] len The number of elements to store in the `vector`.
-  /// @param[out] buf A pointer to a pointer of type `T` that can be
-  /// written to at a later time to serialize the data into a `vector`
-  /// in the buffer.
-  template<typename T> Offset<Vector<T>> CreateUninitializedVector(
-      size_t len, T **buf) {
-    return CreateUninitializedVector(len, sizeof(T),
-                                     reinterpret_cast<uint8_t **>(buf));
-  }
-
-  /// @brief Write a struct by itself, typically to be part of a union.
-  template<typename T> Offset<const T *> CreateStruct(const T &structobj) {
-    Align(AlignOf<T>());
-    buf_.push_small(structobj);
-    return Offset<const T *>(GetSize());
-  }
-
-  /// @brief The length of a FlatBuffer file header.
-  static const size_t kFileIdentifierLength = 4;
-
-  /// @brief Finish serializing a buffer by writing the root offset.
-  /// @param[in] file_identifier If a `file_identifier` is given, the buffer
-  /// will be prefixed with a standard FlatBuffers file header.
-  template<typename T> void Finish(Offset<T> root,
-                                   const char *file_identifier = nullptr) {
-
-    Finish(root.o, file_identifier, false);
-  }
-
-  /// @brief Finish a buffer with a 32 bit size field pre-fixed (size of the
-  /// buffer following the size field). These buffers are NOT compatible
-  /// with standard buffers created by Finish, i.e. you can't call GetRoot
-  /// on them, you have to use GetSizePrefixedRoot instead.
-  /// All >32 bit quantities in this buffer will be aligned when the whole
-  /// size pre-fixed buffer is aligned.
-  /// These kinds of buffers are useful for creating a stream of FlatBuffers.
-  template<typename T> void FinishSizePrefixed(Offset<T> root,
-                                   const char *file_identifier = nullptr) {
-    Finish(root.o, file_identifier, true);
-  }
-
- private:
-  // You shouldn't really be copying instances of this class.
-  FlatBufferBuilder(const FlatBufferBuilder &);
-  FlatBufferBuilder &operator=(const FlatBufferBuilder &);
-
-  void Finish(uoffset_t root, const char *file_identifier, bool size_prefix) {
-    NotNested();
-    // This will cause the whole buffer to be aligned.
-    PreAlign((size_prefix ? sizeof(uoffset_t) : 0) +
-             sizeof(uoffset_t) +
-             (file_identifier ? kFileIdentifierLength : 0),
-             minalign_);
-    if (file_identifier) {
-      assert(strlen(file_identifier) == kFileIdentifierLength);
-      PushBytes(reinterpret_cast<const uint8_t *>(file_identifier),
-                kFileIdentifierLength);
-    }
-    PushElement(ReferTo(root));  // Location of root.
-    if (size_prefix) {
-      PushElement(GetSize());
-    }
-    finished = true;
-  }
-
-  struct FieldLoc {
-    uoffset_t off;
-    voffset_t id;
-  };
-
-  simple_allocator default_allocator;
-
-  vector_downward buf_;
-
-  // Accumulating offsets of table members while it is being built.
-  std::vector<FieldLoc> offsetbuf_;
-
-  // Ensure objects are not nested.
-  bool nested;
-
-  // Ensure the buffer is finished before it is being accessed.
-  bool finished;
-
-  std::vector<uoffset_t> vtables_;  // todo: Could make this into a map?
-
-  size_t minalign_;
-
-  bool force_defaults_;  // Serialize values equal to their defaults anyway.
-
-  bool dedup_vtables_;
-
-  struct StringOffsetCompare {
-    StringOffsetCompare(const vector_downward &buf) : buf_(&buf) {}
-    bool operator() (const Offset<String> &a, const Offset<String> &b) const {
-      auto stra = reinterpret_cast<const String *>(buf_->data_at(a.o));
-      auto strb = reinterpret_cast<const String *>(buf_->data_at(b.o));
-      return strncmp(stra->c_str(), strb->c_str(),
-                     std::min(stra->size(), strb->size()) + 1) < 0;
-    }
-    const vector_downward *buf_;
-  };
-
-  // For use with CreateSharedString. Instantiated on first use only.
-  typedef std::set<Offset<String>, StringOffsetCompare> StringOffsetMap;
-  StringOffsetMap *string_pool;
-};
-/// @}
-
-/// @cond FLATBUFFERS_INTERNAL
-// Helpers to get a typed pointer to the root object contained in the buffer.
-template<typename T> T *GetMutableRoot(void *buf) {
-  EndianCheck();
-  return reinterpret_cast<T *>(reinterpret_cast<uint8_t *>(buf) +
-    EndianScalar(*reinterpret_cast<uoffset_t *>(buf)));
-}
-
-template<typename T> const T *GetRoot(const void *buf) {
-  return GetMutableRoot<T>(const_cast<void *>(buf));
-}
-
-template<typename T> const T *GetSizePrefixedRoot(const void *buf) {
-  return GetRoot<T>(reinterpret_cast<const uint8_t *>(buf) + sizeof(uoffset_t));
-}
-
-/// Helpers to get a typed pointer to objects that are currently being built.
-/// @warning Creating new objects will lead to reallocations and invalidates
-/// the pointer!
-template<typename T> T *GetMutableTemporaryPointer(FlatBufferBuilder &fbb,
-                                                   Offset<T> offset) {
-  return reinterpret_cast<T *>(fbb.GetCurrentBufferPointer() +
-    fbb.GetSize() - offset.o);
-}
-
-template<typename T> const T *GetTemporaryPointer(FlatBufferBuilder &fbb,
-                                                  Offset<T> offset) {
-  return GetMutableTemporaryPointer<T>(fbb, offset);
-}
-
-// Helper to see if the identifier in a buffer has the expected value.
-inline bool BufferHasIdentifier(const void *buf, const char *identifier) {
-  return strncmp(reinterpret_cast<const char *>(buf) + sizeof(uoffset_t),
-                 identifier, FlatBufferBuilder::kFileIdentifierLength) == 0;
-}
-
-// Helper class to verify the integrity of a FlatBuffer
-class Verifier FLATBUFFERS_FINAL_CLASS {
- public:
-  Verifier(const uint8_t *buf, size_t buf_len, uoffset_t _max_depth = 64,
-           uoffset_t _max_tables = 1000000)
-    : buf_(buf), end_(buf + buf_len), depth_(0), max_depth_(_max_depth),
-      num_tables_(0), max_tables_(_max_tables)
-    #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE
-        , upper_bound_(buf)
-    #endif
-    {}
-
-  // Central location where any verification failures register.
-  bool Check(bool ok) const {
-    #ifdef FLATBUFFERS_DEBUG_VERIFICATION_FAILURE
-      assert(ok);
-    #endif
-    #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE
-      if (!ok)
-        upper_bound_ = buf_;
-    #endif
-    return ok;
-  }
-
-  // Verify any range within the buffer.
-  bool Verify(const void *elem, size_t elem_len) const {
-    #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE
-      auto upper_bound = reinterpret_cast<const uint8_t *>(elem) + elem_len;
-      if (upper_bound_ < upper_bound)
-        upper_bound_ =  upper_bound;
-    #endif
-    return Check(elem_len <= (size_t) (end_ - buf_) &&
-                 elem >= buf_ &&
-                 elem <= end_ - elem_len);
-  }
-
-  // Verify a range indicated by sizeof(T).
-  template<typename T> bool Verify(const void *elem) const {
-    return Verify(elem, sizeof(T));
-  }
-
-  // Verify a pointer (may be NULL) of a table type.
-  template<typename T> bool VerifyTable(const T *table) {
-    return !table || table->Verify(*this);
-  }
-
-  // Verify a pointer (may be NULL) of any vector type.
-  template<typename T> bool Verify(const Vector<T> *vec) const {
-    const uint8_t *end;
-    return !vec ||
-           VerifyVector(reinterpret_cast<const uint8_t *>(vec), sizeof(T),
-                        &end);
-  }
-
-  // Verify a pointer (may be NULL) of a vector to struct.
-  template<typename T> bool Verify(const Vector<const T *> *vec) const {
-    return Verify(reinterpret_cast<const Vector<T> *>(vec));
-  }
-
-  // Verify a pointer (may be NULL) to string.
-  bool Verify(const String *str) const {
-    const uint8_t *end;
-    return !str ||
-           (VerifyVector(reinterpret_cast<const uint8_t *>(str), 1, &end) &&
-            Verify(end, 1) &&      // Must have terminator
-            Check(*end == '\0'));  // Terminating byte must be 0.
-  }
-
-  // Common code between vectors and strings.
-  bool VerifyVector(const uint8_t *vec, size_t elem_size,
-                    const uint8_t **end) const {
-    // Check we can read the size field.
-    if (!Verify<uoffset_t>(vec)) return false;
-    // Check the whole array. If this is a string, the byte past the array
-    // must be 0.
-    auto size = ReadScalar<uoffset_t>(vec);
-    auto max_elems = FLATBUFFERS_MAX_BUFFER_SIZE / elem_size;
-    if (!Check(size < max_elems))
-      return false;  // Protect against byte_size overflowing.
-    auto byte_size = sizeof(size) + elem_size * size;
-    *end = vec + byte_size;
-    return Verify(vec, byte_size);
-  }
-
-  // Special case for string contents, after the above has been called.
-  bool VerifyVectorOfStrings(const Vector<Offset<String>> *vec) const {
-      if (vec) {
-        for (uoffset_t i = 0; i < vec->size(); i++) {
-          if (!Verify(vec->Get(i))) return false;
-        }
-      }
-      return true;
-  }
-
-  // Special case for table contents, after the above has been called.
-  template<typename T> bool VerifyVectorOfTables(const Vector<Offset<T>> *vec) {
-    if (vec) {
-      for (uoffset_t i = 0; i < vec->size(); i++) {
-        if (!vec->Get(i)->Verify(*this)) return false;
-      }
-    }
-    return true;
-  }
-
-  template<typename T> bool VerifyBufferFromStart(const char *identifier,
-                                                  const uint8_t *start) {
-    if (identifier &&
-        (size_t(end_ - start) < 2 * sizeof(flatbuffers::uoffset_t) ||
-         !BufferHasIdentifier(start, identifier))) {
-      return false;
-    }
-
-    // Call T::Verify, which must be in the generated code for this type.
-    return Verify<uoffset_t>(start) &&
-      reinterpret_cast<const T *>(start + ReadScalar<uoffset_t>(start))->
-        Verify(*this)
-        #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE
-          && GetComputedSize()
-        #endif
-            ;
-  }
-
-  // Verify this whole buffer, starting with root type T.
-  template<typename T> bool VerifyBuffer() {
-    return VerifyBuffer<T>(nullptr);
-  }
-
-  template<typename T> bool VerifyBuffer(const char *identifier) {
-    return VerifyBufferFromStart<T>(identifier, buf_);
-  }
-
-  template<typename T> bool VerifySizePrefixedBuffer(const char *identifier) {
-    return Verify<uoffset_t>(buf_) &&
-           ReadScalar<uoffset_t>(buf_) == end_ - buf_ - sizeof(uoffset_t) &&
-           VerifyBufferFromStart<T>(identifier, buf_ + sizeof(uoffset_t));
-  }
-
-  // Called at the start of a table to increase counters measuring data
-  // structure depth and amount, and possibly bails out with false if
-  // limits set by the constructor have been hit. Needs to be balanced
-  // with EndTable().
-  bool VerifyComplexity() {
-    depth_++;
-    num_tables_++;
-    return Check(depth_ <= max_depth_ && num_tables_ <= max_tables_);
-  }
-
-  // Called at the end of a table to pop the depth count.
-  bool EndTable() {
-    depth_--;
-    return true;
-  }
-
-  #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE
-  // Returns the message size in bytes
-  size_t GetComputedSize() const {
-    uintptr_t size = upper_bound_ - buf_;
-    // Align the size to uoffset_t
-    size = (size - 1 + sizeof(uoffset_t)) & ~(sizeof(uoffset_t) - 1);
-    return (buf_  + size > end_) ?  0 : size;
-  }
-  #endif
-
- private:
-  const uint8_t *buf_;
-  const uint8_t *end_;
-  uoffset_t depth_;
-  uoffset_t max_depth_;
-  uoffset_t num_tables_;
-  uoffset_t max_tables_;
-#ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE
-  mutable const uint8_t *upper_bound_;
-#endif
-};
-
-// Convenient way to bundle a buffer and its length, to pass it around
-// typed by its root.
-// A BufferRef does not own its buffer.
-struct BufferRefBase {};  // for std::is_base_of
-template<typename T> struct BufferRef : BufferRefBase {
-  BufferRef() : buf(nullptr), len(0), must_free(false) {}
-  BufferRef(uint8_t *_buf, uoffset_t _len)
-    : buf(_buf), len(_len), must_free(false) {}
-
-  ~BufferRef() { if (must_free) free(buf); }
-
-  const T *GetRoot() const { return flatbuffers::GetRoot<T>(buf); }
-
-  bool Verify() {
-    Verifier verifier(buf, len);
-    return verifier.VerifyBuffer<T>(nullptr);
-  }
-
-  uint8_t *buf;
-  uoffset_t len;
-  bool must_free;
-};
-
-// "structs" are flat structures that do not have an offset table, thus
-// always have all members present and do not support forwards/backwards
-// compatible extensions.
-
-class Struct FLATBUFFERS_FINAL_CLASS {
- public:
-  template<typename T> T GetField(uoffset_t o) const {
-    return ReadScalar<T>(&data_[o]);
-  }
-
-  template<typename T> T GetStruct(uoffset_t o) const {
-    return reinterpret_cast<T>(&data_[o]);
-  }
-
-  const uint8_t *GetAddressOf(uoffset_t o) const { return &data_[o]; }
-  uint8_t *GetAddressOf(uoffset_t o) { return &data_[o]; }
-
- private:
-  uint8_t data_[1];
-};
-
-// "tables" use an offset table (possibly shared) that allows fields to be
-// omitted and added at will, but uses an extra indirection to read.
-class Table {
- public:
-  const uint8_t *GetVTable() const {
-    return data_ - ReadScalar<soffset_t>(data_);
-  }
-
-  // This gets the field offset for any of the functions below it, or 0
-  // if the field was not present.
-  voffset_t GetOptionalFieldOffset(voffset_t field) const {
-    // The vtable offset is always at the start.
-    auto vtable = GetVTable();
-    // The first element is the size of the vtable (fields + type id + itself).
-    auto vtsize = ReadScalar<voffset_t>(vtable);
-    // If the field we're accessing is outside the vtable, we're reading older
-    // data, so it's the same as if the offset was 0 (not present).
-    return field < vtsize ? ReadScalar<voffset_t>(vtable + field) : 0;
-  }
-
-  template<typename T> T GetField(voffset_t field, T defaultval) const {
-    auto field_offset = GetOptionalFieldOffset(field);
-    return field_offset ? ReadScalar<T>(data_ + field_offset) : defaultval;
-  }
-
-  template<typename P> P GetPointer(voffset_t field) {
-    auto field_offset = GetOptionalFieldOffset(field);
-    auto p = data_ + field_offset;
-    return field_offset
-      ? reinterpret_cast<P>(p + ReadScalar<uoffset_t>(p))
-      : nullptr;
-  }
-  template<typename P> P GetPointer(voffset_t field) const {
-    return const_cast<Table *>(this)->GetPointer<P>(field);
-  }
-
-  template<typename P> P GetStruct(voffset_t field) const {
-    auto field_offset = GetOptionalFieldOffset(field);
-    auto p = const_cast<uint8_t *>(data_ + field_offset);
-    return field_offset ? reinterpret_cast<P>(p) : nullptr;
-  }
-
-  template<typename T> bool SetField(voffset_t field, T val, T def) {
-    auto field_offset = GetOptionalFieldOffset(field);
-    if (!field_offset) return val == def;
-    WriteScalar(data_ + field_offset, val);
-    return true;
-  }
-
-  bool SetPointer(voffset_t field, const uint8_t *val) {
-    auto field_offset = GetOptionalFieldOffset(field);
-    if (!field_offset) return false;
-    WriteScalar(data_ + field_offset,
-                static_cast<uoffset_t>(val - (data_ + field_offset)));
-    return true;
-  }
-
-  uint8_t *GetAddressOf(voffset_t field) {
-    auto field_offset = GetOptionalFieldOffset(field);
-    return field_offset ? data_ + field_offset : nullptr;
-  }
-  const uint8_t *GetAddressOf(voffset_t field) const {
-    return const_cast<Table *>(this)->GetAddressOf(field);
-  }
-
-  bool CheckField(voffset_t field) const {
-    return GetOptionalFieldOffset(field) != 0;
-  }
-
-  // Verify the vtable of this table.
-  // Call this once per table, followed by VerifyField once per field.
-  bool VerifyTableStart(Verifier &verifier) const {
-    // Check the vtable offset.
-    if (!verifier.Verify<soffset_t>(data_)) return false;
-    auto vtable = GetVTable();
-    // Check the vtable size field, then check vtable fits in its entirety.
-    return verifier.VerifyComplexity() &&
-           verifier.Verify<voffset_t>(vtable) &&
-           (ReadScalar<voffset_t>(vtable) & (sizeof(voffset_t) - 1)) == 0 &&
-           verifier.Verify(vtable, ReadScalar<voffset_t>(vtable));
-  }
-
-  // Verify a particular field.
-  template<typename T> bool VerifyField(const Verifier &verifier,
-                                        voffset_t field) const {
-    // Calling GetOptionalFieldOffset should be safe now thanks to
-    // VerifyTable().
-    auto field_offset = GetOptionalFieldOffset(field);
-    // Check the actual field.
-    return !field_offset || verifier.Verify<T>(data_ + field_offset);
-  }
-
-  // VerifyField for required fields.
-  template<typename T> bool VerifyFieldRequired(const Verifier &verifier,
-                                        voffset_t field) const {
-    auto field_offset = GetOptionalFieldOffset(field);
-    return verifier.Check(field_offset != 0) &&
-           verifier.Verify<T>(data_ + field_offset);
-  }
-
- private:
-  // private constructor & copy constructor: you obtain instances of this
-  // class by pointing to existing data only
-  Table();
-  Table(const Table &other);
-
-  uint8_t data_[1];
-};
-
-/// @brief This can compute the start of a FlatBuffer from a root pointer, i.e.
-/// it is the opposite transformation of GetRoot().
-/// This may be useful if you want to pass on a root and have the recipient
-/// delete the buffer afterwards.
-inline const uint8_t *GetBufferStartFromRootPointer(const void *root) {
-  auto table = reinterpret_cast<const Table *>(root);
-  auto vtable = table->GetVTable();
-  // Either the vtable is before the root or after the root.
-  auto start = std::min(vtable, reinterpret_cast<const uint8_t *>(root));
-  // Align to at least sizeof(uoffset_t).
-  start = reinterpret_cast<const uint8_t *>(
-            reinterpret_cast<uintptr_t>(start) & ~(sizeof(uoffset_t) - 1));
-  // Additionally, there may be a file_identifier in the buffer, and the root
-  // offset. The buffer may have been aligned to any size between
-  // sizeof(uoffset_t) and FLATBUFFERS_MAX_ALIGNMENT (see "force_align").
-  // Sadly, the exact alignment is only known when constructing the buffer,
-  // since it depends on the presence of values with said alignment properties.
-  // So instead, we simply look at the next uoffset_t values (root,
-  // file_identifier, and alignment padding) to see which points to the root.
-  // None of the other values can "impersonate" the root since they will either
-  // be 0 or four ASCII characters.
-  static_assert(FlatBufferBuilder::kFileIdentifierLength == sizeof(uoffset_t),
-                "file_identifier is assumed to be the same size as uoffset_t");
-  for (auto possible_roots = FLATBUFFERS_MAX_ALIGNMENT / sizeof(uoffset_t) + 1;
-       possible_roots;
-       possible_roots--) {
-      start -= sizeof(uoffset_t);
-      if (ReadScalar<uoffset_t>(start) + start ==
-          reinterpret_cast<const uint8_t *>(root)) return start;
-  }
-  // We didn't find the root, either the "root" passed isn't really a root,
-  // or the buffer is corrupt.
-  // Assert, because calling this function with bad data may cause reads
-  // outside of buffer boundaries.
-  assert(false);
-  return nullptr;
-}
-
-// Base class for native objects (FlatBuffer data de-serialized into native
-// C++ data structures).
-// Contains no functionality, purely documentative.
-struct NativeTable {
-};
-
-/// @brief Function types to be used with resolving hashes into objects and
-/// back again. The resolver gets a pointer to a field inside an object API
-/// object that is of the type specified in the schema using the attribute
-/// `cpp_type` (it is thus important whatever you write to this address
-/// matches that type). The value of this field is initially null, so you
-/// may choose to implement a delayed binding lookup using this function
-/// if you wish. The resolver does the opposite lookup, for when the object
-/// is being serialized again.
-typedef uint64_t hash_value_t;
-#ifdef FLATBUFFERS_CPP98_STL
-  typedef void (*resolver_function_t)(void **pointer_adr, hash_value_t hash);
-  typedef hash_value_t (*rehasher_function_t)(void *pointer);
-#else
-  typedef std::function<void (void **pointer_adr, hash_value_t hash)>
-          resolver_function_t;
-  typedef std::function<hash_value_t (void *pointer)> rehasher_function_t;
-#endif
-
-// Helper function to test if a field is present, using any of the field
-// enums in the generated code.
-// `table` must be a generated table type. Since this is a template parameter,
-// this is not typechecked to be a subclass of Table, so beware!
-// Note: this function will return false for fields equal to the default
-// value, since they're not stored in the buffer (unless force_defaults was
-// used).
-template<typename T> bool IsFieldPresent(const T *table, voffset_t field) {
-  // Cast, since Table is a private baseclass of any table types.
-  return reinterpret_cast<const Table *>(table)->CheckField(field);
-}
-
-// Utility function for reverse lookups on the EnumNames*() functions
-// (in the generated C++ code)
-// names must be NULL terminated.
-inline int LookupEnum(const char **names, const char *name) {
-  for (const char **p = names; *p; p++)
-    if (!strcmp(*p, name))
-      return static_cast<int>(p - names);
-  return -1;
-}
-
-// These macros allow us to layout a struct with a guarantee that they'll end
-// up looking the same on different compilers and platforms.
-// It does this by disallowing the compiler to do any padding, and then
-// does padding itself by inserting extra padding fields that make every
-// element aligned to its own size.
-// Additionally, it manually sets the alignment of the struct as a whole,
-// which is typically its largest element, or a custom size set in the schema
-// by the force_align attribute.
-// These are used in the generated code only.
-
-#if defined(_MSC_VER)
-  #define MANUALLY_ALIGNED_STRUCT(alignment) \
-    __pragma(pack(1)); \
-    struct __declspec(align(alignment))
-  #define STRUCT_END(name, size) \
-    __pragma(pack()); \
-    static_assert(sizeof(name) == size, "compiler breaks packing rules")
-#elif defined(__GNUC__) || defined(__clang__)
-  #define MANUALLY_ALIGNED_STRUCT(alignment) \
-    _Pragma("pack(1)") \
-    struct __attribute__((aligned(alignment)))
-  #define STRUCT_END(name, size) \
-    _Pragma("pack()") \
-    static_assert(sizeof(name) == size, "compiler breaks packing rules")
-#else
-  #error Unknown compiler, please define structure alignment macros
-#endif
-
-// String which identifies the current version of FlatBuffers.
-// flatbuffer_version_string is used by Google developers to identify which
-// applications uploaded to Google Play are using this library.  This allows
-// the development team at Google to determine the popularity of the library.
-// How it works: Applications that are uploaded to the Google Play Store are
-// scanned for this version string.  We track which applications are using it
-// to measure popularity.  You are free to remove it (of course) but we would
-// appreciate if you left it in.
-
-// Weak linkage is culled by VS & doesn't work on cygwin.
-#if !defined(_WIN32) && !defined(__CYGWIN__)
-
-extern volatile __attribute__((weak)) const char *flatbuffer_version_string;
-volatile __attribute__((weak)) const char *flatbuffer_version_string =
-  "FlatBuffers "
-  FLATBUFFERS_STRING(FLATBUFFERS_VERSION_MAJOR) "."
-  FLATBUFFERS_STRING(FLATBUFFERS_VERSION_MINOR) "."
-  FLATBUFFERS_STRING(FLATBUFFERS_VERSION_REVISION);
-
-#endif  // !defined(_WIN32) && !defined(__CYGWIN__)
-
-#define DEFINE_BITMASK_OPERATORS(E, T)\
-    inline E operator | (E lhs, E rhs){\
-        return E(T(lhs) | T(rhs));\
-    }\
-    inline E operator & (E lhs, E rhs){\
-        return E(T(lhs) & T(rhs));\
-    }\
-    inline E operator ^ (E lhs, E rhs){\
-        return E(T(lhs) ^ T(rhs));\
-    }\
-    inline E operator ~ (E lhs){\
-        return E(~T(lhs));\
-    }\
-    inline E operator |= (E &lhs, E rhs){\
-        lhs = lhs | rhs;\
-        return lhs;\
-    }\
-    inline E operator &= (E &lhs, E rhs){\
-        lhs = lhs & rhs;\
-        return lhs;\
-    }\
-    inline E operator ^= (E &lhs, E rhs){\
-        lhs = lhs ^ rhs;\
-        return lhs;\
-    }\
-    inline bool operator !(E rhs) \
-    {\
-        return !bool(T(rhs)); \
-    }
-/// @endcond
-}  // namespace flatbuffers
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-#endif  // FLATBUFFERS_H_
diff --git a/third_party/flatbuffers/include/flatbuffers/flatc.h b/third_party/flatbuffers/include/flatbuffers/flatc.h
deleted file mode 100644
index e7bc835..0000000
--- a/third_party/flatbuffers/include/flatbuffers/flatc.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2017 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "flatbuffers/flatbuffers.h"
-#include "flatbuffers/idl.h"
-#include "flatbuffers/util.h"
-#include <functional>
-#include <limits>
-#include <string>
-
-#ifndef FLATC_H_
-#define FLATC_H_
-
-namespace flatbuffers {
-
-class FlatCompiler {
- public:
-  // Output generator for the various programming languages and formats we
-  // support.
-  struct Generator {
-    typedef bool (*GenerateFn)(const flatbuffers::Parser &parser,
-                               const std::string &path,
-                               const std::string &file_name);
-    typedef std::string (*MakeRuleFn)(const flatbuffers::Parser &parser,
-                                      const std::string &path,
-                                      const std::string &file_name);
-
-    GenerateFn generate;
-    const char *generator_opt_short;
-    const char *generator_opt_long;
-    const char *lang_name;
-    GenerateFn generateGRPC;
-    flatbuffers::IDLOptions::Language lang;
-    const char *generator_help;
-    MakeRuleFn make_rule;
-  };
-
-  typedef void (*WarnFn)(const FlatCompiler *flatc,
-                         const std::string &warn,
-                         bool show_exe_name);
-
-  typedef void (*ErrorFn)(const FlatCompiler *flatc,
-                          const std::string &err,
-                          bool usage, bool show_exe_name);
-
-  // Parameters required to initialize the FlatCompiler.
-  struct InitParams {
-    InitParams()
-        : generators(nullptr),
-          num_generators(0),
-          warn_fn(nullptr),
-          error_fn(nullptr) {}
-
-    const Generator* generators;
-    size_t num_generators;
-    WarnFn warn_fn;
-    ErrorFn error_fn;
-  };
-
-  explicit FlatCompiler(const InitParams& params) : params_(params) {}
-
-  int Compile(int argc, const char** argv);
-
-  std::string GetUsageString(const char* program_name) const;
-
- private:
-  void ParseFile(flatbuffers::Parser &parser,
-                 const std::string &filename,
-                 const std::string &contents,
-                 std::vector<const char *> &include_directories) const;
-
-  void Warn(const std::string &warn, bool show_exe_name = true) const;
-
-  void Error(const std::string &err, bool usage = true,
-             bool show_exe_name = true) const;
-
-  InitParams params_;
-};
-
-
-}  // namespace flatbuffers
-
-#endif  // FLATC_H_
diff --git a/third_party/flatbuffers/include/flatbuffers/flexbuffers.h b/third_party/flatbuffers/include/flatbuffers/flexbuffers.h
deleted file mode 100644
index 2c7a25e..0000000
--- a/third_party/flatbuffers/include/flatbuffers/flexbuffers.h
+++ /dev/null
@@ -1,1353 +0,0 @@
-/*
- * Copyright 2017 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FLATBUFFERS_FLEXBUFFERS_H_
-#define FLATBUFFERS_FLEXBUFFERS_H_
-
-#include <map>
-// We use the basic binary writing functions from the regular FlatBuffers.
-#include "flatbuffers/flatbuffers.h"
-#include "flatbuffers/util.h"
-
-#ifdef _MSC_VER
-#include <intrin.h>
-#endif
-
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable: 4127) // C4127: conditional expression is constant
-#endif
-
-namespace flexbuffers {
-
-class Reference;
-class Map;
-
-// These are used in the lower 2 bits of a type field to determine the size of
-// the elements (and or size field) of the item pointed to (e.g. vector).
-enum BitWidth {
-  BIT_WIDTH_8 = 0,
-  BIT_WIDTH_16 = 1,
-  BIT_WIDTH_32 = 2,
-  BIT_WIDTH_64 = 3,
-};
-
-// These are used as the upper 6 bits of a type field to indicate the actual
-// type.
-enum Type {
-  TYPE_NULL = 0,
-  TYPE_INT = 1,
-  TYPE_UINT = 2,
-  TYPE_FLOAT = 3,
-  // Types above stored inline, types below store an offset.
-  TYPE_KEY = 4,
-  TYPE_STRING = 5,
-  TYPE_INDIRECT_INT = 6,
-  TYPE_INDIRECT_UINT = 7,
-  TYPE_INDIRECT_FLOAT = 8,
-  TYPE_MAP = 9,
-  TYPE_VECTOR = 10,        // Untyped.
-  TYPE_VECTOR_INT = 11,    // Typed any size (stores no type table).
-  TYPE_VECTOR_UINT = 12,
-  TYPE_VECTOR_FLOAT = 13,
-  TYPE_VECTOR_KEY = 14,
-  TYPE_VECTOR_STRING = 15,
-  TYPE_VECTOR_INT2 = 16,   // Typed tuple (no type table, no size field).
-  TYPE_VECTOR_UINT2 = 17,
-  TYPE_VECTOR_FLOAT2 = 18,
-  TYPE_VECTOR_INT3 = 19,   // Typed triple (no type table, no size field).
-  TYPE_VECTOR_UINT3 = 20,
-  TYPE_VECTOR_FLOAT3 = 21,
-  TYPE_VECTOR_INT4 = 22,   // Typed quad (no type table, no size field).
-  TYPE_VECTOR_UINT4 = 23,
-  TYPE_VECTOR_FLOAT4 = 24,
-  TYPE_BLOB = 25,
-};
-
-inline bool IsInline(Type t) { return t <= TYPE_FLOAT; }
-
-inline bool IsTypedVectorElementType(Type t) {
-  return t >= TYPE_INT && t <= TYPE_STRING;
-}
-
-inline bool IsTypedVector(Type t) {
-  return t >= TYPE_VECTOR_INT && t <= TYPE_VECTOR_STRING;
-}
-
-inline bool IsFixedTypedVector(Type t) {
-  return t >= TYPE_VECTOR_INT2 && t <= TYPE_VECTOR_FLOAT4;
-}
-
-inline Type ToTypedVector(Type t, size_t fixed_len = 0) {
-  assert(IsTypedVectorElementType(t));
-  switch (fixed_len) {
-    case 0: return static_cast<Type>(t - TYPE_INT + TYPE_VECTOR_INT);
-    case 2: return static_cast<Type>(t - TYPE_INT + TYPE_VECTOR_INT2);
-    case 3: return static_cast<Type>(t - TYPE_INT + TYPE_VECTOR_INT3);
-    case 4: return static_cast<Type>(t - TYPE_INT + TYPE_VECTOR_INT4);
-    default: assert(0); return TYPE_NULL;
-  }
-}
-
-inline Type ToTypedVectorElementType(Type t) {
-  assert(IsTypedVector(t));
-  return static_cast<Type>(t - TYPE_VECTOR_INT + TYPE_INT);
-}
-
-inline Type ToFixedTypedVectorElementType(Type t, uint8_t *len) {
-  assert(IsFixedTypedVector(t));
-  auto fixed_type = t - TYPE_VECTOR_INT2;
-  *len = static_cast<uint8_t>(fixed_type / 3 + 2);  // 3 types each, starting from length 2.
-  return static_cast<Type>(fixed_type % 3 + TYPE_INT);
-}
-
-// TODO: implement proper support for 8/16bit floats, or decide not to
-// support them.
-typedef int16_t half;
-typedef int8_t quarter;
-
-// TODO: can we do this without conditionals using intrinsics or inline asm
-// on some platforms? Given branch prediction the method below should be
-// decently quick, but it is the most frequently executed function.
-// We could do an (unaligned) 64-bit read if we ifdef out the platforms for
-// which that doesn't work (or where we'd read into un-owned memory).
-template <typename R, typename T1, typename T2, typename T4, typename T8>
-R ReadSizedScalar(const uint8_t *data, uint8_t byte_width) {
-  return byte_width < 4
-    ? (byte_width < 2 ? static_cast<R>(flatbuffers::ReadScalar<T1>(data))
-                      : static_cast<R>(flatbuffers::ReadScalar<T2>(data)))
-    : (byte_width < 8 ? static_cast<R>(flatbuffers::ReadScalar<T4>(data))
-                      : static_cast<R>(flatbuffers::ReadScalar<T8>(data)));
-}
-
-
-inline int64_t ReadInt64(const uint8_t *data, uint8_t byte_width) {
-  return ReadSizedScalar<int64_t, int8_t, int16_t, int32_t, int64_t>(data,
-           byte_width);
-}
-
-inline uint64_t ReadUInt64(const uint8_t *data, uint8_t byte_width) {
-  // This is the "hottest" function (all offset lookups use this), so worth
-  // optimizing if possible.
-  // TODO: GCC apparently replaces memcpy by a rep movsb, but only if count is a
-  // constant, which here it isn't. Test if memcpy is still faster than
-  // the conditionals in ReadSizedScalar. Can also use inline asm.
-  #ifdef _MSC_VER
-    uint64_t u = 0;
-    __movsb(reinterpret_cast<uint8_t *>(&u),
-            reinterpret_cast<const uint8_t *>(data), byte_width);
-    return flatbuffers::EndianScalar(u);
-  #else
-    return ReadSizedScalar<uint64_t, uint8_t, uint16_t, uint32_t, uint64_t>(
-             data, byte_width);
-  #endif
-}
-
-inline double ReadDouble(const uint8_t *data, uint8_t byte_width) {
-  return ReadSizedScalar<double, quarter, half, float, double>(data,
-           byte_width);
-}
-
-inline const uint8_t *Indirect(const uint8_t *offset, uint8_t byte_width) {
-  return offset - ReadUInt64(offset, byte_width);
-}
-
-template<typename T> const uint8_t *Indirect(const uint8_t *offset) {
-  return offset - flatbuffers::ReadScalar<T>(offset);
-}
-
-inline BitWidth WidthU(uint64_t u) {
-  #define FLATBUFFERS_GET_FIELD_BIT_WIDTH(value, width) { \
-    if (!((u) & ~((1ULL << (width)) - 1ULL))) return BIT_WIDTH_##width; \
-  }
-  FLATBUFFERS_GET_FIELD_BIT_WIDTH(u, 8);
-  FLATBUFFERS_GET_FIELD_BIT_WIDTH(u, 16);
-  FLATBUFFERS_GET_FIELD_BIT_WIDTH(u, 32);
-  #undef FLATBUFFERS_GET_FIELD_BIT_WIDTH
-  return BIT_WIDTH_64;
-}
-
-inline BitWidth WidthI(int64_t i) {
-  auto u = static_cast<uint64_t>(i) << 1;
-  return WidthU(i >= 0 ? u : ~u);
-}
-
-inline BitWidth WidthF(double f) {
-  return static_cast<double>(static_cast<float>(f)) == f ? BIT_WIDTH_32
-                                                         : BIT_WIDTH_64;
-}
-
-// Base class of all types below.
-// Points into the data buffer and allows access to one type.
-class Object {
- public:
-  Object(const uint8_t *data, uint8_t byte_width)
-    : data_(data), byte_width_(byte_width) {}
-
- protected:
-  const uint8_t *data_;
-  uint8_t byte_width_;
-};
-
-// Stores size in `byte_width_` bytes before data_ pointer.
-class Sized : public Object {
- public:
-  Sized(const uint8_t *data, uint8_t byte_width) : Object(data, byte_width) {}
-  size_t size() const {
-    return static_cast<size_t>(ReadUInt64(data_ - byte_width_, byte_width_));
-  }
-};
-
-class String : public Sized {
- public:
-  String(const uint8_t *data, uint8_t byte_width)
-    : Sized(data, byte_width) {}
-
-  size_t length() const { return size(); }
-  const char *c_str() const { return reinterpret_cast<const char *>(data_); }
-  std::string str() const { return std::string(c_str(), length()); }
-
-  static String EmptyString() {
-    static const uint8_t empty_string[] = { 0/*len*/, 0/*terminator*/ };
-    return String(empty_string + 1, 1);
-  }
-  bool IsTheEmptyString() const { return data_ == EmptyString().data_; }
-};
-
-class Blob : public Sized {
- public:
-  Blob(const uint8_t *data, uint8_t byte_width)
-    : Sized(data, byte_width) {}
-
-  static Blob EmptyBlob() {
-    static const uint8_t empty_blob[] = { 0/*len*/ };
-    return Blob(empty_blob + 1, 1);
-  }
-  bool IsTheEmptyBlob() const { return data_ == EmptyBlob().data_; }
-};
-
-class Vector : public Sized {
- public:
-  Vector(const uint8_t *data, uint8_t byte_width)
-    : Sized(data, byte_width) {}
-
-  Reference operator[](size_t i) const;
-
-  static Vector EmptyVector() {
-    static const uint8_t empty_vector[] = { 0/*len*/ };
-    return Vector(empty_vector + 1, 1);
-  }
-  bool IsTheEmptyVector() const { return data_ == EmptyVector().data_; }
-};
-
-class TypedVector : public Sized {
- public:
-  TypedVector(const uint8_t *data, uint8_t byte_width, Type element_type)
-    : Sized(data, byte_width), type_(element_type) {}
-
-  Reference operator[](size_t i) const;
-
-  static TypedVector EmptyTypedVector() {
-    static const uint8_t empty_typed_vector[] = { 0/*len*/ };
-    return TypedVector(empty_typed_vector + 1, 1, TYPE_INT);
-  }
-  bool IsTheEmptyVector() const {
-    return data_ == TypedVector::EmptyTypedVector().data_;
-  }
-
-  Type ElementType() { return type_; }
-
- private:
-  Type type_;
-
-  friend Map;
-};
-
-class FixedTypedVector : public Object {
- public:
-  FixedTypedVector(const uint8_t *data, uint8_t byte_width, Type element_type,
-                   uint8_t len)
-    : Object(data, byte_width), type_(element_type), len_(len) {}
-
-  Reference operator[](size_t i) const;
-
-  static FixedTypedVector EmptyFixedTypedVector() {
-    static const uint8_t fixed_empty_vector[] = { 0/* unused */ };
-    return FixedTypedVector(fixed_empty_vector, 1, TYPE_INT, 0);
-  }
-  bool IsTheEmptyFixedTypedVector() const {
-    return data_ == FixedTypedVector::EmptyFixedTypedVector().data_;
-  }
-
-  Type ElementType() { return type_; }
-  uint8_t size() { return len_; }
-
- private:
-  Type type_;
-  uint8_t len_;
-};
-
-class Map : public Vector {
- public:
-  Map(const uint8_t *data, uint8_t byte_width)
-    : Vector(data, byte_width) {}
-
-  Reference operator[](const char *key) const;
-  Reference operator[](const std::string &key) const;
-
-  Vector Values() const { return Vector(data_, byte_width_); }
-
-  TypedVector Keys() const {
-    const size_t num_prefixed_fields = 3;
-    auto keys_offset = data_ - byte_width_ * num_prefixed_fields;
-    return TypedVector(Indirect(keys_offset, byte_width_),
-                       static_cast<uint8_t>(
-                         ReadUInt64(keys_offset + byte_width_, byte_width_)),
-                       TYPE_KEY);
-  }
-
-  static Map EmptyMap() {
-    static const uint8_t empty_map[] = {
-      0/*keys_len*/, 0/*keys_offset*/, 1/*keys_width*/, 0/*len*/
-    };
-    return Map(empty_map + 4, 1);
-  }
-
-  bool IsTheEmptyMap() const {
-    return data_ == EmptyMap().data_;
-  }
-};
-
-class Reference {
- public:
-  Reference(const uint8_t *data, uint8_t parent_width, uint8_t byte_width,
-            Type type)
-    : data_(data), parent_width_(parent_width), byte_width_(byte_width),
-      type_(type) {}
-
-  Reference(const uint8_t *data, uint8_t parent_width, uint8_t packed_type)
-    : data_(data), parent_width_(parent_width) {
-    byte_width_ = 1U << static_cast<BitWidth>(packed_type & 3);
-    type_ = static_cast<Type>(packed_type >> 2);
-  }
-
-  Type GetType() const { return type_; }
-
-  bool IsNull() const { return type_ == TYPE_NULL; }
-  bool IsInt() const { return type_ == TYPE_INT ||
-                              type_ == TYPE_INDIRECT_INT; }
-  bool IsUInt() const { return type_ == TYPE_UINT||
-                               type_ == TYPE_INDIRECT_UINT;; }
-  bool IsIntOrUint() const { return IsInt() || IsUInt(); }
-  bool IsFloat() const { return type_ == TYPE_FLOAT ||
-                                type_ == TYPE_INDIRECT_FLOAT; }
-  bool IsNumeric() const { return IsIntOrUint() || IsFloat(); }
-  bool IsString() const { return type_ == TYPE_STRING; }
-  bool IsKey() const { return type_ == TYPE_KEY; }
-  bool IsVector() const { return type_ == TYPE_VECTOR || type_ == TYPE_MAP; }
-  bool IsMap() const { return type_ == TYPE_MAP; }
-
-  // Reads any type as a int64_t. Never fails, does most sensible conversion.
-  // Truncates floats, strings are attempted to be parsed for a number,
-  // vectors/maps return their size. Returns 0 if all else fails.
-  int64_t AsInt64() const {
-    if (type_ == TYPE_INT) {
-      // A fast path for the common case.
-      return ReadInt64(data_, parent_width_);
-    } else switch (type_) {
-      case TYPE_INDIRECT_INT: return ReadInt64(Indirect(), byte_width_);
-      case TYPE_UINT: return ReadUInt64(data_, parent_width_);
-      case TYPE_INDIRECT_UINT: return ReadUInt64(Indirect(), byte_width_);
-      case TYPE_FLOAT: return static_cast<int64_t>(
-                                ReadDouble(data_, parent_width_));
-      case TYPE_INDIRECT_FLOAT: return static_cast<int64_t>(
-                                         ReadDouble(Indirect(), byte_width_));
-      case TYPE_NULL: return 0;
-      case TYPE_STRING: return flatbuffers::StringToInt(AsString().c_str());
-      case TYPE_VECTOR: return static_cast<int64_t>(AsVector().size());
-      default:
-      // Convert other things to int.
-      return 0;
-    }
-  }
-
-  // TODO: could specialize these to not use AsInt64() if that saves
-  // extension ops in generated code, and use a faster op than ReadInt64.
-  int32_t AsInt32() const { return static_cast<int32_t>(AsInt64()); }
-  int16_t AsInt16() const { return static_cast<int16_t>(AsInt64()); }
-  int8_t  AsInt8()  const { return static_cast<int8_t> (AsInt64()); }
-
-  uint64_t AsUInt64() const {
-    if (type_ == TYPE_UINT) {
-      // A fast path for the common case.
-      return ReadUInt64(data_, parent_width_);
-    } else switch (type_) {
-      case TYPE_INDIRECT_UINT: return ReadUInt64(Indirect(), byte_width_);
-      case TYPE_INT: return ReadInt64(data_, parent_width_);
-      case TYPE_INDIRECT_INT: return ReadInt64(Indirect(), byte_width_);
-      case TYPE_FLOAT: return static_cast<uint64_t>(
-                                ReadDouble(data_, parent_width_));
-      case TYPE_INDIRECT_FLOAT: return static_cast<uint64_t>(
-                                  ReadDouble(Indirect(), byte_width_));
-      case TYPE_NULL: return 0;
-      case TYPE_STRING: return flatbuffers::StringToUInt(AsString().c_str());
-      case TYPE_VECTOR: return static_cast<uint64_t>(AsVector().size());
-      default:
-      // Convert other things to uint.
-      return 0;
-    }
-  }
-
-  uint32_t AsUInt32() const { return static_cast<uint32_t>(AsUInt64()); }
-  uint16_t AsUInt16() const { return static_cast<uint16_t>(AsUInt64()); }
-  uint8_t  AsUInt8()  const { return static_cast<uint8_t> (AsUInt64()); }
-
-  double AsDouble() const {
-    if (type_ == TYPE_FLOAT) {
-      // A fast path for the common case.
-      return ReadDouble(data_, parent_width_);
-    } else switch (type_) {
-      case TYPE_INDIRECT_FLOAT: return ReadDouble(Indirect(), byte_width_);
-      case TYPE_INT: return static_cast<double>(
-                              ReadInt64(data_, parent_width_));
-      case TYPE_UINT: return static_cast<double>(
-                               ReadUInt64(data_, parent_width_));
-      case TYPE_INDIRECT_INT: return static_cast<double>(
-                                       ReadInt64(Indirect(), byte_width_));
-      case TYPE_INDIRECT_UINT: return static_cast<double>(
-                                        ReadUInt64(Indirect(), byte_width_));
-      case TYPE_NULL: return 0.0;
-      case TYPE_STRING: return strtod(AsString().c_str(), nullptr);
-      case TYPE_VECTOR: return static_cast<double>(AsVector().size());
-      default:
-      // Convert strings and other things to float.
-      return 0;
-    }
-  }
-
-  float AsFloat() const { return static_cast<float>(AsDouble()); }
-
-  const char *AsKey() const {
-    if (type_ == TYPE_KEY) {
-      return reinterpret_cast<const char *>(Indirect());
-    } else {
-      return "";
-    }
-  }
-
-  // This function returns the empty string if you try to read a not-string.
-  String AsString() const {
-    if (type_ == TYPE_STRING) {
-      return String(Indirect(), byte_width_);
-    } else {
-      return String::EmptyString();
-    }
-  }
-
-  // Unlike AsString(), this will convert any type to a std::string.
-  std::string ToString() const {
-    if (type_ == TYPE_STRING) {
-      return String(Indirect(), byte_width_).c_str();
-    } else if (IsKey()) {
-      return AsKey();
-    } else if (IsInt()) {
-      return flatbuffers::NumToString(AsInt64());
-    } else if (IsUInt()) {
-      return flatbuffers::NumToString(AsUInt64());
-    } else if (IsFloat()) {
-      return flatbuffers::NumToString(AsDouble());
-    } else if (IsNull()) {
-      return "null";
-    } else if (IsMap()) {
-      return "{..}";  // TODO: show elements.
-    } else if (IsVector()) {
-      return "[..]";  // TODO: show elements.
-    } else {
-      return "(?)";
-    }
-  }
-
-  // This function returns the empty blob if you try to read a not-blob.
-  // Strings can be viewed as blobs too.
-  Blob AsBlob() const {
-    if (type_ == TYPE_BLOB || type_ == TYPE_STRING) {
-      return Blob(Indirect(), byte_width_);
-    } else {
-      return Blob::EmptyBlob();
-    }
-  }
-
-  // This function returns the empty vector if you try to read a not-vector.
-  // Maps can be viewed as vectors too.
-  Vector AsVector() const {
-    if (type_ == TYPE_VECTOR || type_ == TYPE_MAP) {
-      return Vector(Indirect(), byte_width_);
-    } else {
-      return Vector::EmptyVector();
-    }
-  }
-
-  TypedVector AsTypedVector() const {
-    if (IsTypedVector(type_)) {
-      return TypedVector(Indirect(), byte_width_,
-                         ToTypedVectorElementType(type_));
-    } else {
-      return TypedVector::EmptyTypedVector();
-    }
-  }
-
-  FixedTypedVector AsFixedTypedVector() const {
-    if (IsFixedTypedVector(type_)) {
-      uint8_t len = 0;
-      auto vtype = ToFixedTypedVectorElementType(type_, &len);
-      return FixedTypedVector(Indirect(), byte_width_, vtype, len);
-    } else {
-      return FixedTypedVector::EmptyFixedTypedVector();
-    }
-  }
-
-  Map AsMap() const {
-    if (type_ == TYPE_MAP) {
-      return Map(Indirect(), byte_width_);
-    } else {
-      return Map::EmptyMap();
-    }
-  }
-
-  // Experimental: Mutation functions.
-  // These allow scalars in an already created buffer to be updated in-place.
-  // Since by default scalars are stored in the smallest possible space,
-  // the new value may not fit, in which case these functions return false.
-  // To avoid this, you can construct the values you intend to mutate using
-  // Builder::ForceMinimumBitWidth.
-  bool MutateInt(int64_t i) {
-    if (type_ == TYPE_INT) {
-      return Mutate(data_, i, parent_width_, WidthI(i));
-    } else if (type_ == TYPE_INDIRECT_INT) {
-      return Mutate(Indirect(), i, byte_width_, WidthI(i));
-    } else if (type_ == TYPE_UINT) {
-      auto u = static_cast<uint64_t>(i);
-      return Mutate(data_, u, parent_width_, WidthU(u));
-    } else if (type_ == TYPE_INDIRECT_UINT) {
-      auto u = static_cast<uint64_t>(i);
-      return Mutate(Indirect(), u, byte_width_, WidthU(u));
-    } else {
-      return false;
-    }
-  }
-
-  bool MutateUInt(uint64_t u) {
-    if (type_ == TYPE_UINT) {
-      return Mutate(data_, u, parent_width_, WidthU(u));
-    } else if (type_ == TYPE_INDIRECT_UINT) {
-      return Mutate(Indirect(), u, byte_width_, WidthU(u));
-    } else if (type_ == TYPE_INT) {
-      auto i = static_cast<int64_t>(u);
-      return Mutate(data_, i, parent_width_, WidthI(i));
-    } else if (type_ == TYPE_INDIRECT_INT) {
-      auto i = static_cast<int64_t>(u);
-      return Mutate(Indirect(), i, byte_width_, WidthI(i));
-    } else {
-      return false;
-    }
-  }
-
-  bool MutateFloat(float f) {
-    if (type_ == TYPE_FLOAT) {
-      return MutateF(data_, f, parent_width_, BIT_WIDTH_32);
-    } else if (type_ == TYPE_INDIRECT_FLOAT) {
-      return MutateF(Indirect(), f, byte_width_, BIT_WIDTH_32);
-    } else {
-      return false;
-    }
-  }
-
-  bool MutateFloat(double d) {
-    if (type_ == TYPE_FLOAT) {
-      return MutateF(data_, d, parent_width_, WidthF(d));
-    } else if (type_ == TYPE_INDIRECT_FLOAT) {
-      return MutateF(Indirect(), d, byte_width_, WidthF(d));
-    } else {
-      return false;
-    }
-  }
-
-  bool MutateString(const char *str, size_t len) {
-    auto s = AsString();
-    if (s.IsTheEmptyString()) return false;
-    // This is very strict, could allow shorter strings, but that creates
-    // garbage.
-    if (s.length() != len) return false;
-    memcpy(const_cast<char *>(s.c_str()), str, len);
-    return true;
-  }
-  bool MutateString(const char *str) {
-    return MutateString(str, strlen(str));
-  }
-  bool MutateString(const std::string &str) {
-    return MutateString(str.data(), str.length());
-  }
-
- private:
-  const uint8_t *Indirect() const {
-    return flexbuffers::Indirect(data_, parent_width_);
-  }
-
-  template<typename T> bool Mutate(const uint8_t *dest, T t, size_t byte_width,
-                                   BitWidth value_width) {
-    auto fits = static_cast<size_t>(static_cast<size_t>(1U) << value_width) <= byte_width;
-    if (fits) {
-      t = flatbuffers::EndianScalar(t);
-      memcpy(const_cast<uint8_t *>(dest), &t, byte_width);
-    }
-    return fits;
-  }
-
-  template<typename T> bool MutateF(const uint8_t *dest, T t, size_t byte_width,
-                                    BitWidth value_width) {
-    if (byte_width == sizeof(double))
-      return Mutate(dest, static_cast<double>(t), byte_width, value_width);
-    if (byte_width == sizeof(float))
-      return Mutate(dest, static_cast<float>(t), byte_width, value_width);
-    assert(false);
-    return false;
-  }
-
-  const uint8_t *data_;
-  uint8_t parent_width_;
-  uint8_t byte_width_;
-  Type type_;
-};
-
-inline uint8_t PackedType(BitWidth bit_width, Type type) {
-  return static_cast<uint8_t>(bit_width | (type << 2));
-}
-
-inline uint8_t NullPackedType() {
-  return PackedType(BIT_WIDTH_8, TYPE_NULL);
-}
-
-// Vector accessors.
-// Note: if you try to access outside of bounds, you get a Null value back
-// instead. Normally this would be an assert, but since this is "dynamically
-// typed" data, you may not want that (someone sends you a 2d vector and you
-// wanted 3d).
-// The Null converts seamlessly into a default value for any other type.
-// TODO(wvo): Could introduce an #ifdef that makes this into an assert?
-inline Reference Vector::operator[](size_t i) const  {
-  auto len = size();
-  if (i >= len) return Reference(nullptr, 1, NullPackedType());
-  auto packed_type = (data_ + len * byte_width_)[i];
-  auto elem = data_ + i * byte_width_;
-  return Reference(elem, byte_width_, packed_type);
-}
-
-inline Reference TypedVector::operator[](size_t i) const  {
-  auto len = size();
-  if (i >= len) return Reference(nullptr, 1, NullPackedType());
-  auto elem = data_ + i * byte_width_;
-  return Reference(elem, byte_width_, 1, type_);
-}
-
-inline Reference FixedTypedVector::operator[](size_t i) const  {
-  if (i >= len_) return Reference(nullptr, 1, NullPackedType());
-  auto elem = data_ + i * byte_width_;
-  return Reference(elem, byte_width_, 1, type_);
-}
-
-template<typename T> int KeyCompare(const void *key, const void *elem) {
-  auto str_elem = reinterpret_cast<const char *>(
-                    Indirect<T>(reinterpret_cast<const uint8_t *>(elem)));
-  auto skey = reinterpret_cast<const char *>(key);
-  return strcmp(skey, str_elem);
-}
-
-inline Reference Map::operator[](const char *key) const {
-  auto keys = Keys();
-  // We can't pass keys.byte_width_ to the comparison function, so we have
-  // to pick the right one ahead of time.
-  int (*comp)(const void *, const void *) = nullptr;
-  switch (keys.byte_width_) {
-    case 1: comp = KeyCompare<uint8_t>; break;
-    case 2: comp = KeyCompare<uint16_t>; break;
-    case 4: comp = KeyCompare<uint32_t>; break;
-    case 8: comp = KeyCompare<uint64_t>; break;
-  }
-  auto res = std::bsearch(key, keys.data_, keys.size(), keys.byte_width_, comp);
-  if (!res)
-    return Reference(nullptr, 1, NullPackedType());
-  auto i = (reinterpret_cast<uint8_t *>(res) - keys.data_) / keys.byte_width_;
-  return (*static_cast<const Vector *>(this))[i];
-}
-
-inline Reference Map::operator[](const std::string &key) const {
-  return (*this)[key.c_str()];
-}
-
-inline Reference GetRoot(const uint8_t *buffer, size_t size) {
-  // See Finish() below for the serialization counterpart of this.
-  // The root starts at the end of the buffer, so we parse backwards from there.
-  auto end = buffer + size;
-  auto byte_width = *--end;
-  auto packed_type = *--end;
-  end -= byte_width;  // The root data item.
-  return Reference(end, byte_width, packed_type);
-}
-
-inline Reference GetRoot(const std::vector<uint8_t> &buffer) {
-  return GetRoot(buffer.data(), buffer.size());
-}
-
-// Flags that configure how the Builder behaves.
-// The "Share" flags determine if the Builder automatically tries to pool
-// this type. Pooling can reduce the size of serialized data if there are
-// multiple maps of the same kind, at the expense of slightly slower
-// serialization (the cost of lookups) and more memory use (std::set).
-// By default this is on for keys, but off for strings.
-// Turn keys off if you have e.g. only one map.
-// Turn strings on if you expect many non-unique string values.
-// Additionally, sharing key vectors can save space if you have maps with
-// identical field populations.
-enum BuilderFlag {
-  BUILDER_FLAG_NONE = 0,
-  BUILDER_FLAG_SHARE_KEYS = 1,
-  BUILDER_FLAG_SHARE_STRINGS = 2,
-  BUILDER_FLAG_SHARE_KEYS_AND_STRINGS = 3,
-  BUILDER_FLAG_SHARE_KEY_VECTORS = 4,
-  BUILDER_FLAG_SHARE_ALL = 7,
-};
-
-class Builder FLATBUFFERS_FINAL_CLASS {
- public:
-  Builder(size_t initial_size = 256,
-          BuilderFlag flags = BUILDER_FLAG_SHARE_KEYS)
-      : buf_(initial_size), finished_(false), flags_(flags),
-        force_min_bit_width_(BIT_WIDTH_8), key_pool(KeyOffsetCompare(buf_)),
-        string_pool(StringOffsetCompare(buf_)) {
-    buf_.clear();
-  }
-
-  /// @brief Get the serialized buffer (after you call `Finish()`).
-  /// @return Returns a vector owned by this class.
-  const std::vector<uint8_t> &GetBuffer() const {
-    Finished();
-    return buf_;
-  }
-
-  // All value constructing functions below have two versions: one that
-  // takes a key (for placement inside a map) and one that doesn't (for inside
-  // vectors and elsewhere).
-
-  void Null() { stack_.push_back(Value()); }
-  void Null(const char *key) { Key(key); Null(); }
-
-  void Int(int64_t i) { stack_.push_back(Value(i, TYPE_INT, WidthI(i))); }
-  void Int(const char *key, int64_t i) { Key(key); Int(i); }
-
-  void UInt(uint64_t u) { stack_.push_back(Value(u, TYPE_UINT, WidthU(u))); }
-  void UInt(const char *key, uint64_t u) { Key(key); Int(u); }
-
-  void Float(float f) { stack_.push_back(Value(f)); }
-  void Float(const char *key, float f) { Key(key); Float(f); }
-
-  void Double(double f) { stack_.push_back(Value(f)); }
-  void Double(const char *key, double d) { Key(key); Double(d); }
-
-  void Bool(bool b) { Int(static_cast<int64_t>(b)); }
-  void Bool(const char *key, bool b) { Key(key); Bool(b); }
-
-  void IndirectInt(int64_t i) {
-    PushIndirect(i, TYPE_INDIRECT_INT, WidthI(i));
-  }
-  void IndirectInt(const char *key, int64_t i) {
-    Key(key);
-    IndirectInt(i);
-  }
-
-  void IndirectUInt(uint64_t u) {
-    PushIndirect(u, TYPE_INDIRECT_UINT, WidthU(u));
-  }
-  void IndirectUInt(const char *key, uint64_t u) {
-    Key(key);
-    IndirectUInt(u);
-  }
-
-  void IndirectFloat(float f) {
-    PushIndirect(f, TYPE_INDIRECT_FLOAT, BIT_WIDTH_32);
-  }
-  void IndirectFloat(const char *key, float f) {
-    Key(key);
-    IndirectFloat(f);
-  }
-
-  void IndirectDouble(double f) {
-    PushIndirect(f, TYPE_INDIRECT_FLOAT, WidthF(f));
-  }
-  void IndirectDouble(const char *key, double d) {
-    Key(key);
-    IndirectDouble(d);
-  }
-
-  size_t Key(const char *str, size_t len) {
-    auto sloc = buf_.size();
-    WriteBytes(str, len + 1);
-    if (flags_ & BUILDER_FLAG_SHARE_KEYS) {
-      auto it = key_pool.find(sloc);
-      if (it != key_pool.end()) {
-        // Already in the buffer. Remove key we just serialized, and use
-        // existing offset instead.
-        buf_.resize(sloc);
-        sloc = *it;
-      } else {
-        key_pool.insert(sloc);
-      }
-    }
-    stack_.push_back(Value(static_cast<uint64_t>(sloc), TYPE_KEY, BIT_WIDTH_8));
-    return sloc;
-  }
-
-  size_t Key(const char *str) { return Key(str, strlen(str)); }
-  size_t Key(const std::string &str) { return Key(str.c_str(), str.size()); }
-
-  size_t String(const char *str, size_t len) {
-    auto reset_to = buf_.size();
-    auto sloc = CreateBlob(str, len, 1, TYPE_STRING);
-    if (flags_ & BUILDER_FLAG_SHARE_STRINGS) {
-      StringOffset so(sloc, len);
-      auto it = string_pool.find(so);
-      if (it != string_pool.end()) {
-        // Already in the buffer. Remove string we just serialized, and use
-        // existing offset instead.
-        buf_.resize(reset_to);
-        sloc = it->first;
-        stack_.back().u_ = sloc;
-      } else {
-        string_pool.insert(so);
-      }
-    }
-    return sloc;
-  }
-  size_t String(const char *str) {
-    return String(str, strlen(str));
-  }
-  size_t String(const std::string &str) {
-    return String(str.c_str(), str.size());
-  }
-  void String(const flexbuffers::String &str) {
-    String(str.c_str(), str.length());
-  }
-
-  void String(const char *key, const char *str) {
-    Key(key);
-    String(str);
-  }
-  void String(const char *key, const std::string &str) {
-    Key(key);
-    String(str);
-  }
-  void String(const char *key, const flexbuffers::String &str) {
-    Key(key);
-    String(str);
-  }
-
-  size_t Blob(const void *data, size_t len) {
-    return CreateBlob(data, len, 0, TYPE_BLOB);
-  }
-  size_t Blob(const std::vector<uint8_t> &v) {
-    return CreateBlob(v.data(), v.size(), 0, TYPE_BLOB);
-  }
-
-  // TODO(wvo): support all the FlexBuffer types (like flexbuffers::String),
-  // e.g. Vector etc. Also in overloaded versions.
-  // Also some FlatBuffers types?
-
-  size_t StartVector() { return stack_.size(); }
-  size_t StartVector(const char *key) { Key(key); return stack_.size(); }
-  size_t StartMap() { return stack_.size(); }
-  size_t StartMap(const char *key) { Key(key); return stack_.size(); }
-
-  // TODO(wvo): allow this to specify an aligment greater than the natural
-  // alignment.
-  size_t EndVector(size_t start, bool typed, bool fixed) {
-    auto vec = CreateVector(start, stack_.size() - start, 1, typed, fixed);
-    // Remove temp elements and return vector.
-    stack_.resize(start);
-    stack_.push_back(vec);
-    return static_cast<size_t>(vec.u_);
-  }
-
-  size_t EndMap(size_t start) {
-    // We should have interleaved keys and values on the stack.
-    // Make sure it is an even number:
-    auto len = stack_.size() - start;
-    assert(!(len & 1));
-    len /= 2;
-    // Make sure keys are all strings:
-    for (auto key = start; key < stack_.size(); key += 2) {
-      assert(stack_[key].type_ == TYPE_KEY);
-    }
-    // Now sort values, so later we can do a binary seach lookup.
-    // We want to sort 2 array elements at a time.
-    struct TwoValue { Value key; Value val; };
-    // TODO(wvo): strict aliasing?
-    // TODO(wvo): allow the caller to indicate the data is already sorted
-    // for maximum efficiency? With an assert to check sortedness to make sure
-    // we're not breaking binary search.
-    // Or, we can track if the map is sorted as keys are added which would be
-    // be quite cheap (cheaper than checking it here), so we can skip this
-    // step automatically when appliccable, and encourage people to write in
-    // sorted fashion.
-    // std::sort is typically already a lot faster on sorted data though.
-    auto dict = reinterpret_cast<TwoValue *>(stack_.data() + start);
-    std::sort(dict, dict + len,
-              [&](const TwoValue &a, const TwoValue &b) -> bool {
-      auto as = reinterpret_cast<const char *>(buf_.data() + a.key.u_);
-      auto bs = reinterpret_cast<const char *>(buf_.data() + b.key.u_);
-      auto comp = strcmp(as, bs);
-      // If this assertion hits, you've added two keys with the same value to
-      // this map.
-      // TODO: Have to check for pointer equality, as some sort implementation
-      // apparently call this function with the same element?? Why?
-      assert(comp || &a == &b);
-      return comp < 0;
-    });
-    // First create a vector out of all keys.
-    // TODO(wvo): if kBuilderFlagShareKeyVectors is true, see if we can share
-    // the first vector.
-    auto keys = CreateVector(start, len, 2, true, false);
-    auto vec = CreateVector(start + 1, len, 2, false, false, &keys);
-    // Remove temp elements and return map.
-    stack_.resize(start);
-    stack_.push_back(vec);
-    return static_cast<size_t>(vec.u_);
-  }
-
-  template<typename F> size_t Vector(F f) {
-    auto start = StartVector();
-    f();
-    return EndVector(start, false, false);
-  }
-  template<typename F> size_t Vector(const char *key, F f) {
-    auto start = StartVector(key);
-    f();
-    return EndVector(start, false, false);
-  }
-  template<typename T> void Vector(const T *elems, size_t len) {
-    if (std::is_scalar<T>::value) {
-      // This path should be a lot quicker and use less space.
-      ScalarVector(elems, len, false);
-    } else {
-      auto start = StartVector();
-      for (size_t i = 0; i < len; i++) Add(elems[i]);
-      EndVector(start, false, false);
-    }
-  }
-  template<typename T> void Vector(const char *key, const T *elems,
-                                   size_t len) {
-    Key(key);
-    Vector(elems, len);
-  }
-  template<typename T> void Vector(const std::vector<T> &vec) {
-    Vector(vec.data(), vec.size());
-  }
-
-  template<typename F> size_t TypedVector(F f) {
-    auto start = StartVector();
-    f();
-    return EndVector(start, true, false);
-  }
-  template<typename F> size_t TypedVector(const char *key, F f) {
-    auto start = StartVector(key);
-    f();
-    return EndVector(start, true, false);
-  }
-
-  template<typename T> size_t FixedTypedVector(const T *elems, size_t len) {
-    // We only support a few fixed vector lengths. Anything bigger use a
-    // regular typed vector.
-    assert(len >= 2 && len <= 4);
-    // And only scalar values.
-    assert(std::is_scalar<T>::value);
-    return ScalarVector(elems, len, true);
-  }
-
-  template<typename T> size_t FixedTypedVector(const char *key, const T *elems,
-                                               size_t len) {
-    Key(key);
-    return FixedTypedVector(elems, len);
-  }
-
-  template<typename F> size_t Map(F f) {
-    auto start = StartMap();
-    f();
-    return EndMap(start);
-  }
-  template<typename F> size_t Map(const char *key, F f) {
-    auto start = StartMap(key);
-    f();
-    return EndMap(start);
-  }
-  template<typename T> void Map(const std::map<std::string, T> &map) {
-    auto start = StartMap();
-    for (auto it = map.begin(); it != map.end(); ++it)
-      Add(it->first.c_str(), it->second);
-    EndMap(start);
-  }
-
-  // Overloaded Add that tries to call the correct function above.
-  void Add(int8_t i) { Int(i); }
-  void Add(int16_t i) { Int(i); }
-  void Add(int32_t i) { Int(i); }
-  void Add(int64_t i) { Int(i); }
-  void Add(uint8_t u) { UInt(u); }
-  void Add(uint16_t u) { UInt(u); }
-  void Add(uint32_t u) { UInt(u); }
-  void Add(uint64_t u) { UInt(u); }
-  void Add(float f) { Float(f); }
-  void Add(double d) { Double(d); }
-  void Add(bool b) { Bool(b); }
-  void Add(const char *str) { String(str); }
-  void Add(const std::string &str) { String(str); }
-  void Add(const flexbuffers::String &str) { String(str); }
-
-  template<typename T> void Add(const std::vector<T> &vec) {
-    Vector(vec);
-  }
-
-  template<typename T> void Add(const char *key, const T &t) {
-    Key(key);
-    Add(t);
-  }
-
-  template<typename T> void Add(const std::map<std::string, T> &map) {
-    Map(map);
-  }
-
-  template<typename T> void operator+=(const T &t) {
-    Add(t);
-  }
-
-  // This function is useful in combination with the Mutate* functions above.
-  // It forces elements of vectors and maps to have a minimum size, such that
-  // they can later be updated without failing.
-  // Call with no arguments to reset.
-  void ForceMinimumBitWidth(BitWidth bw = BIT_WIDTH_8) {
-    force_min_bit_width_ = bw;
-  }
-
-  void Finish() {
-    // If you hit this assert, you likely have objects that were never included
-    // in a parent. You need to have exactly one root to finish a buffer.
-    // Check your Start/End calls are matched, and all objects are inside
-    // some other object.
-    assert(stack_.size() == 1);
-
-    // Write root value.
-    auto byte_width = Align(stack_[0].ElemWidth(buf_.size(), 0));
-    WriteAny(stack_[0], byte_width);
-    // Write root type.
-    Write(stack_[0].StoredPackedType(), 1);
-    // Write root size. Normally determined by parent, but root has no parent :)
-    Write(byte_width, 1);
-
-    finished_ = true;
-  }
-
- private:
-  void Finished() const {
-    // If you get this assert, you're attempting to get access a buffer
-    // which hasn't been finished yet. Be sure to call
-    // Builder::Finish with your root object.
-    assert(finished_);
-  }
-
-  // Align to prepare for writing a scalar with a certain size.
-  uint8_t Align(BitWidth alignment) {
-    auto byte_width = 1U << alignment;
-    buf_.insert(buf_.end(), flatbuffers::PaddingBytes(buf_.size(), byte_width),
-                0);
-    return static_cast<uint8_t>(byte_width);
-  }
-
-  void WriteBytes(const void *val, size_t size) {
-    buf_.insert(buf_.end(),
-                reinterpret_cast<const uint8_t *>(val),
-                reinterpret_cast<const uint8_t *>(val) + size);
-  }
-
-  template<typename T> void Write(T val, size_t byte_width) {
-    assert(sizeof(T) >= byte_width);
-    val = flatbuffers::EndianScalar(val);
-    WriteBytes(&val, byte_width);
-  }
-
-  void WriteDouble(double f, uint8_t byte_width) {
-    switch (byte_width) {
-      case 8: Write(f, byte_width); break;
-      case 4: Write(static_cast<float>(f), byte_width); break;
-      //case 2: Write(static_cast<half>(f), byte_width); break;
-      //case 1: Write(static_cast<quarter>(f), byte_width); break;
-      default: assert(0);
-    }
-  }
-
-  void WriteOffset(uint64_t o, uint8_t byte_width) {
-    auto reloff = buf_.size() - o;
-    assert(reloff < 1ULL << (byte_width * 8) || byte_width == 8);
-    Write(reloff, byte_width);
-  }
-
-  template<typename T> void PushIndirect(T val, Type type, BitWidth bit_width) {
-    auto byte_width = Align(bit_width);
-    auto iloc = buf_.size();
-    Write(val, byte_width);
-    stack_.push_back(Value(static_cast<uint64_t>(iloc), type, bit_width));
-  }
-
-  static BitWidth WidthB(size_t byte_width) {
-    switch (byte_width) {
-      case 1: return BIT_WIDTH_8;
-      case 2: return BIT_WIDTH_16;
-      case 4: return BIT_WIDTH_32;
-      case 8: return BIT_WIDTH_64;
-      default: assert(false); return BIT_WIDTH_64;
-    }
-  }
-
-  template<typename T> static Type GetScalarType() {
-    assert(std::is_scalar<T>::value);
-    return std::is_floating_point<T>::value
-        ? TYPE_FLOAT
-        : (std::is_unsigned<T>::value ? TYPE_UINT : TYPE_INT);
-  }
-
-  struct Value {
-    union {
-      int64_t i_;
-      uint64_t u_;
-      double f_;
-    };
-
-    Type type_;
-
-    // For scalars: of itself, for vector: of its elements, for string: length.
-    BitWidth min_bit_width_;
-
-    Value() : i_(0), type_(TYPE_NULL), min_bit_width_(BIT_WIDTH_8) {}
-
-    Value(int64_t i, Type t, BitWidth bw)
-      : i_(i), type_(t), min_bit_width_(bw) {}
-    Value(uint64_t u, Type t, BitWidth bw)
-      : u_(u), type_(t), min_bit_width_(bw) {}
-
-    Value(float f)
-      : f_(f), type_(TYPE_FLOAT), min_bit_width_(BIT_WIDTH_32) {}
-    Value(double f)
-      : f_(f), type_(TYPE_FLOAT), min_bit_width_(WidthF(f)) {}
-
-    uint8_t StoredPackedType(BitWidth parent_bit_width_= BIT_WIDTH_8) const {
-      return PackedType(StoredWidth(parent_bit_width_), type_);
-    }
-
-    BitWidth ElemWidth(size_t buf_size, size_t elem_index) const {
-      if (IsInline(type_)) {
-        return min_bit_width_;
-      } else {
-        // We have an absolute offset, but want to store a relative offset
-        // elem_index elements beyond the current buffer end. Since whether
-        // the relative offset fits in a certain byte_width depends on
-        // the size of the elements before it (and their alignment), we have
-        // to test for each size in turn.
-        for (size_t byte_width = 1;
-             byte_width <= sizeof(flatbuffers::largest_scalar_t);
-             byte_width *= 2) {
-          // Where are we going to write this offset?
-          auto offset_loc =
-            buf_size +
-            flatbuffers::PaddingBytes(buf_size, byte_width) +
-            elem_index * byte_width;
-          // Compute relative offset.
-          auto offset = offset_loc - u_;
-          // Does it fit?
-          auto bit_width = WidthU(offset);
-          if (static_cast<size_t>(static_cast<size_t>(1U) << bit_width) == byte_width)
-            return bit_width;
-        }
-        assert(false);  // Must match one of the sizes above.
-        return BIT_WIDTH_64;
-      }
-    }
-
-    BitWidth StoredWidth(BitWidth parent_bit_width_ = BIT_WIDTH_8) const {
-      if (IsInline(type_)) {
-          return std::max(min_bit_width_, parent_bit_width_);
-      } else {
-          return min_bit_width_;
-      }
-    }
-  };
-
-  void WriteAny(const Value &val, uint8_t byte_width) {
-    switch (val.type_) {
-      case TYPE_NULL:
-      case TYPE_INT:
-        Write(val.i_, byte_width);
-        break;
-      case TYPE_UINT:
-        Write(val.u_, byte_width);
-        break;
-      case TYPE_FLOAT:
-        WriteDouble(val.f_, byte_width);
-        break;
-      default:
-        WriteOffset(val.u_, byte_width);
-        break;
-    }
-  }
-
-  size_t CreateBlob(const void *data, size_t len, size_t trailing, Type type) {
-    auto bit_width = WidthU(len);
-    auto byte_width = Align(bit_width);
-    Write<uint64_t>(len, byte_width);
-    auto sloc = buf_.size();
-    WriteBytes(data, len + trailing);
-    stack_.push_back(Value(static_cast<uint64_t>(sloc), type, bit_width));
-    return sloc;
-  }
-
-  template<typename T> size_t ScalarVector(const T *elems, size_t len,
-                                           bool fixed) {
-    auto vector_type = GetScalarType<T>();
-    auto byte_width = sizeof(T);
-    auto bit_width = WidthB(byte_width);
-    // If you get this assert, you're trying to write a vector with a size
-    // field that is bigger than the scalars you're trying to write (e.g. a
-    // byte vector > 255 elements). For such types, write a "blob" instead.
-    // TODO: instead of asserting, could write vector with larger elements
-    // instead, though that would be wasteful.
-    assert(WidthU(len) <= bit_width);
-    if (!fixed) Write<uint64_t>(len, byte_width);
-    auto vloc = buf_.size();
-    for (size_t i = 0; i < len; i++) Write(elems[i], byte_width);
-    stack_.push_back(Value(static_cast<uint64_t>(vloc),
-                           ToTypedVector(vector_type, fixed ? len : 0),
-                           bit_width));
-    return vloc;
-  }
-
-  Value CreateVector(size_t start, size_t vec_len, size_t step, bool typed,
-                     bool fixed, const Value *keys = nullptr) {
-    // Figure out smallest bit width we can store this vector with.
-    auto bit_width = std::max(force_min_bit_width_, WidthU(vec_len));
-    auto prefix_elems = 1;
-    if (keys) {
-      // If this vector is part of a map, we will pre-fix an offset to the keys
-      // to this vector.
-      bit_width = std::max(bit_width, keys->ElemWidth(buf_.size(), 0));
-      prefix_elems += 2;
-    }
-    Type vector_type = TYPE_KEY;
-    // Check bit widths and types for all elements.
-    for (size_t i = start; i < stack_.size(); i += step) {
-      auto elem_width = stack_[i].ElemWidth(buf_.size(), i + prefix_elems);
-      bit_width = std::max(bit_width, elem_width);
-      if (typed) {
-        if (i == start) {
-          vector_type = stack_[i].type_;
-        } else {
-          // If you get this assert, you are writing a typed vector with
-          // elements that are not all the same type.
-          assert(vector_type == stack_[i].type_);
-        }
-      }
-    }
-    // If you get this assert, your fixed types are not one of:
-    // Int / UInt / Float / Key.
-    assert(IsTypedVectorElementType(vector_type));
-    auto byte_width = Align(bit_width);
-    // Write vector. First the keys width/offset if available, and size.
-    if (keys) {
-      WriteOffset(keys->u_, byte_width);
-      Write<uint64_t>(1U << keys->min_bit_width_, byte_width);
-    }
-    if (!fixed) Write<uint64_t>(vec_len, byte_width);
-    // Then the actual data.
-    auto vloc = buf_.size();
-    for (size_t i = start; i < stack_.size(); i += step) {
-      WriteAny(stack_[i], byte_width);
-    }
-    // Then the types.
-    if (!typed) {
-      for (size_t i = start; i < stack_.size(); i += step) {
-        buf_.push_back(stack_[i].StoredPackedType(bit_width));
-      }
-    }
-    return Value(static_cast<uint64_t>(vloc), keys
-                         ? TYPE_MAP
-                         : (typed
-                            ? ToTypedVector(vector_type, fixed ? vec_len : 0)
-                            : TYPE_VECTOR),
-                       bit_width);
-  }
-
-  // You shouldn't really be copying instances of this class.
-  Builder(const Builder &);
-  Builder &operator=(const Builder &);
-
-  std::vector<uint8_t> buf_;
-  std::vector<Value> stack_;
-
-  bool finished_;
-
-  BuilderFlag flags_;
-
-  BitWidth force_min_bit_width_;
-
-  struct KeyOffsetCompare {
-    KeyOffsetCompare(const std::vector<uint8_t> &buf) : buf_(&buf) {}
-    bool operator() (size_t a, size_t b) const {
-      auto stra = reinterpret_cast<const char *>(buf_->data() + a);
-      auto strb = reinterpret_cast<const char *>(buf_->data() + b);
-      return strcmp(stra, strb) < 0;
-    }
-    const std::vector<uint8_t> *buf_;
-  };
-
-  typedef std::pair<size_t, size_t> StringOffset;
-  struct StringOffsetCompare {
-    StringOffsetCompare(const std::vector<uint8_t> &buf) : buf_(&buf) {}
-    bool operator() (const StringOffset &a, const StringOffset &b) const {
-      auto stra = reinterpret_cast<const char *>(buf_->data() + a.first);
-      auto strb = reinterpret_cast<const char *>(buf_->data() + b.first);
-      return strncmp(stra, strb, std::min(a.second, b.second) + 1) < 0;
-    }
-    const std::vector<uint8_t> *buf_;
-  };
-
-  typedef std::set<size_t, KeyOffsetCompare> KeyOffsetMap;
-  typedef std::set<StringOffset, StringOffsetCompare> StringOffsetMap;
-
-  KeyOffsetMap key_pool;
-  StringOffsetMap string_pool;
-};
-
-}  // namespace flexbuffers
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-#endif  // FLATBUFFERS_FLEXBUFFERS_H_
diff --git a/third_party/flatbuffers/include/flatbuffers/grpc.h b/third_party/flatbuffers/include/flatbuffers/grpc.h
deleted file mode 100644
index 48ff3c8..0000000
--- a/third_party/flatbuffers/include/flatbuffers/grpc.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FLATBUFFERS_GRPC_H_
-#define FLATBUFFERS_GRPC_H_
-
-// Helper functionality to glue FlatBuffers and GRPC.
-
-#include "grpc++/support/byte_buffer.h"
-#include "grpc/byte_buffer_reader.h"
-
-namespace grpc {
-
-template <class T>
-class SerializationTraits<T, typename std::enable_if<std::is_base_of<
-                                 flatbuffers::BufferRefBase, T>::value>::type> {
- public:
-  // The type we're passing here is a BufferRef, which is already serialized
-  // FlatBuffer data, which then gets passed to GRPC.
-  static grpc::Status Serialize(const T& msg,
-                                grpc_byte_buffer **buffer,
-                                bool *own_buffer) {
-    // TODO(wvo): make this work without copying.
-    auto slice = gpr_slice_from_copied_buffer(
-                   reinterpret_cast<const char *>(msg.buf), msg.len);
-    *buffer = grpc_raw_byte_buffer_create(&slice, 1);
-    *own_buffer = true;
-    return grpc::Status();
-  }
-
-  // There is no de-serialization step in FlatBuffers, so we just receive
-  // the data from GRPC.
-  static grpc::Status Deserialize(grpc_byte_buffer *buffer, T *msg) {
-    // TODO(wvo): make this more efficient / zero copy when possible.
-    auto len = grpc_byte_buffer_length(buffer);
-    msg->buf = reinterpret_cast<uint8_t *>(malloc(len));
-    msg->len = static_cast<flatbuffers::uoffset_t>(len);
-    msg->must_free = true;
-    uint8_t *current = msg->buf;
-    grpc_byte_buffer_reader reader;
-    grpc_byte_buffer_reader_init(&reader, buffer);
-    gpr_slice slice;
-    while (grpc_byte_buffer_reader_next(&reader, &slice)) {
-      memcpy(current, GPR_SLICE_START_PTR(slice), GPR_SLICE_LENGTH(slice));
-      current += GPR_SLICE_LENGTH(slice);
-      gpr_slice_unref(slice);
-    }
-    GPR_ASSERT(current == msg->buf + msg->len);
-    grpc_byte_buffer_reader_destroy(&reader);
-    grpc_byte_buffer_destroy(buffer);
-    return grpc::Status();
-  }
-};
-
-}  // namespace grpc;
-
-#endif  // FLATBUFFERS_GRPC_H_
diff --git a/third_party/flatbuffers/include/flatbuffers/hash.h b/third_party/flatbuffers/include/flatbuffers/hash.h
deleted file mode 100644
index 9ae37e5..0000000
--- a/third_party/flatbuffers/include/flatbuffers/hash.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2015 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FLATBUFFERS_HASH_H_
-#define FLATBUFFERS_HASH_H_
-
-#include <cstdint>
-#include <cstring>
-
-#include "flatbuffers/flatbuffers.h"
-
-namespace flatbuffers {
-
-template <typename T>
-struct FnvTraits {
-  static const T kFnvPrime;
-  static const T kOffsetBasis;
-};
-
-template <>
-struct FnvTraits<uint32_t> {
-  static const uint32_t kFnvPrime = 0x01000193;
-  static const uint32_t kOffsetBasis = 0x811C9DC5;
-};
-
-template <>
-struct FnvTraits<uint64_t> {
-  static const uint64_t kFnvPrime = 0x00000100000001b3ULL;
-  static const uint64_t kOffsetBasis = 0xcbf29ce484222645ULL;
-};
-
-template <typename T>
-T HashFnv1(const char *input) {
-  T hash = FnvTraits<T>::kOffsetBasis;
-  for (const char *c = input; *c; ++c) {
-    hash *= FnvTraits<T>::kFnvPrime;
-    hash ^= static_cast<unsigned char>(*c);
-  }
-  return hash;
-}
-
-template <typename T>
-T HashFnv1a(const char *input) {
-  T hash = FnvTraits<T>::kOffsetBasis;
-  for (const char *c = input; *c; ++c) {
-    hash ^= static_cast<unsigned char>(*c);
-    hash *= FnvTraits<T>::kFnvPrime;
-  }
-  return hash;
-}
-
-template <typename T>
-struct NamedHashFunction {
-  const char *name;
-
-  typedef T (*HashFunction)(const char*);
-  HashFunction function;
-};
-
-const NamedHashFunction<uint32_t> kHashFunctions32[] = {
-  { "fnv1_32",  HashFnv1<uint32_t> },
-  { "fnv1a_32", HashFnv1a<uint32_t> },
-};
-
-const NamedHashFunction<uint64_t> kHashFunctions64[] = {
-  { "fnv1_64",  HashFnv1<uint64_t> },
-  { "fnv1a_64", HashFnv1a<uint64_t> },
-};
-
-inline NamedHashFunction<uint32_t>::HashFunction FindHashFunction32(
-    const char *name) {
-  std::size_t size = sizeof(kHashFunctions32) / sizeof(kHashFunctions32[0]);
-  for (std::size_t i = 0; i < size; ++i) {
-    if (std::strcmp(name, kHashFunctions32[i].name) == 0) {
-      return kHashFunctions32[i].function;
-    }
-  }
-  return nullptr;
-}
-
-inline NamedHashFunction<uint64_t>::HashFunction FindHashFunction64(
-    const char *name) {
-  std::size_t size = sizeof(kHashFunctions64) / sizeof(kHashFunctions64[0]);
-  for (std::size_t i = 0; i < size; ++i) {
-    if (std::strcmp(name, kHashFunctions64[i].name) == 0) {
-      return kHashFunctions64[i].function;
-    }
-  }
-  return nullptr;
-}
-
-}  // namespace flatbuffers
-
-#endif  // FLATBUFFERS_HASH_H_
diff --git a/third_party/flatbuffers/include/flatbuffers/idl.h b/third_party/flatbuffers/include/flatbuffers/idl.h
deleted file mode 100644
index 94de836..0000000
--- a/third_party/flatbuffers/include/flatbuffers/idl.h
+++ /dev/null
@@ -1,755 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FLATBUFFERS_IDL_H_
-#define FLATBUFFERS_IDL_H_
-
-#include <map>
-#include <stack>
-#include <memory>
-#include <functional>
-
-#include "flatbuffers/flatbuffers.h"
-#include "flatbuffers/hash.h"
-#include "flatbuffers/reflection.h"
-
-// This file defines the data types representing a parsed IDL (Interface
-// Definition Language) / schema file.
-
-namespace flatbuffers {
-
-// The order of these matters for Is*() functions below.
-// Additionally, Parser::ParseType assumes bool..string is a contiguous range
-// of type tokens.
-#define FLATBUFFERS_GEN_TYPES_SCALAR(TD) \
-  TD(NONE,   "",       uint8_t,  byte,   byte,    byte,   uint8) \
-  TD(UTYPE,  "",       uint8_t,  byte,   byte,    byte,   uint8) /* begin scalar/int */ \
-  TD(BOOL,   "bool",   uint8_t,  boolean,byte,    bool,   bool) \
-  TD(CHAR,   "byte",   int8_t,   byte,   int8,    sbyte,  int8) \
-  TD(UCHAR,  "ubyte",  uint8_t,  byte,   byte,    byte,   uint8) \
-  TD(SHORT,  "short",  int16_t,  short,  int16,   short,  int16) \
-  TD(USHORT, "ushort", uint16_t, short,  uint16,  ushort, uint16) \
-  TD(INT,    "int",    int32_t,  int,    int32,   int,    int32) \
-  TD(UINT,   "uint",   uint32_t, int,    uint32,  uint,   uint32) \
-  TD(LONG,   "long",   int64_t,  long,   int64,   long,   int64) \
-  TD(ULONG,  "ulong",  uint64_t, long,   uint64,  ulong,  uint64) /* end int */ \
-  TD(FLOAT,  "float",  float,    float,  float32, float,  float32) /* begin float */ \
-  TD(DOUBLE, "double", double,   double, float64, double, float64) /* end float/scalar */
-#define FLATBUFFERS_GEN_TYPES_POINTER(TD) \
-  TD(STRING, "string", Offset<void>, int, int, StringOffset, int) \
-  TD(VECTOR, "",       Offset<void>, int, int, VectorOffset, int) \
-  TD(STRUCT, "",       Offset<void>, int, int, int, int) \
-  TD(UNION,  "",       Offset<void>, int, int, int, int)
-
-// The fields are:
-// - enum
-// - FlatBuffers schema type.
-// - C++ type.
-// - Java type.
-// - Go type.
-// - C# / .Net type.
-// - Python type.
-
-// using these macros, we can now write code dealing with types just once, e.g.
-
-/*
-switch (type) {
-  #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE) \
-    case BASE_TYPE_ ## ENUM: \
-      // do something specific to CTYPE here
-    FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-  #undef FLATBUFFERS_TD
-}
-*/
-
-#define FLATBUFFERS_GEN_TYPES(TD) \
-        FLATBUFFERS_GEN_TYPES_SCALAR(TD) \
-        FLATBUFFERS_GEN_TYPES_POINTER(TD)
-
-// Create an enum for all the types above.
-#ifdef __GNUC__
-__extension__  // Stop GCC complaining about trailing comma with -Wpendantic.
-#endif
-enum BaseType {
-  #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE) \
-      BASE_TYPE_ ## ENUM,
-    FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-  #undef FLATBUFFERS_TD
-};
-
-#define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE) \
-    static_assert(sizeof(CTYPE) <= sizeof(largest_scalar_t), \
-                  "define largest_scalar_t as " #CTYPE);
-  FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-#undef FLATBUFFERS_TD
-
-inline bool IsScalar (BaseType t) { return t >= BASE_TYPE_UTYPE &&
-                                           t <= BASE_TYPE_DOUBLE; }
-inline bool IsInteger(BaseType t) { return t >= BASE_TYPE_UTYPE &&
-                                           t <= BASE_TYPE_ULONG; }
-inline bool IsFloat  (BaseType t) { return t == BASE_TYPE_FLOAT ||
-                                           t == BASE_TYPE_DOUBLE; }
-inline bool IsLong   (BaseType t) { return t == BASE_TYPE_LONG ||
-                                           t == BASE_TYPE_ULONG; }
-
-extern const char *const kTypeNames[];
-extern const char kTypeSizes[];
-
-inline size_t SizeOf(BaseType t) {
-  return kTypeSizes[t];
-}
-
-struct StructDef;
-struct EnumDef;
-class Parser;
-
-// Represents any type in the IDL, which is a combination of the BaseType
-// and additional information for vectors/structs_.
-struct Type {
-  explicit Type(BaseType _base_type = BASE_TYPE_NONE,
-                StructDef *_sd = nullptr, EnumDef *_ed = nullptr)
-    : base_type(_base_type),
-      element(BASE_TYPE_NONE),
-      struct_def(_sd),
-      enum_def(_ed)
-  {}
-
-  bool operator==(const Type &o) {
-    return base_type == o.base_type && element == o.element &&
-           struct_def == o.struct_def && enum_def == o.enum_def;
-  }
-
-  Type VectorType() const { return Type(element, struct_def, enum_def); }
-
-  Offset<reflection::Type> Serialize(FlatBufferBuilder *builder) const;
-
-  BaseType base_type;
-  BaseType element;       // only set if t == BASE_TYPE_VECTOR
-  StructDef *struct_def;  // only set if t or element == BASE_TYPE_STRUCT
-  EnumDef *enum_def;      // set if t == BASE_TYPE_UNION / BASE_TYPE_UTYPE,
-                          // or for an integral type derived from an enum.
-};
-
-// Represents a parsed scalar value, it's type, and field offset.
-struct Value {
-  Value() : constant("0"), offset(static_cast<voffset_t>(
-                                ~(static_cast<voffset_t>(0U)))) {}
-  Type type;
-  std::string constant;
-  voffset_t offset;
-};
-
-// Helper class that retains the original order of a set of identifiers and
-// also provides quick lookup.
-template<typename T> class SymbolTable {
- public:
-  ~SymbolTable() {
-    for (auto it = vec.begin(); it != vec.end(); ++it) {
-      delete *it;
-    }
-  }
-
-  bool Add(const std::string &name, T *e) {
-    vec.emplace_back(e);
-    auto it = dict.find(name);
-    if (it != dict.end()) return true;
-    dict[name] = e;
-    return false;
-  }
-
-  void Move(const std::string &oldname, const std::string &newname) {
-    auto it = dict.find(oldname);
-    if (it != dict.end()) {
-      auto obj = it->second;
-      dict.erase(it);
-      dict[newname] = obj;
-    } else {
-      assert(false);
-    }
-  }
-
-  T *Lookup(const std::string &name) const {
-    auto it = dict.find(name);
-    return it == dict.end() ? nullptr : it->second;
-  }
-
- public:
-  std::map<std::string, T *> dict;      // quick lookup
-  std::vector<T *> vec;  // Used to iterate in order of insertion
-};
-
-// A name space, as set in the schema.
-struct Namespace {
-  std::vector<std::string> components;
-
-  // Given a (potentally unqualified) name, return the "fully qualified" name
-  // which has a full namespaced descriptor.
-  // With max_components you can request less than the number of components
-  // the current namespace has.
-  std::string GetFullyQualifiedName(const std::string &name,
-                                    size_t max_components = 1000) const;
-};
-
-// Base class for all definition types (fields, structs_, enums_).
-struct Definition {
-  Definition() : generated(false), defined_namespace(nullptr),
-                 serialized_location(0), index(-1) {}
-
-  flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<
-    reflection::KeyValue>>>
-      SerializeAttributes(FlatBufferBuilder *builder,
-                          const Parser &parser) const;
-
-  std::string name;
-  std::string file;
-  std::vector<std::string> doc_comment;
-  SymbolTable<Value> attributes;
-  bool generated;  // did we already output code for this definition?
-  Namespace *defined_namespace;  // Where it was defined.
-
-  // For use with Serialize()
-  uoffset_t serialized_location;
-  int index;  // Inside the vector it is stored.
-};
-
-struct FieldDef : public Definition {
-  FieldDef() : deprecated(false), required(false), key(false), padding(0) {}
-
-  Offset<reflection::Field> Serialize(FlatBufferBuilder *builder, uint16_t id,
-                                      const Parser &parser) const;
-
-  Value value;
-  bool deprecated; // Field is allowed to be present in old data, but can't be
-                   // written in new data nor accessed in new code.
-  bool required;   // Field must always be present.
-  bool key;        // Field functions as a key for creating sorted vectors.
-  bool native_inline;  // Field will be defined inline (instead of as a pointer)
-                       // for native tables if field is a struct.
-  size_t padding;  // Bytes to always pad after this field.
-};
-
-struct StructDef : public Definition {
-  StructDef()
-    : fixed(false),
-      predecl(true),
-      sortbysize(true),
-      has_key(false),
-      minalign(1),
-      bytesize(0)
-    {}
-
-  void PadLastField(size_t min_align) {
-    auto padding = PaddingBytes(bytesize, min_align);
-    bytesize += padding;
-    if (fields.vec.size()) fields.vec.back()->padding = padding;
-  }
-
-  Offset<reflection::Object> Serialize(FlatBufferBuilder *builder,
-                                       const Parser &parser) const;
-
-  SymbolTable<FieldDef> fields;
-  bool fixed;       // If it's struct, not a table.
-  bool predecl;     // If it's used before it was defined.
-  bool sortbysize;  // Whether fields come in the declaration or size order.
-  bool has_key;     // It has a key field.
-  size_t minalign;  // What the whole object needs to be aligned to.
-  size_t bytesize;  // Size if fixed.
-};
-
-inline bool IsStruct(const Type &type) {
-  return type.base_type == BASE_TYPE_STRUCT && type.struct_def->fixed;
-}
-
-inline size_t InlineSize(const Type &type) {
-  return IsStruct(type) ? type.struct_def->bytesize : SizeOf(type.base_type);
-}
-
-inline size_t InlineAlignment(const Type &type) {
-  return IsStruct(type) ? type.struct_def->minalign : SizeOf(type.base_type);
-}
-
-struct EnumVal {
-  EnumVal(const std::string &_name, int64_t _val)
-    : name(_name), value(_val) {}
-
-  Offset<reflection::EnumVal> Serialize(FlatBufferBuilder *builder) const;
-
-  std::string name;
-  std::vector<std::string> doc_comment;
-  int64_t value;
-  Type union_type;
-};
-
-struct EnumDef : public Definition {
-  EnumDef() : is_union(false), uses_type_aliases(false) {}
-
-  EnumVal *ReverseLookup(int enum_idx, bool skip_union_default = true) {
-    for (auto it = vals.vec.begin() + static_cast<int>(is_union &&
-                                                       skip_union_default);
-             it != vals.vec.end(); ++it) {
-      if ((*it)->value == enum_idx) {
-        return *it;
-      }
-    }
-    return nullptr;
-  }
-
-  Offset<reflection::Enum> Serialize(FlatBufferBuilder *builder,
-                                     const Parser &parser) const;
-
-  SymbolTable<EnumVal> vals;
-  bool is_union;
-  bool uses_type_aliases;
-  Type underlying_type;
-};
-
-inline bool EqualByName(const Type &a, const Type &b) {
-  return a.base_type == b.base_type && a.element == b.element &&
-         (a.struct_def == b.struct_def ||
-          a.struct_def->name == b.struct_def->name) &&
-         (a.enum_def == b.enum_def ||
-          a.enum_def->name == b.enum_def->name);
-}
-
-struct RPCCall {
-  std::string name;
-  SymbolTable<Value> attributes;
-  StructDef *request, *response;
-};
-
-struct ServiceDef : public Definition {
-  SymbolTable<RPCCall> calls;
-};
-
-// Container of options that may apply to any of the source/text generators.
-struct IDLOptions {
-  bool strict_json;
-  bool skip_js_exports;
-  bool use_goog_js_export_format;
-  bool output_default_scalars_in_json;
-  int indent_step;
-  bool output_enum_identifiers;
-  bool prefixed_enums;
-  bool scoped_enums;
-  bool include_dependence_headers;
-  bool mutable_buffer;
-  bool one_file;
-  bool proto_mode;
-  bool generate_all;
-  bool skip_unexpected_fields_in_json;
-  bool generate_name_strings;
-  bool escape_proto_identifiers;
-  bool generate_object_based_api;
-  std::string cpp_object_api_pointer_type;
-  std::string cpp_object_api_string_type;
-  bool union_value_namespacing;
-  bool allow_non_utf8;
-  std::string include_prefix;
-  bool binary_schema_comments;
-  bool skip_flatbuffers_import;
-  std::string go_namespace;
-  bool reexport_ts_modules;
-
-  // Possible options for the more general generator below.
-  enum Language {
-    kJava   = 1 << 0,
-    kCSharp = 1 << 1,
-    kGo     = 1 << 2,
-    kCpp    = 1 << 3,
-    kJs     = 1 << 4,
-    kPython = 1 << 5,
-    kPhp    = 1 << 6,
-    kJson   = 1 << 7,
-    kBinary = 1 << 8,
-    kTs     = 1 << 9,
-    kMAX
-  };
-
-  Language lang;
-
-  // The corresponding language bit will be set if a language is included
-  // for code generation.
-  unsigned long lang_to_generate;
-
-  IDLOptions()
-    : strict_json(false),
-      skip_js_exports(false),
-      use_goog_js_export_format(false),
-      output_default_scalars_in_json(false),
-      indent_step(2),
-      output_enum_identifiers(true), prefixed_enums(true), scoped_enums(false),
-      include_dependence_headers(true),
-      mutable_buffer(false),
-      one_file(false),
-      proto_mode(false),
-      generate_all(false),
-      skip_unexpected_fields_in_json(false),
-      generate_name_strings(false),
-      escape_proto_identifiers(false),
-      generate_object_based_api(false),
-      cpp_object_api_pointer_type("std::unique_ptr"),
-      union_value_namespacing(true),
-      allow_non_utf8(false),
-      binary_schema_comments(false),
-      skip_flatbuffers_import(false),
-      reexport_ts_modules(true),
-      lang(IDLOptions::kJava),
-      lang_to_generate(0) {}
-};
-
-// This encapsulates where the parser is in the current source file.
-struct ParserState {
-  ParserState() : cursor_(nullptr), line_(1), token_(-1) {}
-
- protected:
-  const char *cursor_;
-  int line_;  // the current line being parsed
-  int token_;
-
-  std::string attribute_;
-  std::vector<std::string> doc_comment_;
-};
-
-// A way to make error propagation less error prone by requiring values to be
-// checked.
-// Once you create a value of this type you must either:
-// - Call Check() on it.
-// - Copy or assign it to another value.
-// Failure to do so leads to an assert.
-// This guarantees that this as return value cannot be ignored.
-class CheckedError {
- public:
-  explicit CheckedError(bool error)
-    : is_error_(error), has_been_checked_(false) {}
-
-  CheckedError &operator=(const CheckedError &other) {
-    is_error_ = other.is_error_;
-    has_been_checked_ = false;
-    other.has_been_checked_ = true;
-    return *this;
-  }
-
-  CheckedError(const CheckedError &other) {
-    *this = other;  // Use assignment operator.
-  }
-
-  ~CheckedError() { assert(has_been_checked_); }
-
-  bool Check() { has_been_checked_ = true; return is_error_; }
-
- private:
-  bool is_error_;
-  mutable bool has_been_checked_;
-};
-
-// Additionally, in GCC we can get these errors statically, for additional
-// assurance:
-#ifdef __GNUC__
-#define FLATBUFFERS_CHECKED_ERROR CheckedError \
-          __attribute__((warn_unused_result))
-#else
-#define FLATBUFFERS_CHECKED_ERROR CheckedError
-#endif
-
-class Parser : public ParserState {
- public:
-  explicit Parser(const IDLOptions &options = IDLOptions())
-    : root_struct_def_(nullptr),
-      opts(options),
-      source_(nullptr),
-      anonymous_counter(0) {
-    // Just in case none are declared:
-    namespaces_.push_back(new Namespace());
-    known_attributes_["deprecated"] = true;
-    known_attributes_["required"] = true;
-    known_attributes_["key"] = true;
-    known_attributes_["hash"] = true;
-    known_attributes_["id"] = true;
-    known_attributes_["force_align"] = true;
-    known_attributes_["bit_flags"] = true;
-    known_attributes_["original_order"] = true;
-    known_attributes_["nested_flatbuffer"] = true;
-    known_attributes_["csharp_partial"] = true;
-    known_attributes_["streaming"] = true;
-    known_attributes_["idempotent"] = true;
-    known_attributes_["cpp_type"] = true;
-    known_attributes_["cpp_ptr_type"] = true;
-    known_attributes_["cpp_str_type"] = true;
-    known_attributes_["native_inline"] = true;
-    known_attributes_["native_type"] = true;
-    known_attributes_["native_default"] = true;
-  }
-
-  ~Parser() {
-    for (auto it = namespaces_.begin(); it != namespaces_.end(); ++it) {
-      delete *it;
-    }
-  }
-
-  // Parse the string containing either schema or JSON data, which will
-  // populate the SymbolTable's or the FlatBufferBuilder above.
-  // include_paths is used to resolve any include statements, and typically
-  // should at least include the project path (where you loaded source_ from).
-  // include_paths must be nullptr terminated if specified.
-  // If include_paths is nullptr, it will attempt to load from the current
-  // directory.
-  // If the source was loaded from a file and isn't an include file,
-  // supply its name in source_filename.
-  bool Parse(const char *_source, const char **include_paths = nullptr,
-             const char *source_filename = nullptr);
-
-  // Set the root type. May override the one set in the schema.
-  bool SetRootType(const char *name);
-
-  // Mark all definitions as already having code generated.
-  void MarkGenerated();
-
-  // Get the files recursively included by the given file. The returned
-  // container will have at least the given file.
-  std::set<std::string> GetIncludedFilesRecursive(
-      const std::string &file_name) const;
-
-  // Fills builder_ with a binary version of the schema parsed.
-  // See reflection/reflection.fbs
-  void Serialize();
-
-  // Checks that the schema represented by this parser is a safe evolution
-  // of the schema provided. Returns non-empty error on any problems.
-  std::string ConformTo(const Parser &base);
-
-  FLATBUFFERS_CHECKED_ERROR CheckInRange(int64_t val, int64_t min, int64_t max);
-
-private:
-  FLATBUFFERS_CHECKED_ERROR Error(const std::string &msg);
-  FLATBUFFERS_CHECKED_ERROR ParseHexNum(int nibbles, uint64_t *val);
-  FLATBUFFERS_CHECKED_ERROR Next();
-  FLATBUFFERS_CHECKED_ERROR SkipByteOrderMark();
-  bool Is(int t);
-  FLATBUFFERS_CHECKED_ERROR Expect(int t);
-  std::string TokenToStringId(int t);
-  EnumDef *LookupEnum(const std::string &id);
-  FLATBUFFERS_CHECKED_ERROR ParseNamespacing(std::string *id,
-                                             std::string *last);
-  FLATBUFFERS_CHECKED_ERROR ParseTypeIdent(Type &type);
-  FLATBUFFERS_CHECKED_ERROR ParseType(Type &type);
-  FLATBUFFERS_CHECKED_ERROR AddField(StructDef &struct_def,
-                                     const std::string &name, const Type &type,
-                                     FieldDef **dest);
-  FLATBUFFERS_CHECKED_ERROR ParseField(StructDef &struct_def);
-  FLATBUFFERS_CHECKED_ERROR ParseString(Value &val);
-  FLATBUFFERS_CHECKED_ERROR ParseAnyValue(Value &val, FieldDef *field,
-                                          size_t parent_fieldn,
-                                          const StructDef *parent_struct_def);
-  FLATBUFFERS_CHECKED_ERROR ParseTable(const StructDef &struct_def,
-                                       std::string *value, uoffset_t *ovalue);
-  void SerializeStruct(const StructDef &struct_def, const Value &val);
-  void AddVector(bool sortbysize, int count);
-  FLATBUFFERS_CHECKED_ERROR ParseVector(const Type &type, uoffset_t *ovalue);
-  FLATBUFFERS_CHECKED_ERROR ParseMetaData(SymbolTable<Value> *attributes);
-  FLATBUFFERS_CHECKED_ERROR TryTypedValue(int dtoken, bool check, Value &e,
-                                          BaseType req, bool *destmatch);
-  FLATBUFFERS_CHECKED_ERROR ParseHash(Value &e, FieldDef* field);
-  FLATBUFFERS_CHECKED_ERROR ParseSingleValue(Value &e);
-  FLATBUFFERS_CHECKED_ERROR ParseEnumFromString(Type &type, int64_t *result);
-  StructDef *LookupCreateStruct(const std::string &name,
-                                bool create_if_new = true,
-                                bool definition = false);
-  FLATBUFFERS_CHECKED_ERROR ParseEnum(bool is_union, EnumDef **dest);
-  FLATBUFFERS_CHECKED_ERROR ParseNamespace();
-  FLATBUFFERS_CHECKED_ERROR StartStruct(const std::string &name,
-                                        StructDef **dest);
-  FLATBUFFERS_CHECKED_ERROR ParseDecl();
-  FLATBUFFERS_CHECKED_ERROR ParseService();
-  FLATBUFFERS_CHECKED_ERROR ParseProtoFields(StructDef *struct_def,
-                                             bool isextend, bool inside_oneof);
-  FLATBUFFERS_CHECKED_ERROR ParseProtoOption();
-  FLATBUFFERS_CHECKED_ERROR ParseProtoKey();
-  FLATBUFFERS_CHECKED_ERROR ParseProtoDecl();
-  FLATBUFFERS_CHECKED_ERROR ParseProtoCurliesOrIdent();
-  FLATBUFFERS_CHECKED_ERROR ParseTypeFromProtoType(Type *type);
-  FLATBUFFERS_CHECKED_ERROR SkipAnyJsonValue();
-  FLATBUFFERS_CHECKED_ERROR SkipJsonObject();
-  FLATBUFFERS_CHECKED_ERROR SkipJsonArray();
-  FLATBUFFERS_CHECKED_ERROR SkipJsonString();
-  FLATBUFFERS_CHECKED_ERROR DoParse(const char *_source,
-                                    const char **include_paths,
-                                    const char *source_filename);
-  FLATBUFFERS_CHECKED_ERROR CheckClash(std::vector<FieldDef*> &fields,
-                                       StructDef *struct_def,
-                                       const char *suffix,
-                                       BaseType baseType);
-
- public:
-  SymbolTable<Type> types_;
-  SymbolTable<StructDef> structs_;
-  SymbolTable<EnumDef> enums_;
-  SymbolTable<ServiceDef> services_;
-  std::vector<Namespace *> namespaces_;
-  std::string error_;         // User readable error_ if Parse() == false
-
-  FlatBufferBuilder builder_;  // any data contained in the file
-  StructDef *root_struct_def_;
-  std::string file_identifier_;
-  std::string file_extension_;
-
-  std::map<std::string, bool> included_files_;
-  std::map<std::string, std::set<std::string>> files_included_per_file_;
-  std::vector<std::string> native_included_files_;
-
-  std::map<std::string, bool> known_attributes_;
-
-  IDLOptions opts;
-
- private:
-  const char *source_;
-
-  std::string file_being_parsed_;
-
-  std::vector<std::pair<Value, FieldDef *>> field_stack_;
-
-  int anonymous_counter;
-};
-
-// Utility functions for multiple generators:
-
-extern std::string MakeCamel(const std::string &in, bool first = true);
-
-// Generate text (JSON) from a given FlatBuffer, and a given Parser
-// object that has been populated with the corresponding schema.
-// If ident_step is 0, no indentation will be generated. Additionally,
-// if it is less than 0, no linefeeds will be generated either.
-// See idl_gen_text.cpp.
-// strict_json adds "quotes" around field names if true.
-// If the flatbuffer cannot be encoded in JSON (e.g., it contains non-UTF-8
-// byte arrays in String values), returns false.
-extern bool GenerateText(const Parser &parser,
-                         const void *flatbuffer,
-                         std::string *text);
-extern bool GenerateTextFile(const Parser &parser,
-                             const std::string &path,
-                             const std::string &file_name);
-
-// Generate binary files from a given FlatBuffer, and a given Parser
-// object that has been populated with the corresponding schema.
-// See idl_gen_general.cpp.
-extern bool GenerateBinary(const Parser &parser,
-                           const std::string &path,
-                           const std::string &file_name);
-
-// Generate a C++ header from the definitions in the Parser object.
-// See idl_gen_cpp.
-extern std::string GenerateCPP(const Parser &parser,
-                               const std::string &include_guard_ident);
-extern bool GenerateCPP(const Parser &parser,
-                        const std::string &path,
-                        const std::string &file_name);
-
-// Generate JavaScript or TypeScript code from the definitions in the Parser object.
-// See idl_gen_js.
-extern std::string GenerateJS(const Parser &parser);
-extern bool GenerateJS(const Parser &parser,
-                       const std::string &path,
-                       const std::string &file_name);
-
-// Generate Go files from the definitions in the Parser object.
-// See idl_gen_go.cpp.
-extern bool GenerateGo(const Parser &parser,
-                       const std::string &path,
-                       const std::string &file_name);
-
-// Generate Java files from the definitions in the Parser object.
-// See idl_gen_java.cpp.
-extern bool GenerateJava(const Parser &parser,
-                         const std::string &path,
-                         const std::string &file_name);
-
-// Generate Php code from the definitions in the Parser object.
-// See idl_gen_php.
-extern bool GeneratePhp(const Parser &parser,
-                        const std::string &path,
-                        const std::string &file_name);
-
-// Generate Python files from the definitions in the Parser object.
-// See idl_gen_python.cpp.
-extern bool GeneratePython(const Parser &parser,
-                           const std::string &path,
-                           const std::string &file_name);
-
-// Generate C# files from the definitions in the Parser object.
-// See idl_gen_csharp.cpp.
-extern bool GenerateCSharp(const Parser &parser,
-                           const std::string &path,
-                           const std::string &file_name);
-
-// Generate Java/C#/.. files from the definitions in the Parser object.
-// See idl_gen_general.cpp.
-extern bool GenerateGeneral(const Parser &parser,
-                            const std::string &path,
-                            const std::string &file_name);
-
-// Generate a schema file from the internal representation, useful after
-// parsing a .proto schema.
-extern std::string GenerateFBS(const Parser &parser,
-                               const std::string &file_name);
-extern bool GenerateFBS(const Parser &parser,
-                        const std::string &path,
-                        const std::string &file_name);
-
-// Generate a make rule for the generated JavaScript or TypeScript code.
-// See idl_gen_js.cpp.
-extern std::string JSMakeRule(const Parser &parser,
-                              const std::string &path,
-                              const std::string &file_name);
-
-// Generate a make rule for the generated C++ header.
-// See idl_gen_cpp.cpp.
-extern std::string CPPMakeRule(const Parser &parser,
-                               const std::string &path,
-                               const std::string &file_name);
-
-// Generate a make rule for the generated Java/C#/... files.
-// See idl_gen_general.cpp.
-extern std::string GeneralMakeRule(const Parser &parser,
-                                   const std::string &path,
-                                   const std::string &file_name);
-
-// Generate a make rule for the generated text (JSON) files.
-// See idl_gen_text.cpp.
-extern std::string TextMakeRule(const Parser &parser,
-                                const std::string &path,
-                                const std::string &file_names);
-
-// Generate a make rule for the generated binary files.
-// See idl_gen_general.cpp.
-extern std::string BinaryMakeRule(const Parser &parser,
-                                  const std::string &path,
-                                  const std::string &file_name);
-
-// Generate GRPC Cpp interfaces.
-// See idl_gen_grpc.cpp.
-bool GenerateCppGRPC(const Parser &parser,
-                     const std::string &path,
-                     const std::string &file_name);
-
-// Generate GRPC Go interfaces.
-// See idl_gen_grpc.cpp.
-bool GenerateGoGRPC(const Parser &parser,
-                    const std::string &path,
-                    const std::string &file_name);
-
-}  // namespace flatbuffers
-
-#endif  // FLATBUFFERS_IDL_H_
diff --git a/third_party/flatbuffers/include/flatbuffers/reflection.h b/third_party/flatbuffers/include/flatbuffers/reflection.h
deleted file mode 100644
index aab9f20..0000000
--- a/third_party/flatbuffers/include/flatbuffers/reflection.h
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
- * Copyright 2015 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FLATBUFFERS_REFLECTION_H_
-#define FLATBUFFERS_REFLECTION_H_
-
-// This is somewhat of a circular dependency because flatc (and thus this
-// file) is needed to generate this header in the first place.
-// Should normally not be a problem since it can be generated by the
-// previous version of flatc whenever this code needs to change.
-// See reflection/generate_code.sh
-#include "flatbuffers/reflection_generated.h"
-
-// Helper functionality for reflection.
-
-namespace flatbuffers {
-
-// ------------------------- GETTERS -------------------------
-
-inline bool IsScalar (reflection::BaseType t) { return t >= reflection::UType &&
-                                                       t <= reflection::Double; }
-inline bool IsInteger(reflection::BaseType t) { return t >= reflection::UType &&
-                                                       t <= reflection::ULong; }
-inline bool IsFloat  (reflection::BaseType t) { return t == reflection::Float ||
-                                                       t == reflection::Double; }
-inline bool IsLong   (reflection::BaseType t) { return t == reflection::Long ||
-                                                       t == reflection::ULong; }
-
-// Size of a basic type, don't use with structs.
-inline size_t GetTypeSize(reflection::BaseType base_type) {
-  // This needs to correspond to the BaseType enum.
-  static size_t sizes[] = { 0, 1, 1, 1, 1, 2, 2, 4, 4, 8, 8, 4, 8, 4, 4, 4, 4 };
-  return sizes[base_type];
-}
-
-// Same as above, but now correctly returns the size of a struct if
-// the field (or vector element) is a struct.
-inline size_t GetTypeSizeInline(reflection::BaseType base_type,
-                                int type_index,
-                                const reflection::Schema &schema) {
-  if (base_type == reflection::Obj &&
-      schema.objects()->Get(type_index)->is_struct()) {
-    return schema.objects()->Get(type_index)->bytesize();
-  } else {
-    return GetTypeSize(base_type);
-  }
-}
-
-// Get the root, regardless of what type it is.
-inline Table *GetAnyRoot(uint8_t *flatbuf) {
-  return GetMutableRoot<Table>(flatbuf);
-}
-inline const Table *GetAnyRoot(const uint8_t *flatbuf) {
-  return GetRoot<Table>(flatbuf);
-}
-
-// Get a field's default, if you know it's an integer, and its exact type.
-template<typename T> T GetFieldDefaultI(const reflection::Field &field) {
-  assert(sizeof(T) == GetTypeSize(field.type()->base_type()));
-  return static_cast<T>(field.default_integer());
-}
-
-// Get a field's default, if you know it's floating point and its exact type.
-template<typename T> T GetFieldDefaultF(const reflection::Field &field) {
-  assert(sizeof(T) == GetTypeSize(field.type()->base_type()));
-  return static_cast<T>(field.default_real());
-}
-
-// Get a field, if you know it's an integer, and its exact type.
-template<typename T> T GetFieldI(const Table &table,
-                                 const reflection::Field &field) {
-  assert(sizeof(T) == GetTypeSize(field.type()->base_type()));
-  return table.GetField<T>(field.offset(),
-                           static_cast<T>(field.default_integer()));
-}
-
-// Get a field, if you know it's floating point and its exact type.
-template<typename T> T GetFieldF(const Table &table,
-                                 const reflection::Field &field) {
-  assert(sizeof(T) == GetTypeSize(field.type()->base_type()));
-  return table.GetField<T>(field.offset(),
-                           static_cast<T>(field.default_real()));
-}
-
-// Get a field, if you know it's a string.
-inline const String *GetFieldS(const Table &table,
-                               const reflection::Field &field) {
-  assert(field.type()->base_type() == reflection::String);
-  return table.GetPointer<const String *>(field.offset());
-}
-
-// Get a field, if you know it's a vector.
-template<typename T> Vector<T> *GetFieldV(const Table &table,
-                                          const reflection::Field &field) {
-  assert(field.type()->base_type() == reflection::Vector &&
-         sizeof(T) == GetTypeSize(field.type()->element()));
-  return table.GetPointer<Vector<T> *>(field.offset());
-}
-
-// Get a field, if you know it's a vector, generically.
-// To actually access elements, use the return value together with
-// field.type()->element() in any of GetAnyVectorElemI below etc.
-inline VectorOfAny *GetFieldAnyV(const Table &table,
-                                 const reflection::Field &field) {
-  return table.GetPointer<VectorOfAny *>(field.offset());
-}
-
-// Get a field, if you know it's a table.
-inline Table *GetFieldT(const Table &table,
-                        const reflection::Field &field) {
-  assert(field.type()->base_type() == reflection::Obj ||
-         field.type()->base_type() == reflection::Union);
-  return table.GetPointer<Table *>(field.offset());
-}
-
-// Get a field, if you know it's a struct.
-inline const Struct *GetFieldStruct(const Table &table,
-                                    const reflection::Field &field) {
-  // TODO: This does NOT check if the field is a table or struct, but we'd need
-  // access to the schema to check the is_struct flag.
-  assert(field.type()->base_type() == reflection::Obj);
-  return table.GetStruct<const Struct *>(field.offset());
-}
-
-// Get a structure's field, if you know it's a struct.
-inline const Struct *GetFieldStruct(const Struct &structure,
-                                    const reflection::Field &field) {
-  assert(field.type()->base_type() == reflection::Obj);
-  return structure.GetStruct<const Struct *>(field.offset());
-}
-
-// Raw helper functions used below: get any value in memory as a 64bit int, a
-// double or a string.
-// All scalars get static_cast to an int64_t, strings use strtoull, every other
-// data type returns 0.
-int64_t GetAnyValueI(reflection::BaseType type, const uint8_t *data);
-// All scalars static cast to double, strings use strtod, every other data
-// type is 0.0.
-double GetAnyValueF(reflection::BaseType type, const uint8_t *data);
-// All scalars converted using stringstream, strings as-is, and all other
-// data types provide some level of debug-pretty-printing.
-std::string GetAnyValueS(reflection::BaseType type, const uint8_t *data,
-                         const reflection::Schema *schema,
-                         int type_index);
-
-// Get any table field as a 64bit int, regardless of what type it is.
-inline int64_t GetAnyFieldI(const Table &table,
-                            const reflection::Field &field) {
-  auto field_ptr = table.GetAddressOf(field.offset());
-  return field_ptr ? GetAnyValueI(field.type()->base_type(), field_ptr)
-                   : field.default_integer();
-}
-
-// Get any table field as a double, regardless of what type it is.
-inline double GetAnyFieldF(const Table &table,
-                           const reflection::Field &field) {
-  auto field_ptr = table.GetAddressOf(field.offset());
-  return field_ptr ? GetAnyValueF(field.type()->base_type(), field_ptr)
-                   : field.default_real();
-}
-
-
-// Get any table field as a string, regardless of what type it is.
-// You may pass nullptr for the schema if you don't care to have fields that
-// are of table type pretty-printed.
-inline std::string GetAnyFieldS(const Table &table,
-                                const reflection::Field &field,
-                                const reflection::Schema *schema) {
-  auto field_ptr = table.GetAddressOf(field.offset());
-  return field_ptr ? GetAnyValueS(field.type()->base_type(), field_ptr, schema,
-                                  field.type()->index())
-                   : "";
-}
-
-// Get any struct field as a 64bit int, regardless of what type it is.
-inline int64_t GetAnyFieldI(const Struct &st,
-                            const reflection::Field &field) {
-  return GetAnyValueI(field.type()->base_type(),
-                      st.GetAddressOf(field.offset()));
-}
-
-// Get any struct field as a double, regardless of what type it is.
-inline double GetAnyFieldF(const Struct &st,
-                           const reflection::Field &field) {
-  return GetAnyValueF(field.type()->base_type(),
-                      st.GetAddressOf(field.offset()));
-}
-
-// Get any struct field as a string, regardless of what type it is.
-inline std::string GetAnyFieldS(const Struct &st,
-                                const reflection::Field &field) {
-  return GetAnyValueS(field.type()->base_type(),
-                      st.GetAddressOf(field.offset()), nullptr, -1);
-}
-
-// Get any vector element as a 64bit int, regardless of what type it is.
-inline int64_t GetAnyVectorElemI(const VectorOfAny *vec,
-                                 reflection::BaseType elem_type, size_t i) {
-  return GetAnyValueI(elem_type, vec->Data() + GetTypeSize(elem_type) * i);
-}
-
-// Get any vector element as a double, regardless of what type it is.
-inline double GetAnyVectorElemF(const VectorOfAny *vec,
-                                reflection::BaseType elem_type, size_t i) {
-  return GetAnyValueF(elem_type, vec->Data() + GetTypeSize(elem_type) * i);
-}
-
-// Get any vector element as a string, regardless of what type it is.
-inline std::string GetAnyVectorElemS(const VectorOfAny *vec,
-                                     reflection::BaseType elem_type, size_t i) {
-  return GetAnyValueS(elem_type, vec->Data() + GetTypeSize(elem_type) * i,
-                      nullptr, -1);
-}
-
-// Get a vector element that's a table/string/vector from a generic vector.
-// Pass Table/String/VectorOfAny as template parameter.
-// Warning: does no typechecking.
-template<typename T> T *GetAnyVectorElemPointer(const VectorOfAny *vec,
-                                                size_t i) {
-  auto elem_ptr = vec->Data() + sizeof(uoffset_t) * i;
-  return (T *)(elem_ptr + ReadScalar<uoffset_t>(elem_ptr));
-}
-
-// Get the inline-address of a vector element. Useful for Structs (pass Struct
-// as template arg), or being able to address a range of scalars in-line.
-// Get elem_size from GetTypeSizeInline().
-// Note: little-endian data on all platforms, use EndianScalar() instead of
-// raw pointer access with scalars).
-template<typename T> T *GetAnyVectorElemAddressOf(const VectorOfAny *vec,
-                                                  size_t i,
-                                                  size_t elem_size) {
-  // C-cast to allow const conversion.
-  return (T *)(vec->Data() + elem_size * i);
-}
-
-// Similarly, for elements of tables.
-template<typename T> T *GetAnyFieldAddressOf(const Table &table,
-                                             const reflection::Field &field) {
-  return (T *)table.GetAddressOf(field.offset());
-}
-
-// Similarly, for elements of structs.
-template<typename T> T *GetAnyFieldAddressOf(const Struct &st,
-                                             const reflection::Field &field) {
-  return (T *)st.GetAddressOf(field.offset());
-}
-
-// ------------------------- SETTERS -------------------------
-
-// Set any scalar field, if you know its exact type.
-template<typename T> bool SetField(Table *table, const reflection::Field &field,
-                                   T val) {
-  reflection::BaseType type = field.type()->base_type();
-  if (!IsScalar(type)) {
-    return false;
-  }
-  assert(sizeof(T) == GetTypeSize(type));
-  T def;
-  if (IsInteger(type)) {
-    def = GetFieldDefaultI<T>(field);
-  } else {
-    assert(IsFloat(type));
-    def = GetFieldDefaultF<T>(field);
-  }
-  return table->SetField(field.offset(), val, def);
-}
-
-// Raw helper functions used below: set any value in memory as a 64bit int, a
-// double or a string.
-// These work for all scalar values, but do nothing for other data types.
-// To set a string, see SetString below.
-void SetAnyValueI(reflection::BaseType type, uint8_t *data, int64_t val);
-void SetAnyValueF(reflection::BaseType type, uint8_t *data, double val);
-void SetAnyValueS(reflection::BaseType type, uint8_t *data, const char *val);
-
-// Set any table field as a 64bit int, regardless of type what it is.
-inline bool SetAnyFieldI(Table *table, const reflection::Field &field,
-                         int64_t val) {
-  auto field_ptr = table->GetAddressOf(field.offset());
-  if (!field_ptr) return val == GetFieldDefaultI<int64_t>(field);
-  SetAnyValueI(field.type()->base_type(), field_ptr, val);
-  return true;
-}
-
-// Set any table field as a double, regardless of what type it is.
-inline bool SetAnyFieldF(Table *table, const reflection::Field &field,
-                         double val) {
-  auto field_ptr = table->GetAddressOf(field.offset());
-  if (!field_ptr) return val == GetFieldDefaultF<double>(field);
-  SetAnyValueF(field.type()->base_type(), field_ptr, val);
-  return true;
-}
-
-// Set any table field as a string, regardless of what type it is.
-inline bool SetAnyFieldS(Table *table, const reflection::Field &field,
-                  const char *val) {
-  auto field_ptr = table->GetAddressOf(field.offset());
-  if (!field_ptr) return false;
-  SetAnyValueS(field.type()->base_type(), field_ptr, val);
-  return true;
-}
-
-// Set any struct field as a 64bit int, regardless of type what it is.
-inline void SetAnyFieldI(Struct *st, const reflection::Field &field,
-                         int64_t val) {
-  SetAnyValueI(field.type()->base_type(), st->GetAddressOf(field.offset()),
-               val);
-}
-
-// Set any struct field as a double, regardless of type what it is.
-inline void SetAnyFieldF(Struct *st, const reflection::Field &field,
-                         double val) {
-  SetAnyValueF(field.type()->base_type(), st->GetAddressOf(field.offset()),
-               val);
-}
-
-// Set any struct field as a string, regardless of type what it is.
-inline void SetAnyFieldS(Struct *st, const reflection::Field &field,
-                         const char *val) {
-  SetAnyValueS(field.type()->base_type(), st->GetAddressOf(field.offset()),
-               val);
-}
-
-// Set any vector element as a 64bit int, regardless of type what it is.
-inline void SetAnyVectorElemI(VectorOfAny *vec, reflection::BaseType elem_type,
-                              size_t i, int64_t val) {
-  SetAnyValueI(elem_type, vec->Data() + GetTypeSize(elem_type) * i, val);
-}
-
-// Set any vector element as a double, regardless of type what it is.
-inline void SetAnyVectorElemF(VectorOfAny *vec, reflection::BaseType elem_type,
-                              size_t i, double val) {
-  SetAnyValueF(elem_type, vec->Data() + GetTypeSize(elem_type) * i, val);
-}
-
-// Set any vector element as a string, regardless of type what it is.
-inline void SetAnyVectorElemS(VectorOfAny *vec, reflection::BaseType elem_type,
-                              size_t i, const char *val) {
-  SetAnyValueS(elem_type, vec->Data() + GetTypeSize(elem_type) * i, val);
-}
-
-
-// ------------------------- RESIZING SETTERS -------------------------
-
-// "smart" pointer for use with resizing vectors: turns a pointer inside
-// a vector into a relative offset, such that it is not affected by resizes.
-template<typename T, typename U> class pointer_inside_vector {
- public:
-  pointer_inside_vector(T *ptr, std::vector<U> &vec)
-    : offset_(reinterpret_cast<uint8_t *>(ptr) -
-              reinterpret_cast<uint8_t *>(vec.data())),
-      vec_(vec) {}
-
-  T *operator*() const {
-    return reinterpret_cast<T *>(
-             reinterpret_cast<uint8_t *>(vec_.data()) + offset_);
-  }
-  T *operator->() const {
-    return operator*();
-  }
-  void operator=(const pointer_inside_vector &piv);
- private:
-  size_t offset_;
-  std::vector<U> &vec_;
-};
-
-// Helper to create the above easily without specifying template args.
-template<typename T, typename U> pointer_inside_vector<T, U> piv(T *ptr,
-                                                          std::vector<U> &vec) {
-  return pointer_inside_vector<T, U>(ptr, vec);
-}
-
-inline const char *UnionTypeFieldSuffix() { return "_type"; }
-
-// Helper to figure out the actual table type a union refers to.
-inline const reflection::Object &GetUnionType(
-    const reflection::Schema &schema, const reflection::Object &parent,
-    const reflection::Field &unionfield, const Table &table) {
-  auto enumdef = schema.enums()->Get(unionfield.type()->index());
-  // TODO: this is clumsy and slow, but no other way to find it?
-  auto type_field = parent.fields()->LookupByKey(
-            (unionfield.name()->str() + UnionTypeFieldSuffix()).c_str());
-  assert(type_field);
-  auto union_type = GetFieldI<uint8_t>(table, *type_field);
-  auto enumval = enumdef->values()->LookupByKey(union_type);
-  return *enumval->object();
-}
-
-// Changes the contents of a string inside a FlatBuffer. FlatBuffer must
-// live inside a std::vector so we can resize the buffer if needed.
-// "str" must live inside "flatbuf" and may be invalidated after this call.
-// If your FlatBuffer's root table is not the schema's root table, you should
-// pass in your root_table type as well.
-void SetString(const reflection::Schema &schema, const std::string &val,
-               const String *str, std::vector<uint8_t> *flatbuf,
-               const reflection::Object *root_table = nullptr);
-
-// Resizes a flatbuffers::Vector inside a FlatBuffer. FlatBuffer must
-// live inside a std::vector so we can resize the buffer if needed.
-// "vec" must live inside "flatbuf" and may be invalidated after this call.
-// If your FlatBuffer's root table is not the schema's root table, you should
-// pass in your root_table type as well.
-uint8_t *ResizeAnyVector(const reflection::Schema &schema, uoffset_t newsize,
-                         const VectorOfAny *vec, uoffset_t num_elems,
-                         uoffset_t elem_size, std::vector<uint8_t> *flatbuf,
-                         const reflection::Object *root_table = nullptr);
-
-#ifndef FLATBUFFERS_CPP98_STL
-template <typename T>
-void ResizeVector(const reflection::Schema &schema, uoffset_t newsize, T val,
-                  const Vector<T> *vec, std::vector<uint8_t> *flatbuf,
-                  const reflection::Object *root_table = nullptr) {
-  auto delta_elem = static_cast<int>(newsize) - static_cast<int>(vec->size());
-  auto newelems = ResizeAnyVector(schema, newsize,
-                                  reinterpret_cast<const VectorOfAny *>(vec),
-                                  vec->size(),
-                                  static_cast<uoffset_t>(sizeof(T)), flatbuf,
-                                  root_table);
-  // Set new elements to "val".
-  for (int i = 0; i < delta_elem; i++) {
-    auto loc = newelems + i * sizeof(T);
-    auto is_scalar = std::is_scalar<T>::value;
-    if (is_scalar) {
-      WriteScalar(loc, val);
-    } else {  // struct
-      *reinterpret_cast<T *>(loc) = val;
-    }
-  }
-}
-#endif
-
-// Adds any new data (in the form of a new FlatBuffer) to an existing
-// FlatBuffer. This can be used when any of the above methods are not
-// sufficient, in particular for adding new tables and new fields.
-// This is potentially slightly less efficient than a FlatBuffer constructed
-// in one piece, since the new FlatBuffer doesn't share any vtables with the
-// existing one.
-// The return value can now be set using Vector::MutateOffset or SetFieldT
-// below.
-const uint8_t *AddFlatBuffer(std::vector<uint8_t> &flatbuf,
-                             const uint8_t *newbuf, size_t newlen);
-
-inline bool SetFieldT(Table *table, const reflection::Field &field,
-                      const uint8_t *val) {
-  assert(sizeof(uoffset_t) == GetTypeSize(field.type()->base_type()));
-  return table->SetPointer(field.offset(), val);
-}
-
-// ------------------------- COPYING -------------------------
-
-// Generic copying of tables from a FlatBuffer into a FlatBuffer builder.
-// Can be used to do any kind of merging/selecting you may want to do out
-// of existing buffers. Also useful to reconstruct a whole buffer if the
-// above resizing functionality has introduced garbage in a buffer you want
-// to remove.
-// Note: this does not deal with DAGs correctly. If the table passed forms a
-// DAG, the copy will be a tree instead (with duplicates). Strings can be
-// shared however, by passing true for use_string_pooling.
-
-Offset<const Table *> CopyTable(FlatBufferBuilder &fbb,
-                                const reflection::Schema &schema,
-                                const reflection::Object &objectdef,
-                                const Table &table,
-                                bool use_string_pooling = false);
-
-// Verifies the provided flatbuffer using reflection.
-// root should point to the root type for this flatbuffer.
-// buf should point to the start of flatbuffer data.
-// length specifies the size of the flatbuffer data.
-bool Verify(const reflection::Schema &schema,
-            const reflection::Object &root,
-            const uint8_t *buf,
-            size_t length);
-
-}  // namespace flatbuffers
-
-#endif  // FLATBUFFERS_REFLECTION_H_
diff --git a/third_party/flatbuffers/include/flatbuffers/reflection_generated.h b/third_party/flatbuffers/include/flatbuffers/reflection_generated.h
deleted file mode 100644
index b76814e..0000000
--- a/third_party/flatbuffers/include/flatbuffers/reflection_generated.h
+++ /dev/null
@@ -1,881 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-
-#ifndef FLATBUFFERS_GENERATED_REFLECTION_REFLECTION_H_
-#define FLATBUFFERS_GENERATED_REFLECTION_REFLECTION_H_
-
-#include "flatbuffers/flatbuffers.h"
-
-namespace reflection {
-
-struct Type;
-
-struct KeyValue;
-
-struct EnumVal;
-
-struct Enum;
-
-struct Field;
-
-struct Object;
-
-struct Schema;
-
-enum BaseType {
-  None = 0,
-  UType = 1,
-  Bool = 2,
-  Byte = 3,
-  UByte = 4,
-  Short = 5,
-  UShort = 6,
-  Int = 7,
-  UInt = 8,
-  Long = 9,
-  ULong = 10,
-  Float = 11,
-  Double = 12,
-  String = 13,
-  Vector = 14,
-  Obj = 15,
-  Union = 16
-};
-
-inline const char **EnumNamesBaseType() {
-  static const char *names[] = {
-    "None",
-    "UType",
-    "Bool",
-    "Byte",
-    "UByte",
-    "Short",
-    "UShort",
-    "Int",
-    "UInt",
-    "Long",
-    "ULong",
-    "Float",
-    "Double",
-    "String",
-    "Vector",
-    "Obj",
-    "Union",
-    nullptr
-  };
-  return names;
-}
-
-inline const char *EnumNameBaseType(BaseType e) {
-  const size_t index = static_cast<int>(e);
-  return EnumNamesBaseType()[index];
-}
-
-struct Type FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_BASE_TYPE = 4,
-    VT_ELEMENT = 6,
-    VT_INDEX = 8
-  };
-  BaseType base_type() const {
-    return static_cast<BaseType>(GetField<int8_t>(VT_BASE_TYPE, 0));
-  }
-  BaseType element() const {
-    return static_cast<BaseType>(GetField<int8_t>(VT_ELEMENT, 0));
-  }
-  int32_t index() const {
-    return GetField<int32_t>(VT_INDEX, -1);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyField<int8_t>(verifier, VT_BASE_TYPE) &&
-           VerifyField<int8_t>(verifier, VT_ELEMENT) &&
-           VerifyField<int32_t>(verifier, VT_INDEX) &&
-           verifier.EndTable();
-  }
-};
-
-struct TypeBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_base_type(BaseType base_type) {
-    fbb_.AddElement<int8_t>(Type::VT_BASE_TYPE, static_cast<int8_t>(base_type), 0);
-  }
-  void add_element(BaseType element) {
-    fbb_.AddElement<int8_t>(Type::VT_ELEMENT, static_cast<int8_t>(element), 0);
-  }
-  void add_index(int32_t index) {
-    fbb_.AddElement<int32_t>(Type::VT_INDEX, index, -1);
-  }
-  TypeBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  TypeBuilder &operator=(const TypeBuilder &);
-  flatbuffers::Offset<Type> Finish() {
-    const auto end = fbb_.EndTable(start_, 3);
-    auto o = flatbuffers::Offset<Type>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<Type> CreateType(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    BaseType base_type = None,
-    BaseType element = None,
-    int32_t index = -1) {
-  TypeBuilder builder_(_fbb);
-  builder_.add_index(index);
-  builder_.add_element(element);
-  builder_.add_base_type(base_type);
-  return builder_.Finish();
-}
-
-struct KeyValue FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_KEY = 4,
-    VT_VALUE = 6
-  };
-  const flatbuffers::String *key() const {
-    return GetPointer<const flatbuffers::String *>(VT_KEY);
-  }
-  bool KeyCompareLessThan(const KeyValue *o) const {
-    return *key() < *o->key();
-  }
-  int KeyCompareWithValue(const char *val) const {
-    return strcmp(key()->c_str(), val);
-  }
-  const flatbuffers::String *value() const {
-    return GetPointer<const flatbuffers::String *>(VT_VALUE);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_KEY) &&
-           verifier.Verify(key()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_VALUE) &&
-           verifier.Verify(value()) &&
-           verifier.EndTable();
-  }
-};
-
-struct KeyValueBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_key(flatbuffers::Offset<flatbuffers::String> key) {
-    fbb_.AddOffset(KeyValue::VT_KEY, key);
-  }
-  void add_value(flatbuffers::Offset<flatbuffers::String> value) {
-    fbb_.AddOffset(KeyValue::VT_VALUE, value);
-  }
-  KeyValueBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  KeyValueBuilder &operator=(const KeyValueBuilder &);
-  flatbuffers::Offset<KeyValue> Finish() {
-    const auto end = fbb_.EndTable(start_, 2);
-    auto o = flatbuffers::Offset<KeyValue>(end);
-    fbb_.Required(o, KeyValue::VT_KEY);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<KeyValue> CreateKeyValue(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<flatbuffers::String> key = 0,
-    flatbuffers::Offset<flatbuffers::String> value = 0) {
-  KeyValueBuilder builder_(_fbb);
-  builder_.add_value(value);
-  builder_.add_key(key);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<KeyValue> CreateKeyValueDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    const char *key = nullptr,
-    const char *value = nullptr) {
-  return reflection::CreateKeyValue(
-      _fbb,
-      key ? _fbb.CreateString(key) : 0,
-      value ? _fbb.CreateString(value) : 0);
-}
-
-struct EnumVal FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_NAME = 4,
-    VT_VALUE = 6,
-    VT_OBJECT = 8,
-    VT_UNION_TYPE = 10
-  };
-  const flatbuffers::String *name() const {
-    return GetPointer<const flatbuffers::String *>(VT_NAME);
-  }
-  int64_t value() const {
-    return GetField<int64_t>(VT_VALUE, 0);
-  }
-  bool KeyCompareLessThan(const EnumVal *o) const {
-    return value() < o->value();
-  }
-  int KeyCompareWithValue(int64_t val) const {
-    const auto key = value();
-    if (key < val) {
-      return -1;
-    } else if (key > val) {
-      return 1;
-    } else {
-      return 0;
-    }
-  }
-  const Object *object() const {
-    return GetPointer<const Object *>(VT_OBJECT);
-  }
-  const Type *union_type() const {
-    return GetPointer<const Type *>(VT_UNION_TYPE);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_NAME) &&
-           verifier.Verify(name()) &&
-           VerifyField<int64_t>(verifier, VT_VALUE) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_OBJECT) &&
-           verifier.VerifyTable(object()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_UNION_TYPE) &&
-           verifier.VerifyTable(union_type()) &&
-           verifier.EndTable();
-  }
-};
-
-struct EnumValBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_name(flatbuffers::Offset<flatbuffers::String> name) {
-    fbb_.AddOffset(EnumVal::VT_NAME, name);
-  }
-  void add_value(int64_t value) {
-    fbb_.AddElement<int64_t>(EnumVal::VT_VALUE, value, 0);
-  }
-  void add_object(flatbuffers::Offset<Object> object) {
-    fbb_.AddOffset(EnumVal::VT_OBJECT, object);
-  }
-  void add_union_type(flatbuffers::Offset<Type> union_type) {
-    fbb_.AddOffset(EnumVal::VT_UNION_TYPE, union_type);
-  }
-  EnumValBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  EnumValBuilder &operator=(const EnumValBuilder &);
-  flatbuffers::Offset<EnumVal> Finish() {
-    const auto end = fbb_.EndTable(start_, 4);
-    auto o = flatbuffers::Offset<EnumVal>(end);
-    fbb_.Required(o, EnumVal::VT_NAME);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<EnumVal> CreateEnumVal(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<flatbuffers::String> name = 0,
-    int64_t value = 0,
-    flatbuffers::Offset<Object> object = 0,
-    flatbuffers::Offset<Type> union_type = 0) {
-  EnumValBuilder builder_(_fbb);
-  builder_.add_value(value);
-  builder_.add_union_type(union_type);
-  builder_.add_object(object);
-  builder_.add_name(name);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<EnumVal> CreateEnumValDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    const char *name = nullptr,
-    int64_t value = 0,
-    flatbuffers::Offset<Object> object = 0,
-    flatbuffers::Offset<Type> union_type = 0) {
-  return reflection::CreateEnumVal(
-      _fbb,
-      name ? _fbb.CreateString(name) : 0,
-      value,
-      object,
-      union_type);
-}
-
-struct Enum FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_NAME = 4,
-    VT_VALUES = 6,
-    VT_IS_UNION = 8,
-    VT_UNDERLYING_TYPE = 10,
-    VT_ATTRIBUTES = 12,
-    VT_DOCUMENTATION = 14
-  };
-  const flatbuffers::String *name() const {
-    return GetPointer<const flatbuffers::String *>(VT_NAME);
-  }
-  bool KeyCompareLessThan(const Enum *o) const {
-    return *name() < *o->name();
-  }
-  int KeyCompareWithValue(const char *val) const {
-    return strcmp(name()->c_str(), val);
-  }
-  const flatbuffers::Vector<flatbuffers::Offset<EnumVal>> *values() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<EnumVal>> *>(VT_VALUES);
-  }
-  bool is_union() const {
-    return GetField<uint8_t>(VT_IS_UNION, 0) != 0;
-  }
-  const Type *underlying_type() const {
-    return GetPointer<const Type *>(VT_UNDERLYING_TYPE);
-  }
-  const flatbuffers::Vector<flatbuffers::Offset<KeyValue>> *attributes() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<KeyValue>> *>(VT_ATTRIBUTES);
-  }
-  const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *documentation() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_DOCUMENTATION);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_NAME) &&
-           verifier.Verify(name()) &&
-           VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_VALUES) &&
-           verifier.Verify(values()) &&
-           verifier.VerifyVectorOfTables(values()) &&
-           VerifyField<uint8_t>(verifier, VT_IS_UNION) &&
-           VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_UNDERLYING_TYPE) &&
-           verifier.VerifyTable(underlying_type()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_ATTRIBUTES) &&
-           verifier.Verify(attributes()) &&
-           verifier.VerifyVectorOfTables(attributes()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_DOCUMENTATION) &&
-           verifier.Verify(documentation()) &&
-           verifier.VerifyVectorOfStrings(documentation()) &&
-           verifier.EndTable();
-  }
-};
-
-struct EnumBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_name(flatbuffers::Offset<flatbuffers::String> name) {
-    fbb_.AddOffset(Enum::VT_NAME, name);
-  }
-  void add_values(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<EnumVal>>> values) {
-    fbb_.AddOffset(Enum::VT_VALUES, values);
-  }
-  void add_is_union(bool is_union) {
-    fbb_.AddElement<uint8_t>(Enum::VT_IS_UNION, static_cast<uint8_t>(is_union), 0);
-  }
-  void add_underlying_type(flatbuffers::Offset<Type> underlying_type) {
-    fbb_.AddOffset(Enum::VT_UNDERLYING_TYPE, underlying_type);
-  }
-  void add_attributes(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<KeyValue>>> attributes) {
-    fbb_.AddOffset(Enum::VT_ATTRIBUTES, attributes);
-  }
-  void add_documentation(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation) {
-    fbb_.AddOffset(Enum::VT_DOCUMENTATION, documentation);
-  }
-  EnumBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  EnumBuilder &operator=(const EnumBuilder &);
-  flatbuffers::Offset<Enum> Finish() {
-    const auto end = fbb_.EndTable(start_, 6);
-    auto o = flatbuffers::Offset<Enum>(end);
-    fbb_.Required(o, Enum::VT_NAME);
-    fbb_.Required(o, Enum::VT_VALUES);
-    fbb_.Required(o, Enum::VT_UNDERLYING_TYPE);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<Enum> CreateEnum(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<flatbuffers::String> name = 0,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<EnumVal>>> values = 0,
-    bool is_union = false,
-    flatbuffers::Offset<Type> underlying_type = 0,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<KeyValue>>> attributes = 0,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation = 0) {
-  EnumBuilder builder_(_fbb);
-  builder_.add_documentation(documentation);
-  builder_.add_attributes(attributes);
-  builder_.add_underlying_type(underlying_type);
-  builder_.add_values(values);
-  builder_.add_name(name);
-  builder_.add_is_union(is_union);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<Enum> CreateEnumDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    const char *name = nullptr,
-    const std::vector<flatbuffers::Offset<EnumVal>> *values = nullptr,
-    bool is_union = false,
-    flatbuffers::Offset<Type> underlying_type = 0,
-    const std::vector<flatbuffers::Offset<KeyValue>> *attributes = nullptr,
-    const std::vector<flatbuffers::Offset<flatbuffers::String>> *documentation = nullptr) {
-  return reflection::CreateEnum(
-      _fbb,
-      name ? _fbb.CreateString(name) : 0,
-      values ? _fbb.CreateVector<flatbuffers::Offset<EnumVal>>(*values) : 0,
-      is_union,
-      underlying_type,
-      attributes ? _fbb.CreateVector<flatbuffers::Offset<KeyValue>>(*attributes) : 0,
-      documentation ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*documentation) : 0);
-}
-
-struct Field FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_NAME = 4,
-    VT_TYPE = 6,
-    VT_ID = 8,
-    VT_OFFSET = 10,
-    VT_DEFAULT_INTEGER = 12,
-    VT_DEFAULT_REAL = 14,
-    VT_DEPRECATED = 16,
-    VT_REQUIRED = 18,
-    VT_KEY = 20,
-    VT_ATTRIBUTES = 22,
-    VT_DOCUMENTATION = 24
-  };
-  const flatbuffers::String *name() const {
-    return GetPointer<const flatbuffers::String *>(VT_NAME);
-  }
-  bool KeyCompareLessThan(const Field *o) const {
-    return *name() < *o->name();
-  }
-  int KeyCompareWithValue(const char *val) const {
-    return strcmp(name()->c_str(), val);
-  }
-  const Type *type() const {
-    return GetPointer<const Type *>(VT_TYPE);
-  }
-  uint16_t id() const {
-    return GetField<uint16_t>(VT_ID, 0);
-  }
-  uint16_t offset() const {
-    return GetField<uint16_t>(VT_OFFSET, 0);
-  }
-  int64_t default_integer() const {
-    return GetField<int64_t>(VT_DEFAULT_INTEGER, 0);
-  }
-  double default_real() const {
-    return GetField<double>(VT_DEFAULT_REAL, 0.0);
-  }
-  bool deprecated() const {
-    return GetField<uint8_t>(VT_DEPRECATED, 0) != 0;
-  }
-  bool required() const {
-    return GetField<uint8_t>(VT_REQUIRED, 0) != 0;
-  }
-  bool key() const {
-    return GetField<uint8_t>(VT_KEY, 0) != 0;
-  }
-  const flatbuffers::Vector<flatbuffers::Offset<KeyValue>> *attributes() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<KeyValue>> *>(VT_ATTRIBUTES);
-  }
-  const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *documentation() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_DOCUMENTATION);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_NAME) &&
-           verifier.Verify(name()) &&
-           VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_TYPE) &&
-           verifier.VerifyTable(type()) &&
-           VerifyField<uint16_t>(verifier, VT_ID) &&
-           VerifyField<uint16_t>(verifier, VT_OFFSET) &&
-           VerifyField<int64_t>(verifier, VT_DEFAULT_INTEGER) &&
-           VerifyField<double>(verifier, VT_DEFAULT_REAL) &&
-           VerifyField<uint8_t>(verifier, VT_DEPRECATED) &&
-           VerifyField<uint8_t>(verifier, VT_REQUIRED) &&
-           VerifyField<uint8_t>(verifier, VT_KEY) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_ATTRIBUTES) &&
-           verifier.Verify(attributes()) &&
-           verifier.VerifyVectorOfTables(attributes()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_DOCUMENTATION) &&
-           verifier.Verify(documentation()) &&
-           verifier.VerifyVectorOfStrings(documentation()) &&
-           verifier.EndTable();
-  }
-};
-
-struct FieldBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_name(flatbuffers::Offset<flatbuffers::String> name) {
-    fbb_.AddOffset(Field::VT_NAME, name);
-  }
-  void add_type(flatbuffers::Offset<Type> type) {
-    fbb_.AddOffset(Field::VT_TYPE, type);
-  }
-  void add_id(uint16_t id) {
-    fbb_.AddElement<uint16_t>(Field::VT_ID, id, 0);
-  }
-  void add_offset(uint16_t offset) {
-    fbb_.AddElement<uint16_t>(Field::VT_OFFSET, offset, 0);
-  }
-  void add_default_integer(int64_t default_integer) {
-    fbb_.AddElement<int64_t>(Field::VT_DEFAULT_INTEGER, default_integer, 0);
-  }
-  void add_default_real(double default_real) {
-    fbb_.AddElement<double>(Field::VT_DEFAULT_REAL, default_real, 0.0);
-  }
-  void add_deprecated(bool deprecated) {
-    fbb_.AddElement<uint8_t>(Field::VT_DEPRECATED, static_cast<uint8_t>(deprecated), 0);
-  }
-  void add_required(bool required) {
-    fbb_.AddElement<uint8_t>(Field::VT_REQUIRED, static_cast<uint8_t>(required), 0);
-  }
-  void add_key(bool key) {
-    fbb_.AddElement<uint8_t>(Field::VT_KEY, static_cast<uint8_t>(key), 0);
-  }
-  void add_attributes(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<KeyValue>>> attributes) {
-    fbb_.AddOffset(Field::VT_ATTRIBUTES, attributes);
-  }
-  void add_documentation(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation) {
-    fbb_.AddOffset(Field::VT_DOCUMENTATION, documentation);
-  }
-  FieldBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  FieldBuilder &operator=(const FieldBuilder &);
-  flatbuffers::Offset<Field> Finish() {
-    const auto end = fbb_.EndTable(start_, 11);
-    auto o = flatbuffers::Offset<Field>(end);
-    fbb_.Required(o, Field::VT_NAME);
-    fbb_.Required(o, Field::VT_TYPE);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<Field> CreateField(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<flatbuffers::String> name = 0,
-    flatbuffers::Offset<Type> type = 0,
-    uint16_t id = 0,
-    uint16_t offset = 0,
-    int64_t default_integer = 0,
-    double default_real = 0.0,
-    bool deprecated = false,
-    bool required = false,
-    bool key = false,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<KeyValue>>> attributes = 0,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation = 0) {
-  FieldBuilder builder_(_fbb);
-  builder_.add_default_real(default_real);
-  builder_.add_default_integer(default_integer);
-  builder_.add_documentation(documentation);
-  builder_.add_attributes(attributes);
-  builder_.add_type(type);
-  builder_.add_name(name);
-  builder_.add_offset(offset);
-  builder_.add_id(id);
-  builder_.add_key(key);
-  builder_.add_required(required);
-  builder_.add_deprecated(deprecated);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<Field> CreateFieldDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    const char *name = nullptr,
-    flatbuffers::Offset<Type> type = 0,
-    uint16_t id = 0,
-    uint16_t offset = 0,
-    int64_t default_integer = 0,
-    double default_real = 0.0,
-    bool deprecated = false,
-    bool required = false,
-    bool key = false,
-    const std::vector<flatbuffers::Offset<KeyValue>> *attributes = nullptr,
-    const std::vector<flatbuffers::Offset<flatbuffers::String>> *documentation = nullptr) {
-  return reflection::CreateField(
-      _fbb,
-      name ? _fbb.CreateString(name) : 0,
-      type,
-      id,
-      offset,
-      default_integer,
-      default_real,
-      deprecated,
-      required,
-      key,
-      attributes ? _fbb.CreateVector<flatbuffers::Offset<KeyValue>>(*attributes) : 0,
-      documentation ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*documentation) : 0);
-}
-
-struct Object FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_NAME = 4,
-    VT_FIELDS = 6,
-    VT_IS_STRUCT = 8,
-    VT_MINALIGN = 10,
-    VT_BYTESIZE = 12,
-    VT_ATTRIBUTES = 14,
-    VT_DOCUMENTATION = 16
-  };
-  const flatbuffers::String *name() const {
-    return GetPointer<const flatbuffers::String *>(VT_NAME);
-  }
-  bool KeyCompareLessThan(const Object *o) const {
-    return *name() < *o->name();
-  }
-  int KeyCompareWithValue(const char *val) const {
-    return strcmp(name()->c_str(), val);
-  }
-  const flatbuffers::Vector<flatbuffers::Offset<Field>> *fields() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<Field>> *>(VT_FIELDS);
-  }
-  bool is_struct() const {
-    return GetField<uint8_t>(VT_IS_STRUCT, 0) != 0;
-  }
-  int32_t minalign() const {
-    return GetField<int32_t>(VT_MINALIGN, 0);
-  }
-  int32_t bytesize() const {
-    return GetField<int32_t>(VT_BYTESIZE, 0);
-  }
-  const flatbuffers::Vector<flatbuffers::Offset<KeyValue>> *attributes() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<KeyValue>> *>(VT_ATTRIBUTES);
-  }
-  const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *documentation() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_DOCUMENTATION);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_NAME) &&
-           verifier.Verify(name()) &&
-           VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_FIELDS) &&
-           verifier.Verify(fields()) &&
-           verifier.VerifyVectorOfTables(fields()) &&
-           VerifyField<uint8_t>(verifier, VT_IS_STRUCT) &&
-           VerifyField<int32_t>(verifier, VT_MINALIGN) &&
-           VerifyField<int32_t>(verifier, VT_BYTESIZE) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_ATTRIBUTES) &&
-           verifier.Verify(attributes()) &&
-           verifier.VerifyVectorOfTables(attributes()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_DOCUMENTATION) &&
-           verifier.Verify(documentation()) &&
-           verifier.VerifyVectorOfStrings(documentation()) &&
-           verifier.EndTable();
-  }
-};
-
-struct ObjectBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_name(flatbuffers::Offset<flatbuffers::String> name) {
-    fbb_.AddOffset(Object::VT_NAME, name);
-  }
-  void add_fields(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Field>>> fields) {
-    fbb_.AddOffset(Object::VT_FIELDS, fields);
-  }
-  void add_is_struct(bool is_struct) {
-    fbb_.AddElement<uint8_t>(Object::VT_IS_STRUCT, static_cast<uint8_t>(is_struct), 0);
-  }
-  void add_minalign(int32_t minalign) {
-    fbb_.AddElement<int32_t>(Object::VT_MINALIGN, minalign, 0);
-  }
-  void add_bytesize(int32_t bytesize) {
-    fbb_.AddElement<int32_t>(Object::VT_BYTESIZE, bytesize, 0);
-  }
-  void add_attributes(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<KeyValue>>> attributes) {
-    fbb_.AddOffset(Object::VT_ATTRIBUTES, attributes);
-  }
-  void add_documentation(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation) {
-    fbb_.AddOffset(Object::VT_DOCUMENTATION, documentation);
-  }
-  ObjectBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  ObjectBuilder &operator=(const ObjectBuilder &);
-  flatbuffers::Offset<Object> Finish() {
-    const auto end = fbb_.EndTable(start_, 7);
-    auto o = flatbuffers::Offset<Object>(end);
-    fbb_.Required(o, Object::VT_NAME);
-    fbb_.Required(o, Object::VT_FIELDS);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<Object> CreateObject(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<flatbuffers::String> name = 0,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Field>>> fields = 0,
-    bool is_struct = false,
-    int32_t minalign = 0,
-    int32_t bytesize = 0,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<KeyValue>>> attributes = 0,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation = 0) {
-  ObjectBuilder builder_(_fbb);
-  builder_.add_documentation(documentation);
-  builder_.add_attributes(attributes);
-  builder_.add_bytesize(bytesize);
-  builder_.add_minalign(minalign);
-  builder_.add_fields(fields);
-  builder_.add_name(name);
-  builder_.add_is_struct(is_struct);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<Object> CreateObjectDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    const char *name = nullptr,
-    const std::vector<flatbuffers::Offset<Field>> *fields = nullptr,
-    bool is_struct = false,
-    int32_t minalign = 0,
-    int32_t bytesize = 0,
-    const std::vector<flatbuffers::Offset<KeyValue>> *attributes = nullptr,
-    const std::vector<flatbuffers::Offset<flatbuffers::String>> *documentation = nullptr) {
-  return reflection::CreateObject(
-      _fbb,
-      name ? _fbb.CreateString(name) : 0,
-      fields ? _fbb.CreateVector<flatbuffers::Offset<Field>>(*fields) : 0,
-      is_struct,
-      minalign,
-      bytesize,
-      attributes ? _fbb.CreateVector<flatbuffers::Offset<KeyValue>>(*attributes) : 0,
-      documentation ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*documentation) : 0);
-}
-
-struct Schema FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_OBJECTS = 4,
-    VT_ENUMS = 6,
-    VT_FILE_IDENT = 8,
-    VT_FILE_EXT = 10,
-    VT_ROOT_TABLE = 12
-  };
-  const flatbuffers::Vector<flatbuffers::Offset<Object>> *objects() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<Object>> *>(VT_OBJECTS);
-  }
-  const flatbuffers::Vector<flatbuffers::Offset<Enum>> *enums() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<Enum>> *>(VT_ENUMS);
-  }
-  const flatbuffers::String *file_ident() const {
-    return GetPointer<const flatbuffers::String *>(VT_FILE_IDENT);
-  }
-  const flatbuffers::String *file_ext() const {
-    return GetPointer<const flatbuffers::String *>(VT_FILE_EXT);
-  }
-  const Object *root_table() const {
-    return GetPointer<const Object *>(VT_ROOT_TABLE);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_OBJECTS) &&
-           verifier.Verify(objects()) &&
-           verifier.VerifyVectorOfTables(objects()) &&
-           VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_ENUMS) &&
-           verifier.Verify(enums()) &&
-           verifier.VerifyVectorOfTables(enums()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_FILE_IDENT) &&
-           verifier.Verify(file_ident()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_FILE_EXT) &&
-           verifier.Verify(file_ext()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_ROOT_TABLE) &&
-           verifier.VerifyTable(root_table()) &&
-           verifier.EndTable();
-  }
-};
-
-struct SchemaBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_objects(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Object>>> objects) {
-    fbb_.AddOffset(Schema::VT_OBJECTS, objects);
-  }
-  void add_enums(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Enum>>> enums) {
-    fbb_.AddOffset(Schema::VT_ENUMS, enums);
-  }
-  void add_file_ident(flatbuffers::Offset<flatbuffers::String> file_ident) {
-    fbb_.AddOffset(Schema::VT_FILE_IDENT, file_ident);
-  }
-  void add_file_ext(flatbuffers::Offset<flatbuffers::String> file_ext) {
-    fbb_.AddOffset(Schema::VT_FILE_EXT, file_ext);
-  }
-  void add_root_table(flatbuffers::Offset<Object> root_table) {
-    fbb_.AddOffset(Schema::VT_ROOT_TABLE, root_table);
-  }
-  SchemaBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  SchemaBuilder &operator=(const SchemaBuilder &);
-  flatbuffers::Offset<Schema> Finish() {
-    const auto end = fbb_.EndTable(start_, 5);
-    auto o = flatbuffers::Offset<Schema>(end);
-    fbb_.Required(o, Schema::VT_OBJECTS);
-    fbb_.Required(o, Schema::VT_ENUMS);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<Schema> CreateSchema(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Object>>> objects = 0,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Enum>>> enums = 0,
-    flatbuffers::Offset<flatbuffers::String> file_ident = 0,
-    flatbuffers::Offset<flatbuffers::String> file_ext = 0,
-    flatbuffers::Offset<Object> root_table = 0) {
-  SchemaBuilder builder_(_fbb);
-  builder_.add_root_table(root_table);
-  builder_.add_file_ext(file_ext);
-  builder_.add_file_ident(file_ident);
-  builder_.add_enums(enums);
-  builder_.add_objects(objects);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<Schema> CreateSchemaDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    const std::vector<flatbuffers::Offset<Object>> *objects = nullptr,
-    const std::vector<flatbuffers::Offset<Enum>> *enums = nullptr,
-    const char *file_ident = nullptr,
-    const char *file_ext = nullptr,
-    flatbuffers::Offset<Object> root_table = 0) {
-  return reflection::CreateSchema(
-      _fbb,
-      objects ? _fbb.CreateVector<flatbuffers::Offset<Object>>(*objects) : 0,
-      enums ? _fbb.CreateVector<flatbuffers::Offset<Enum>>(*enums) : 0,
-      file_ident ? _fbb.CreateString(file_ident) : 0,
-      file_ext ? _fbb.CreateString(file_ext) : 0,
-      root_table);
-}
-
-inline const reflection::Schema *GetSchema(const void *buf) {
-  return flatbuffers::GetRoot<reflection::Schema>(buf);
-}
-
-inline const char *SchemaIdentifier() {
-  return "BFBS";
-}
-
-inline bool SchemaBufferHasIdentifier(const void *buf) {
-  return flatbuffers::BufferHasIdentifier(
-      buf, SchemaIdentifier());
-}
-
-inline bool VerifySchemaBuffer(
-    flatbuffers::Verifier &verifier) {
-  return verifier.VerifyBuffer<reflection::Schema>(SchemaIdentifier());
-}
-
-inline const char *SchemaExtension() {
-  return "bfbs";
-}
-
-inline void FinishSchemaBuffer(
-    flatbuffers::FlatBufferBuilder &fbb,
-    flatbuffers::Offset<reflection::Schema> root) {
-  fbb.Finish(root, SchemaIdentifier());
-}
-
-}  // namespace reflection
-
-#endif  // FLATBUFFERS_GENERATED_REFLECTION_REFLECTION_H_
diff --git a/third_party/flatbuffers/include/flatbuffers/util.h b/third_party/flatbuffers/include/flatbuffers/util.h
deleted file mode 100644
index 870d2b6..0000000
--- a/third_party/flatbuffers/include/flatbuffers/util.h
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FLATBUFFERS_UTIL_H_
-#define FLATBUFFERS_UTIL_H_
-
-#include <fstream>
-#include <iomanip>
-#include <string>
-#include <sstream>
-#include <stdint.h>
-#include <stdlib.h>
-#include <assert.h>
-#ifdef _WIN32
-#ifndef WIN32_LEAN_AND_MEAN
-  #define WIN32_LEAN_AND_MEAN
-#endif
-#ifndef NOMINMAX
-  #define NOMINMAX
-#endif
-#include <windows.h>
-#include <winbase.h>
-#include <direct.h>
-#else
-#include <limits.h>
-#endif
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "flatbuffers/flatbuffers.h"
-
-
-namespace flatbuffers {
-
-// Convert an integer or floating point value to a string.
-// In contrast to std::stringstream, "char" values are
-// converted to a string of digits, and we don't use scientific notation.
-template<typename T> std::string NumToString(T t) {
-  std::stringstream ss;
-  ss << t;
-  return ss.str();
-}
-// Avoid char types used as character data.
-template<> inline std::string NumToString<signed char>(signed char t) {
-  return NumToString(static_cast<int>(t));
-}
-template<> inline std::string NumToString<unsigned char>(unsigned char t) {
-  return NumToString(static_cast<int>(t));
-}
-
-// Special versions for floats/doubles.
-template<> inline std::string NumToString<double>(double t) {
-  // to_string() prints different numbers of digits for floats depending on
-  // platform and isn't available on Android, so we use stringstream
-  std::stringstream ss;
-  // Use std::fixed to surpress scientific notation.
-  ss << std::fixed << t;
-  auto s = ss.str();
-  // Sadly, std::fixed turns "1" into "1.00000", so here we undo that.
-  auto p = s.find_last_not_of('0');
-  if (p != std::string::npos) {
-    s.resize(p + 1);  // Strip trailing zeroes.
-    if (s[s.size() - 1] == '.')
-      s.erase(s.size() - 1, 1);  // Strip '.' if a whole number.
-  }
-  return s;
-}
-template<> inline std::string NumToString<float>(float t) {
-  return NumToString(static_cast<double>(t));
-}
-
-// Convert an integer value to a hexadecimal string.
-// The returned string length is always xdigits long, prefixed by 0 digits.
-// For example, IntToStringHex(0x23, 8) returns the string "00000023".
-inline std::string IntToStringHex(int i, int xdigits) {
-  std::stringstream ss;
-  ss << std::setw(xdigits)
-     << std::setfill('0')
-     << std::hex
-     << std::uppercase
-     << i;
-  return ss.str();
-}
-
-// Portable implementation of strtoll().
-inline int64_t StringToInt(const char *str, char **endptr = nullptr,
-                           int base = 10) {
-  #ifdef _MSC_VER
-    return _strtoi64(str, endptr, base);
-  #else
-    return strtoll(str, endptr, base);
-  #endif
-}
-
-// Portable implementation of strtoull().
-inline uint64_t StringToUInt(const char *str, char **endptr = nullptr,
-                             int base = 10) {
-  #ifdef _MSC_VER
-    return _strtoui64(str, endptr, base);
-  #else
-    return strtoull(str, endptr, base);
-  #endif
-}
-
-typedef bool (*LoadFileFunction)(const char *filename, bool binary,
-                                 std::string *dest);
-typedef bool (*FileExistsFunction)(const char *filename);
-
-LoadFileFunction SetLoadFileFunction(LoadFileFunction load_file_function);
-
-FileExistsFunction SetFileExistsFunction(FileExistsFunction
-                                         file_exists_function);
-
-
-// Check if file "name" exists.
-bool FileExists(const char *name);
-
-// Check if "name" exists and it is also a directory.
-bool DirExists(const char *name);
-
-// Load file "name" into "buf" returning true if successful
-// false otherwise.  If "binary" is false data is read
-// using ifstream's text mode, otherwise data is read with
-// no transcoding.
-bool LoadFile(const char *name, bool binary, std::string *buf);
-
-// Save data "buf" of length "len" bytes into a file
-// "name" returning true if successful, false otherwise.
-// If "binary" is false data is written using ifstream's
-// text mode, otherwise data is written with no
-// transcoding.
-inline bool SaveFile(const char *name, const char *buf, size_t len,
-                     bool binary) {
-  std::ofstream ofs(name, binary ? std::ofstream::binary : std::ofstream::out);
-  if (!ofs.is_open()) return false;
-  ofs.write(buf, len);
-  return !ofs.bad();
-}
-
-// Save data "buf" into file "name" returning true if
-// successful, false otherwise.  If "binary" is false
-// data is written using ifstream's text mode, otherwise
-// data is written with no transcoding.
-inline bool SaveFile(const char *name, const std::string &buf, bool binary) {
-  return SaveFile(name, buf.c_str(), buf.size(), binary);
-}
-
-// Functionality for minimalistic portable path handling:
-
-static const char kPosixPathSeparator = '/';
-#ifdef _WIN32
-static const char kPathSeparator = '\\';
-static const char *PathSeparatorSet = "\\/";  // Intentionally no ':'
-#else
-static const char kPathSeparator = kPosixPathSeparator;
-static const char *PathSeparatorSet = "/";
-#endif // _WIN32
-
-// Returns the path with the extension, if any, removed.
-inline std::string StripExtension(const std::string &filepath) {
-  size_t i = filepath.find_last_of(".");
-  return i != std::string::npos ? filepath.substr(0, i) : filepath;
-}
-
-// Returns the extension, if any.
-inline std::string GetExtension(const std::string &filepath) {
-  size_t i = filepath.find_last_of(".");
-  return i != std::string::npos ? filepath.substr(i + 1) : "";
-}
-
-// Return the last component of the path, after the last separator.
-inline std::string StripPath(const std::string &filepath) {
-  size_t i = filepath.find_last_of(PathSeparatorSet);
-  return i != std::string::npos ? filepath.substr(i + 1) : filepath;
-}
-
-// Strip the last component of the path + separator.
-inline std::string StripFileName(const std::string &filepath) {
-  size_t i = filepath.find_last_of(PathSeparatorSet);
-  return i != std::string::npos ? filepath.substr(0, i) : "";
-}
-
-// Concatenates a path with a filename, regardless of wether the path
-// ends in a separator or not.
-inline std::string ConCatPathFileName(const std::string &path,
-                                      const std::string &filename) {
-  std::string filepath = path;
-  if (path.length() && path[path.size() - 1] != kPathSeparator &&
-                       path[path.size() - 1] != kPosixPathSeparator)
-    filepath += kPathSeparator;
-  filepath += filename;
-  return filepath;
-}
-
-// This function ensure a directory exists, by recursively
-// creating dirs for any parts of the path that don't exist yet.
-inline void EnsureDirExists(const std::string &filepath) {
-  auto parent = StripFileName(filepath);
-  if (parent.length()) EnsureDirExists(parent);
-  #ifdef _WIN32
-    (void)_mkdir(filepath.c_str());
-  #else
-    mkdir(filepath.c_str(), S_IRWXU|S_IRGRP|S_IXGRP);
-  #endif
-}
-
-// Obtains the absolute path from any other path.
-// Returns the input path if the absolute path couldn't be resolved.
-inline std::string AbsolutePath(const std::string &filepath) {
-  #ifdef FLATBUFFERS_NO_ABSOLUTE_PATH_RESOLUTION
-    return filepath;
-  #else
-    #ifdef _WIN32
-      char abs_path[MAX_PATH];
-      return GetFullPathNameA(filepath.c_str(), MAX_PATH, abs_path, nullptr)
-    #else
-      char abs_path[PATH_MAX];
-      return realpath(filepath.c_str(), abs_path)
-    #endif
-      ? abs_path
-      : filepath;
-  #endif // FLATBUFFERS_NO_ABSOLUTE_PATH_RESOLUTION
-}
-
-// To and from UTF-8 unicode conversion functions
-
-// Convert a unicode code point into a UTF-8 representation by appending it
-// to a string. Returns the number of bytes generated.
-inline int ToUTF8(uint32_t ucc, std::string *out) {
-  assert(!(ucc & 0x80000000));  // Top bit can't be set.
-  // 6 possible encodings: http://en.wikipedia.org/wiki/UTF-8
-  for (int i = 0; i < 6; i++) {
-    // Max bits this encoding can represent.
-    uint32_t max_bits = 6 + i * 5 + static_cast<int>(!i);
-    if (ucc < (1u << max_bits)) {  // does it fit?
-      // Remaining bits not encoded in the first byte, store 6 bits each
-      uint32_t remain_bits = i * 6;
-      // Store first byte:
-      (*out) += static_cast<char>((0xFE << (max_bits - remain_bits)) |
-                                 (ucc >> remain_bits));
-      // Store remaining bytes:
-      for (int j = i - 1; j >= 0; j--) {
-        (*out) += static_cast<char>(((ucc >> (j * 6)) & 0x3F) | 0x80);
-      }
-      return i + 1;  // Return the number of bytes added.
-    }
-  }
-  assert(0);  // Impossible to arrive here.
-  return -1;
-}
-
-// Converts whatever prefix of the incoming string corresponds to a valid
-// UTF-8 sequence into a unicode code. The incoming pointer will have been
-// advanced past all bytes parsed.
-// returns -1 upon corrupt UTF-8 encoding (ignore the incoming pointer in
-// this case).
-inline int FromUTF8(const char **in) {
-  int len = 0;
-  // Count leading 1 bits.
-  for (int mask = 0x80; mask >= 0x04; mask >>= 1) {
-    if (**in & mask) {
-      len++;
-    } else {
-      break;
-    }
-  }
-  if ((**in << len) & 0x80) return -1;  // Bit after leading 1's must be 0.
-  if (!len) return *(*in)++;
-  // UTF-8 encoded values with a length are between 2 and 4 bytes.
-  if (len < 2 || len > 4) {
-    return -1;
-  }
-  // Grab initial bits of the code.
-  int ucc = *(*in)++ & ((1 << (7 - len)) - 1);
-  for (int i = 0; i < len - 1; i++) {
-    if ((**in & 0xC0) != 0x80) return -1;  // Upper bits must 1 0.
-    ucc <<= 6;
-    ucc |= *(*in)++ & 0x3F;  // Grab 6 more bits of the code.
-  }
-  // UTF-8 cannot encode values between 0xD800 and 0xDFFF (reserved for
-  // UTF-16 surrogate pairs).
-  if (ucc >= 0xD800 && ucc <= 0xDFFF) {
-    return -1;
-  }
-  // UTF-8 must represent code points in their shortest possible encoding.
-  switch (len) {
-    case 2:
-      // Two bytes of UTF-8 can represent code points from U+0080 to U+07FF.
-      if (ucc < 0x0080 || ucc > 0x07FF) {
-        return -1;
-      }
-      break;
-    case 3:
-      // Three bytes of UTF-8 can represent code points from U+0800 to U+FFFF.
-      if (ucc < 0x0800 || ucc > 0xFFFF) {
-        return -1;
-      }
-      break;
-    case 4:
-      // Four bytes of UTF-8 can represent code points from U+10000 to U+10FFFF.
-      if (ucc < 0x10000 || ucc > 0x10FFFF) {
-        return -1;
-      }
-      break;
-  }
-  return ucc;
-}
-
-// Wraps a string to a maximum length, inserting new lines where necessary. Any
-// existing whitespace will be collapsed down to a single space. A prefix or
-// suffix can be provided, which will be inserted before or after a wrapped
-// line, respectively.
-inline std::string WordWrap(const std::string in, size_t max_length,
-                            const std::string wrapped_line_prefix,
-                            const std::string wrapped_line_suffix) {
-  std::istringstream in_stream(in);
-  std::string wrapped, line, word;
-
-  in_stream >> word;
-  line = word;
-
-  while (in_stream >> word) {
-    if ((line.length() + 1 + word.length() + wrapped_line_suffix.length()) <
-        max_length) {
-      line += " " + word;
-    } else {
-      wrapped += line + wrapped_line_suffix + "\n";
-      line = wrapped_line_prefix + word;
-    }
-  }
-  wrapped += line;
-
-  return wrapped;
-}
-
-}  // namespace flatbuffers
-
-#endif  // FLATBUFFERS_UTIL_H_
diff --git a/third_party/flatbuffers/java/com/google/flatbuffers/Constants.java b/third_party/flatbuffers/java/com/google/flatbuffers/Constants.java
deleted file mode 100644
index f590631..0000000
--- a/third_party/flatbuffers/java/com/google/flatbuffers/Constants.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.flatbuffers;
-
-/// @cond FLATBUFFERS_INTERNAL
-
-/**
- * Class that holds shared constants
- */
-public class Constants {
-    // Java doesn't seem to have these.
-    /** The number of bytes in an `byte`. */
-    static final int SIZEOF_BYTE = 1;
-    /** The number of bytes in a `short`. */
-    static final int SIZEOF_SHORT = 2;
-    /** The number of bytes in an `int`. */
-    static final int SIZEOF_INT = 4;
-    /** The number of bytes in an `float`. */
-    static final int SIZEOF_FLOAT = 4;
-    /** The number of bytes in an `long`. */
-    static final int SIZEOF_LONG = 8;
-    /** The number of bytes in an `double`. */
-    static final int SIZEOF_DOUBLE = 8;
-    /** The number of bytes in a file identifier. */
-    static final int FILE_IDENTIFIER_LENGTH = 4;
-}
-
-/// @endcond
diff --git a/third_party/flatbuffers/java/com/google/flatbuffers/FlatBufferBuilder.java b/third_party/flatbuffers/java/com/google/flatbuffers/FlatBufferBuilder.java
deleted file mode 100644
index a138ed5..0000000
--- a/third_party/flatbuffers/java/com/google/flatbuffers/FlatBufferBuilder.java
+++ /dev/null
@@ -1,858 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.flatbuffers;
-
-import static com.google.flatbuffers.Constants.*;
-
-import java.nio.CharBuffer;
-import java.nio.charset.CharacterCodingException;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import java.util.Arrays;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.charset.Charset;
-
-/// @file
-/// @addtogroup flatbuffers_java_api
-/// @{
-
-/**
- * Class that helps you build a FlatBuffer.  See the section
- * "Use in Java/C#" in the main FlatBuffers documentation.
- */
-public class FlatBufferBuilder {
-    /// @cond FLATBUFFERS_INTERNAL
-    ByteBuffer bb;                  // Where we construct the FlatBuffer.
-    int space;                      // Remaining space in the ByteBuffer.
-    static final Charset utf8charset = Charset.forName("UTF-8"); // The UTF-8 character set used by FlatBuffers.
-    int minalign = 1;               // Minimum alignment encountered so far.
-    int[] vtable = null;            // The vtable for the current table.
-    int vtable_in_use = 0;          // The amount of fields we're actually using.
-    boolean nested = false;         // Whether we are currently serializing a table.
-    boolean finished = false;       // Whether the buffer is finished.
-    int object_start;               // Starting offset of the current struct/table.
-    int[] vtables = new int[16];    // List of offsets of all vtables.
-    int num_vtables = 0;            // Number of entries in `vtables` in use.
-    int vector_num_elems = 0;       // For the current vector being built.
-    boolean force_defaults = false; // False omits default values from the serialized data.
-    CharsetEncoder encoder = utf8charset.newEncoder();
-    ByteBuffer dst;
-    /// @endcond
-
-   /**
-    * Start with a buffer of size `initial_size`, then grow as required.
-    *
-    * @param initial_size The initial size of the internal buffer to use.
-    */
-    public FlatBufferBuilder(int initial_size) {
-        if (initial_size <= 0) initial_size = 1;
-        space = initial_size;
-        bb = newByteBuffer(initial_size);
-    }
-
-   /**
-    * Start with a buffer of 1KiB, then grow as required.
-    */
-    public FlatBufferBuilder() {
-        this(1024);
-    }
-
-    /**
-     * Alternative constructor allowing reuse of {@link ByteBuffer}s.  The builder
-     * can still grow the buffer as necessary.  User classes should make sure
-     * to call {@link #dataBuffer()} to obtain the resulting encoded message.
-     *
-     * @param existing_bb The byte buffer to reuse.
-     */
-    public FlatBufferBuilder(ByteBuffer existing_bb) {
-        init(existing_bb);
-    }
-
-    /**
-     * Alternative initializer that allows reusing this object on an existing
-     * `ByteBuffer`. This method resets the builder's internal state, but keeps
-     * objects that have been allocated for temporary storage.
-     *
-     * @param existing_bb The byte buffer to reuse.
-     * @return Returns `this`.
-     */
-    public FlatBufferBuilder init(ByteBuffer existing_bb){
-        bb = existing_bb;
-        bb.clear();
-        bb.order(ByteOrder.LITTLE_ENDIAN);
-        minalign = 1;
-        space = bb.capacity();
-        vtable_in_use = 0;
-        nested = false;
-        finished = false;
-        object_start = 0;
-        num_vtables = 0;
-        vector_num_elems = 0;
-        return this;
-    }
-
-    /**
-     * Reset the FlatBufferBuilder by purging all data that it holds.
-     */
-    public void clear(){
-        space = bb.capacity();
-        bb.clear();
-        minalign = 1;
-        while(vtable_in_use > 0) vtable[--vtable_in_use] = 0;
-        vtable_in_use = 0;
-        nested = false;
-        finished = false;
-        object_start = 0;
-        num_vtables = 0;
-        vector_num_elems = 0;
-    }
-
-    /// @cond FLATBUFFERS_INTERNAL
-    /**
-     * Create a `ByteBuffer` with a given capacity.
-     *
-     * @param capacity The size of the `ByteBuffer` to allocate.
-     * @return Returns the new `ByteBuffer` that was allocated.
-     */
-    static ByteBuffer newByteBuffer(int capacity) {
-        ByteBuffer newbb = ByteBuffer.allocate(capacity);
-        newbb.order(ByteOrder.LITTLE_ENDIAN);
-        return newbb;
-    }
-
-    /**
-     * Doubles the size of the backing {@link ByteBuffer} and copies the old data towards the
-     * end of the new buffer (since we build the buffer backwards).
-     *
-     * @param bb The current buffer with the existing data.
-     * @return A new byte buffer with the old data copied copied to it.  The data is
-     * located at the end of the buffer.
-     */
-    static ByteBuffer growByteBuffer(ByteBuffer bb) {
-        int old_buf_size = bb.capacity();
-        if ((old_buf_size & 0xC0000000) != 0)  // Ensure we don't grow beyond what fits in an int.
-            throw new AssertionError("FlatBuffers: cannot grow buffer beyond 2 gigabytes.");
-        int new_buf_size = old_buf_size << 1;
-        bb.position(0);
-        ByteBuffer nbb = newByteBuffer(new_buf_size);
-        nbb.position(new_buf_size - old_buf_size);
-        nbb.put(bb);
-        return nbb;
-    }
-
-   /**
-    * Offset relative to the end of the buffer.
-    *
-    * @return Offset relative to the end of the buffer.
-    */
-    public int offset() {
-        return bb.capacity() - space;
-    }
-
-   /**
-    * Add zero valued bytes to prepare a new entry to be added.
-    *
-    * @param byte_size Number of bytes to add.
-    */
-    public void pad(int byte_size) {
-        for (int i = 0; i < byte_size; i++) bb.put(--space, (byte)0);
-    }
-
-   /**
-    * Prepare to write an element of `size` after `additional_bytes`
-    * have been written, e.g. if you write a string, you need to align such
-    * the int length field is aligned to {@link com.google.flatbuffers.Constants#SIZEOF_INT}, and
-    * the string data follows it directly.  If all you need to do is alignment, `additional_bytes`
-    * will be 0.
-    *
-    * @param size This is the of the new element to write.
-    * @param additional_bytes The padding size.
-    */
-    public void prep(int size, int additional_bytes) {
-        // Track the biggest thing we've ever aligned to.
-        if (size > minalign) minalign = size;
-        // Find the amount of alignment needed such that `size` is properly
-        // aligned after `additional_bytes`
-        int align_size = ((~(bb.capacity() - space + additional_bytes)) + 1) & (size - 1);
-        // Reallocate the buffer if needed.
-        while (space < align_size + size + additional_bytes) {
-            int old_buf_size = bb.capacity();
-            bb = growByteBuffer(bb);
-            space += bb.capacity() - old_buf_size;
-        }
-        pad(align_size);
-    }
-
-    /**
-     * Add a `boolean` to the buffer, backwards from the current location. Doesn't align nor
-     * check for space.
-     *
-     * @param x A `boolean` to put into the buffer.
-     */
-    public void putBoolean(boolean x) { bb.put      (space -= Constants.SIZEOF_BYTE, (byte)(x ? 1 : 0)); }
-
-    /**
-     * Add a `byte` to the buffer, backwards from the current location. Doesn't align nor
-     * check for space.
-     *
-     * @param x A `byte` to put into the buffer.
-     */
-    public void putByte   (byte    x) { bb.put      (space -= Constants.SIZEOF_BYTE, x); }
-
-    /**
-     * Add a `short` to the buffer, backwards from the current location. Doesn't align nor
-     * check for space.
-     *
-     * @param x A `short` to put into the buffer.
-     */
-    public void putShort  (short   x) { bb.putShort (space -= Constants.SIZEOF_SHORT, x); }
-
-    /**
-     * Add an `int` to the buffer, backwards from the current location. Doesn't align nor
-     * check for space.
-     *
-     * @param x An `int` to put into the buffer.
-     */
-    public void putInt    (int     x) { bb.putInt   (space -= Constants.SIZEOF_INT, x); }
-
-    /**
-     * Add a `long` to the buffer, backwards from the current location. Doesn't align nor
-     * check for space.
-     *
-     * @param x A `long` to put into the buffer.
-     */
-    public void putLong   (long    x) { bb.putLong  (space -= Constants.SIZEOF_LONG, x); }
-
-    /**
-     * Add a `float` to the buffer, backwards from the current location. Doesn't align nor
-     * check for space.
-     *
-     * @param x A `float` to put into the buffer.
-     */
-    public void putFloat  (float   x) { bb.putFloat (space -= Constants.SIZEOF_FLOAT, x); }
-
-    /**
-     * Add a `double` to the buffer, backwards from the current location. Doesn't align nor
-     * check for space.
-     *
-     * @param x A `double` to put into the buffer.
-     */
-    public void putDouble (double  x) { bb.putDouble(space -= Constants.SIZEOF_DOUBLE, x); }
-    /// @endcond
-
-    /**
-     * Add a `boolean` to the buffer, properly aligned, and grows the buffer (if necessary).
-     *
-     * @param x A `boolean` to put into the buffer.
-     */
-    public void addBoolean(boolean x) { prep(Constants.SIZEOF_BYTE, 0); putBoolean(x); }
-
-    /**
-     * Add a `byte` to the buffer, properly aligned, and grows the buffer (if necessary).
-     *
-     * @param x A `byte` to put into the buffer.
-     */
-    public void addByte   (byte    x) { prep(Constants.SIZEOF_BYTE, 0); putByte   (x); }
-
-    /**
-     * Add a `short` to the buffer, properly aligned, and grows the buffer (if necessary).
-     *
-     * @param x A `short` to put into the buffer.
-     */
-    public void addShort  (short   x) { prep(Constants.SIZEOF_SHORT, 0); putShort  (x); }
-
-    /**
-     * Add an `int` to the buffer, properly aligned, and grows the buffer (if necessary).
-     *
-     * @param x An `int` to put into the buffer.
-     */
-    public void addInt    (int     x) { prep(Constants.SIZEOF_INT, 0); putInt    (x); }
-
-    /**
-     * Add a `long` to the buffer, properly aligned, and grows the buffer (if necessary).
-     *
-     * @param x A `long` to put into the buffer.
-     */
-    public void addLong   (long    x) { prep(Constants.SIZEOF_LONG, 0); putLong   (x); }
-
-    /**
-     * Add a `float` to the buffer, properly aligned, and grows the buffer (if necessary).
-     *
-     * @param x A `float` to put into the buffer.
-     */
-    public void addFloat  (float   x) { prep(Constants.SIZEOF_FLOAT, 0); putFloat  (x); }
-
-    /**
-     * Add a `double` to the buffer, properly aligned, and grows the buffer (if necessary).
-     *
-     * @param x A `double` to put into the buffer.
-     */
-    public void addDouble (double  x) { prep(Constants.SIZEOF_DOUBLE, 0); putDouble (x); }
-
-   /**
-    * Adds on offset, relative to where it will be written.
-    *
-    * @param off The offset to add.
-    */
-    public void addOffset(int off) {
-        prep(SIZEOF_INT, 0);  // Ensure alignment is already done.
-        assert off <= offset();
-        off = offset() - off + SIZEOF_INT;
-        putInt(off);
-    }
-
-   /// @cond FLATBUFFERS_INTERNAL
-   /**
-    * Start a new array/vector of objects.  Users usually will not call
-    * this directly.  The `FlatBuffers` compiler will create a start/end
-    * method for vector types in generated code.
-    * <p>
-    * The expected sequence of calls is:
-    * <ol>
-    * <li>Start the array using this method.</li>
-    * <li>Call {@link #addOffset(int)} `num_elems` number of times to set
-    * the offset of each element in the array.</li>
-    * <li>Call {@link #endVector()} to retrieve the offset of the array.</li>
-    * </ol>
-    * <p>
-    * For example, to create an array of strings, do:
-    * <pre>{@code
-    * // Need 10 strings
-    * FlatBufferBuilder builder = new FlatBufferBuilder(existingBuffer);
-    * int[] offsets = new int[10];
-    *
-    * for (int i = 0; i < 10; i++) {
-    *   offsets[i] = fbb.createString(" " + i);
-    * }
-    *
-    * // Have the strings in the buffer, but don't have a vector.
-    * // Add a vector that references the newly created strings:
-    * builder.startVector(4, offsets.length, 4);
-    *
-    * // Add each string to the newly created vector
-    * // The strings are added in reverse order since the buffer
-    * // is filled in back to front
-    * for (int i = offsets.length - 1; i >= 0; i--) {
-    *   builder.addOffset(offsets[i]);
-    * }
-    *
-    * // Finish off the vector
-    * int offsetOfTheVector = fbb.endVector();
-    * }</pre>
-    *
-    * @param elem_size The size of each element in the array.
-    * @param num_elems The number of elements in the array.
-    * @param alignment The alignment of the array.
-    */
-    public void startVector(int elem_size, int num_elems, int alignment) {
-        notNested();
-        vector_num_elems = num_elems;
-        prep(SIZEOF_INT, elem_size * num_elems);
-        prep(alignment, elem_size * num_elems); // Just in case alignment > int.
-        nested = true;
-    }
-
-   /**
-    * Finish off the creation of an array and all its elements.  The array
-    * must be created with {@link #startVector(int, int, int)}.
-    *
-    * @return The offset at which the newly created array starts.
-    * @see #startVector(int, int, int)
-    */
-    public int endVector() {
-        if (!nested)
-            throw new AssertionError("FlatBuffers: endVector called without startVector");
-        nested = false;
-        putInt(vector_num_elems);
-        return offset();
-    }
-    /// @endcond
-
-    /**
-     * Create a new array/vector and return a ByteBuffer to be filled later.
-     * Call {@link #endVector} after this method to get an offset to the beginning
-     * of vector.
-     *
-     * @param elem_size the size of each element in bytes.
-     * @param num_elems number of elements in the vector.
-     * @param alignment byte alignment.
-     * @return ByteBuffer with position and limit set to the space allocated for the array.
-     */
-    public ByteBuffer createUnintializedVector(int elem_size, int num_elems, int alignment) {
-        int length = elem_size * num_elems;
-        startVector(elem_size, num_elems, alignment);
-
-        bb.position(space -= length);
-
-        // Slice and limit the copy vector to point to the 'array'
-        ByteBuffer copy = bb.slice().order(ByteOrder.LITTLE_ENDIAN);
-        copy.limit(length);
-        return copy;
-    }
-
-   /**
-     * Create a vector of tables.
-     *
-     * @param offsets Offsets of the tables.
-     * @return Returns offset of the vector.
-     */
-    public int createVectorOfTables(int[] offsets) {
-        notNested();
-        startVector(Constants.SIZEOF_INT, offsets.length, Constants.SIZEOF_INT);
-        for(int i = offsets.length - 1; i >= 0; i--) addOffset(offsets[i]);
-        return endVector();
-    }
-
-    /**
-     * Create a vector of sorted by the key tables.
-     *
-     * @param obj Instance of the table subclass.
-     * @param offsets Offsets of the tables.
-     * @return Returns offset of the sorted vector.
-     */
-    public <T extends Table> int createSortedVectorOfTables(T obj, int[] offsets) {
-        obj.sortTables(offsets, bb);
-        return createVectorOfTables(offsets);
-    }
-	
-   /**
-    * Encode the string `s` in the buffer using UTF-8.  If {@code s} is
-    * already a {@link CharBuffer}, this method is allocation free.
-    *
-    * @param s The string to encode.
-    * @return The offset in the buffer where the encoded string starts.
-    */
-    public int createString(CharSequence s) {
-        int length = s.length();
-        int estimatedDstCapacity = (int) (length * encoder.maxBytesPerChar());
-        if (dst == null || dst.capacity() < estimatedDstCapacity) {
-            dst = ByteBuffer.allocate(Math.max(128, estimatedDstCapacity));
-        }
-
-        dst.clear();
-
-        CharBuffer src = s instanceof CharBuffer ? (CharBuffer) s :
-            CharBuffer.wrap(s);
-        CoderResult result = encoder.encode(src, dst, true);
-        if (result.isError()) {
-            try {
-                result.throwException();
-            } catch (CharacterCodingException x) {
-                throw new Error(x);
-            }
-        }
-
-        dst.flip();
-        return createString(dst);
-    }
-
-   /**
-    * Create a string in the buffer from an already encoded UTF-8 string in a ByteBuffer.
-    *
-    * @param s An already encoded UTF-8 string as a `ByteBuffer`.
-    * @return The offset in the buffer where the encoded string starts.
-    */
-    public int createString(ByteBuffer s) {
-        int length = s.remaining();
-        addByte((byte)0);
-        startVector(1, length, 1);
-        bb.position(space -= length);
-        bb.put(s);
-        return endVector();
-    }
-
-    /**
-     * Create a byte array in the buffer.
-     *
-     * @param arr A source array with data
-     * @return The offset in the buffer where the encoded array starts.
-     */
-    public int createByteVector(byte[] arr) {
-        int length = arr.length;
-        startVector(1, length, 1);
-        bb.position(space -= length);
-        bb.put(arr);
-        return endVector();
-    }
-
-   /// @cond FLATBUFFERS_INTERNAL
-   /**
-    * Should not be accessing the final buffer before it is finished.
-    */
-    public void finished() {
-        if (!finished)
-            throw new AssertionError(
-                "FlatBuffers: you can only access the serialized buffer after it has been" +
-                " finished by FlatBufferBuilder.finish().");
-    }
-
-   /**
-    * Should not be creating any other object, string or vector
-    * while an object is being constructed.
-    */
-    public void notNested() {
-        if (nested)
-            throw new AssertionError("FlatBuffers: object serialization must not be nested.");
-    }
-
-   /**
-    * Structures are always stored inline, they need to be created right
-    * where they're used.  You'll get this assertion failure if you
-    * created it elsewhere.
-    *
-    * @param obj The offset of the created object.
-    */
-    public void Nested(int obj) {
-        if (obj != offset())
-            throw new AssertionError("FlatBuffers: struct must be serialized inline.");
-    }
-
-   /**
-    * Start encoding a new object in the buffer.  Users will not usually need to
-    * call this directly. The `FlatBuffers` compiler will generate helper methods
-    * that call this method internally.
-    * <p>
-    * For example, using the "Monster" code found on the "landing page". An
-    * object of type `Monster` can be created using the following code:
-    *
-    * <pre>{@code
-    * int testArrayOfString = Monster.createTestarrayofstringVector(fbb, new int[] {
-    *   fbb.createString("test1"),
-    *   fbb.createString("test2")
-    * });
-    *
-    * Monster.startMonster(fbb);
-    * Monster.addPos(fbb, Vec3.createVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0,
-    *   Color.Green, (short)5, (byte)6));
-    * Monster.addHp(fbb, (short)80);
-    * Monster.addName(fbb, str);
-    * Monster.addInventory(fbb, inv);
-    * Monster.addTestType(fbb, (byte)Any.Monster);
-    * Monster.addTest(fbb, mon2);
-    * Monster.addTest4(fbb, test4);
-    * Monster.addTestarrayofstring(fbb, testArrayOfString);
-    * int mon = Monster.endMonster(fbb);
-    * }</pre>
-    * <p>
-    * Here:
-    * <ul>
-    * <li>The call to `Monster#startMonster(FlatBufferBuilder)` will call this
-    * method with the right number of fields set.</li>
-    * <li>`Monster#endMonster(FlatBufferBuilder)` will ensure {@link #endObject()} is called.</li>
-    * </ul>
-    * <p>
-    * It's not recommended to call this method directly.  If it's called manually, you must ensure
-    * to audit all calls to it whenever fields are added or removed from your schema.  This is
-    * automatically done by the code generated by the `FlatBuffers` compiler.
-    *
-    * @param numfields The number of fields found in this object.
-    */
-    public void startObject(int numfields) {
-        notNested();
-        if (vtable == null || vtable.length < numfields) vtable = new int[numfields];
-        vtable_in_use = numfields;
-        Arrays.fill(vtable, 0, vtable_in_use, 0);
-        nested = true;
-        object_start = offset();
-    }
-
-    /**
-     * Add a `boolean` to a table at `o` into its vtable, with value `x` and default `d`.
-     *
-     * @param o The index into the vtable.
-     * @param x A `boolean` to put into the buffer, depending on how defaults are handled. If
-     * `force_defaults` is `false`, compare `x` against the default value `d`. If `x` contains the
-     * default value, it can be skipped.
-     * @param d A `boolean` default value to compare against when `force_defaults` is `false`.
-     */
-    public void addBoolean(int o, boolean x, boolean d) { if(force_defaults || x != d) { addBoolean(x); slot(o); } }
-
-    /**
-     * Add a `byte` to a table at `o` into its vtable, with value `x` and default `d`.
-     *
-     * @param o The index into the vtable.
-     * @param x A `byte` to put into the buffer, depending on how defaults are handled. If
-     * `force_defaults` is `false`, compare `x` against the default value `d`. If `x` contains the
-     * default value, it can be skipped.
-     * @param d A `byte` default value to compare against when `force_defaults` is `false`.
-     */
-    public void addByte   (int o, byte    x, int     d) { if(force_defaults || x != d) { addByte   (x); slot(o); } }
-
-    /**
-     * Add a `short` to a table at `o` into its vtable, with value `x` and default `d`.
-     *
-     * @param o The index into the vtable.
-     * @param x A `short` to put into the buffer, depending on how defaults are handled. If
-     * `force_defaults` is `false`, compare `x` against the default value `d`. If `x` contains the
-     * default value, it can be skipped.
-     * @param d A `short` default value to compare against when `force_defaults` is `false`.
-     */
-    public void addShort  (int o, short   x, int     d) { if(force_defaults || x != d) { addShort  (x); slot(o); } }
-
-    /**
-     * Add an `int` to a table at `o` into its vtable, with value `x` and default `d`.
-     *
-     * @param o The index into the vtable.
-     * @param x An `int` to put into the buffer, depending on how defaults are handled. If
-     * `force_defaults` is `false`, compare `x` against the default value `d`. If `x` contains the
-     * default value, it can be skipped.
-     * @param d An `int` default value to compare against when `force_defaults` is `false`.
-     */
-    public void addInt    (int o, int     x, int     d) { if(force_defaults || x != d) { addInt    (x); slot(o); } }
-
-    /**
-     * Add a `long` to a table at `o` into its vtable, with value `x` and default `d`.
-     *
-     * @param o The index into the vtable.
-     * @param x A `long` to put into the buffer, depending on how defaults are handled. If
-     * `force_defaults` is `false`, compare `x` against the default value `d`. If `x` contains the
-     * default value, it can be skipped.
-     * @param d A `long` default value to compare against when `force_defaults` is `false`.
-     */
-    public void addLong   (int o, long    x, long    d) { if(force_defaults || x != d) { addLong   (x); slot(o); } }
-
-    /**
-     * Add a `float` to a table at `o` into its vtable, with value `x` and default `d`.
-     *
-     * @param o The index into the vtable.
-     * @param x A `float` to put into the buffer, depending on how defaults are handled. If
-     * `force_defaults` is `false`, compare `x` against the default value `d`. If `x` contains the
-     * default value, it can be skipped.
-     * @param d A `float` default value to compare against when `force_defaults` is `false`.
-     */
-    public void addFloat  (int o, float   x, double  d) { if(force_defaults || x != d) { addFloat  (x); slot(o); } }
-
-    /**
-     * Add a `double` to a table at `o` into its vtable, with value `x` and default `d`.
-     *
-     * @param o The index into the vtable.
-     * @param x A `double` to put into the buffer, depending on how defaults are handled. If
-     * `force_defaults` is `false`, compare `x` against the default value `d`. If `x` contains the
-     * default value, it can be skipped.
-     * @param d A `double` default value to compare against when `force_defaults` is `false`.
-     */
-    public void addDouble (int o, double  x, double  d) { if(force_defaults || x != d) { addDouble (x); slot(o); } }
-
-    /**
-     * Add an `offset` to a table at `o` into its vtable, with value `x` and default `d`.
-     *
-     * @param o The index into the vtable.
-     * @param x An `offset` to put into the buffer, depending on how defaults are handled. If
-     * `force_defaults` is `false`, compare `x` against the default value `d`. If `x` contains the
-     * default value, it can be skipped.
-     * @param d An `offset` default value to compare against when `force_defaults` is `false`.
-     */
-    public void addOffset (int o, int     x, int     d) { if(force_defaults || x != d) { addOffset (x); slot(o); } }
-
-    /**
-     * Add a struct to the table. Structs are stored inline, so nothing additional is being added.
-     *
-     * @param voffset The index into the vtable.
-     * @param x The offset of the created struct.
-     * @param d The default value is always `0`.
-     */
-    public void addStruct(int voffset, int x, int d) {
-        if(x != d) {
-            Nested(x);
-            slot(voffset);
-        }
-    }
-
-    /**
-     * Set the current vtable at `voffset` to the current location in the buffer.
-     *
-     * @param voffset The index into the vtable to store the offset relative to the end of the
-     * buffer.
-     */
-    public void slot(int voffset) {
-        vtable[voffset] = offset();
-    }
-
-   /**
-    * Finish off writing the object that is under construction.
-    *
-    * @return The offset to the object inside {@link #dataBuffer()}.
-    * @see #startObject(int)
-    */
-    public int endObject() {
-        if (vtable == null || !nested)
-            throw new AssertionError("FlatBuffers: endObject called without startObject");
-        addInt(0);
-        int vtableloc = offset();
-        // Write out the current vtable.
-        for (int i = vtable_in_use - 1; i >= 0 ; i--) {
-            // Offset relative to the start of the table.
-            short off = (short)(vtable[i] != 0 ? vtableloc - vtable[i] : 0);
-            addShort(off);
-        }
-
-        final int standard_fields = 2; // The fields below:
-        addShort((short)(vtableloc - object_start));
-        addShort((short)((vtable_in_use + standard_fields) * SIZEOF_SHORT));
-
-        // Search for an existing vtable that matches the current one.
-        int existing_vtable = 0;
-        outer_loop:
-        for (int i = 0; i < num_vtables; i++) {
-            int vt1 = bb.capacity() - vtables[i];
-            int vt2 = space;
-            short len = bb.getShort(vt1);
-            if (len == bb.getShort(vt2)) {
-                for (int j = SIZEOF_SHORT; j < len; j += SIZEOF_SHORT) {
-                    if (bb.getShort(vt1 + j) != bb.getShort(vt2 + j)) {
-                        continue outer_loop;
-                    }
-                }
-                existing_vtable = vtables[i];
-                break outer_loop;
-            }
-        }
-
-        if (existing_vtable != 0) {
-            // Found a match:
-            // Remove the current vtable.
-            space = bb.capacity() - vtableloc;
-            // Point table to existing vtable.
-            bb.putInt(space, existing_vtable - vtableloc);
-        } else {
-            // No match:
-            // Add the location of the current vtable to the list of vtables.
-            if (num_vtables == vtables.length) vtables = Arrays.copyOf(vtables, num_vtables * 2);
-            vtables[num_vtables++] = offset();
-            // Point table to current vtable.
-            bb.putInt(bb.capacity() - vtableloc, offset() - vtableloc);
-        }
-
-        nested = false;
-        return vtableloc;
-    }
-
-    /**
-     * Checks that a required field has been set in a given table that has
-     * just been constructed.
-     *
-     * @param table The offset to the start of the table from the `ByteBuffer` capacity.
-     * @param field The offset to the field in the vtable.
-     */
-    public void required(int table, int field) {
-        int table_start = bb.capacity() - table;
-        int vtable_start = table_start - bb.getInt(table_start);
-        boolean ok = bb.getShort(vtable_start + field) != 0;
-        // If this fails, the caller will show what field needs to be set.
-        if (!ok)
-            throw new AssertionError("FlatBuffers: field " + field + " must be set");
-    }
-    /// @endcond
-
-    /**
-     * Finalize a buffer, pointing to the given `root_table`.
-     *
-     * @param root_table An offset to be added to the buffer.
-     */
-    public void finish(int root_table) {
-        prep(minalign, SIZEOF_INT);
-        addOffset(root_table);
-        bb.position(space);
-        finished = true;
-    }
-
-    /**
-     * Finalize a buffer, pointing to the given `root_table`.
-     *
-     * @param root_table An offset to be added to the buffer.
-     * @param file_identifier A FlatBuffer file identifier to be added to the buffer before
-     * `root_table`.
-     */
-    public void finish(int root_table, String file_identifier) {
-        prep(minalign, SIZEOF_INT + FILE_IDENTIFIER_LENGTH);
-        if (file_identifier.length() != FILE_IDENTIFIER_LENGTH)
-            throw new AssertionError("FlatBuffers: file identifier must be length " +
-                                     FILE_IDENTIFIER_LENGTH);
-        for (int i = FILE_IDENTIFIER_LENGTH - 1; i >= 0; i--) {
-            addByte((byte)file_identifier.charAt(i));
-        }
-        finish(root_table);
-    }
-
-    /**
-     * In order to save space, fields that are set to their default value
-     * don't get serialized into the buffer. Forcing defaults provides a
-     * way to manually disable this optimization.
-     *
-     * @param forceDefaults When set to `true`, always serializes default values.
-     * @return Returns `this`.
-     */
-    public FlatBufferBuilder forceDefaults(boolean forceDefaults){
-        this.force_defaults = forceDefaults;
-        return this;
-    }
-
-    /**
-     * Get the ByteBuffer representing the FlatBuffer. Only call this after you've
-     * called `finish()`. The actual data starts at the ByteBuffer's current position,
-     * not necessarily at `0`.
-     *
-     * @return The {@link ByteBuffer} representing the FlatBuffer
-     */
-    public ByteBuffer dataBuffer() {
-        finished();
-        return bb;
-    }
-
-   /**
-    * The FlatBuffer data doesn't start at offset 0 in the {@link ByteBuffer}, but
-    * now the {@code ByteBuffer}'s position is set to that location upon {@link #finish(int)}.
-    *
-    * @return The {@link ByteBuffer#position() position} the data starts in {@link #dataBuffer()}
-    * @deprecated This method should not be needed anymore, but is left
-    * here for the moment to document this API change. It will be removed in the future.
-    */
-    @Deprecated
-    private int dataStart() {
-        finished();
-        return space;
-    }
-
-   /**
-    * A utility function to copy and return the ByteBuffer data from `start` to
-    * `start` + `length` as a `byte[]`.
-    *
-    * @param start Start copying at this offset.
-    * @param length How many bytes to copy.
-    * @return A range copy of the {@link #dataBuffer() data buffer}.
-    * @throws IndexOutOfBoundsException If the range of bytes is ouf of bound.
-    */
-    public byte[] sizedByteArray(int start, int length){
-        finished();
-        byte[] array = new byte[length];
-        bb.position(start);
-        bb.get(array);
-        return array;
-    }
-
-   /**
-    * A utility function to copy and return the ByteBuffer data as a `byte[]`.
-    *
-    * @return A full copy of the {@link #dataBuffer() data buffer}.
-    */
-    public byte[] sizedByteArray() {
-        return sizedByteArray(space, bb.capacity() - space);
-    }
-}
-
-/// @}
diff --git a/third_party/flatbuffers/java/com/google/flatbuffers/Struct.java b/third_party/flatbuffers/java/com/google/flatbuffers/Struct.java
deleted file mode 100644
index ae31553..0000000
--- a/third_party/flatbuffers/java/com/google/flatbuffers/Struct.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.flatbuffers;
-
-import java.nio.ByteBuffer;
-
-/// @cond FLATBUFFERS_INTERNAL
-
-/**
- * All structs in the generated code derive from this class, and add their own accessors.
- */
-public class Struct {
-  /** Used to hold the position of the `bb` buffer. */
-  protected int bb_pos;
-  /** The underlying ByteBuffer to hold the data of the Struct. */
-  protected ByteBuffer bb;
-}
-
-/// @endcond
diff --git a/third_party/flatbuffers/java/com/google/flatbuffers/Table.java b/third_party/flatbuffers/java/com/google/flatbuffers/Table.java
deleted file mode 100644
index b853842..0000000
--- a/third_party/flatbuffers/java/com/google/flatbuffers/Table.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.flatbuffers;
-
-import static com.google.flatbuffers.Constants.*;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.CharBuffer;
-import java.nio.charset.CharacterCodingException;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CoderResult;
-
-/// @cond FLATBUFFERS_INTERNAL
-
-/**
- * All tables in the generated code derive from this class, and add their own accessors.
- */
-public class Table {
-  private final static ThreadLocal<CharsetDecoder> UTF8_DECODER = new ThreadLocal<CharsetDecoder>() {
-    @Override
-    protected CharsetDecoder initialValue() {
-      return Charset.forName("UTF-8").newDecoder();
-    }
-  };
-  public final static ThreadLocal<Charset> UTF8_CHARSET = new ThreadLocal<Charset>() {
-    @Override
-    protected Charset initialValue() {
-      return Charset.forName("UTF-8");
-    }
-  };
-  private final static ThreadLocal<CharBuffer> CHAR_BUFFER = new ThreadLocal<CharBuffer>();
-  /** Used to hold the position of the `bb` buffer. */
-  protected int bb_pos;
-  /** The underlying ByteBuffer to hold the data of the Table. */
-  protected ByteBuffer bb;
-
-  /**
-   * Get the underlying ByteBuffer.
-   *
-   * @return Returns the Table's ByteBuffer.
-   */
-  public ByteBuffer getByteBuffer() { return bb; }
-
-  /**
-   * Look up a field in the vtable.
-   *
-   * @param vtable_offset An `int` offset to the vtable in the Table's ByteBuffer.
-   * @return Returns an offset into the object, or `0` if the field is not present.
-   */
-  protected int __offset(int vtable_offset) {
-    int vtable = bb_pos - bb.getInt(bb_pos);
-    return vtable_offset < bb.getShort(vtable) ? bb.getShort(vtable + vtable_offset) : 0;
-  }
-
-  protected static int __offset(int vtable_offset, int offset, ByteBuffer bb) {
-    int vtable = bb.array().length - offset;
-    return bb.getShort(vtable + vtable_offset - bb.getInt(vtable)) + vtable;
-  }
-
-  /**
-   * Retrieve a relative offset.
-   *
-   * @param offset An `int` index into the Table's ByteBuffer containing the relative offset.
-   * @return Returns the relative offset stored at `offset`.
-   */
-  protected int __indirect(int offset) {
-    return offset + bb.getInt(offset);
-  }
-
-  protected static int __indirect(int offset, ByteBuffer bb) {
-    return offset + bb.getInt(offset);
-  }
-
-  /**
-   * Create a Java `String` from UTF-8 data stored inside the FlatBuffer.
-   *
-   * This allocates a new string and converts to wide chars upon each access,
-   * which is not very efficient. Instead, each FlatBuffer string also comes with an
-   * accessor based on __vector_as_bytebuffer below, which is much more efficient,
-   * assuming your Java program can handle UTF-8 data directly.
-   *
-   * @param offset An `int` index into the Table's ByteBuffer.
-   * @return Returns a `String` from the data stored inside the FlatBuffer at `offset`.
-   */
-  protected String __string(int offset) {
-    CharsetDecoder decoder = UTF8_DECODER.get();
-    decoder.reset();
-
-    offset += bb.getInt(offset);
-    ByteBuffer src = bb.duplicate().order(ByteOrder.LITTLE_ENDIAN);
-    int length = src.getInt(offset);
-    src.position(offset + SIZEOF_INT);
-    src.limit(offset + SIZEOF_INT + length);
-
-    int required = (int)((float)length * decoder.maxCharsPerByte());
-    CharBuffer dst = CHAR_BUFFER.get();
-    if (dst == null || dst.capacity() < required) {
-      dst = CharBuffer.allocate(required);
-      CHAR_BUFFER.set(dst);
-    }
-
-    dst.clear();
-
-    try {
-      CoderResult cr = decoder.decode(src, dst, true);
-      if (!cr.isUnderflow()) {
-        cr.throwException();
-      }
-    } catch (CharacterCodingException x) {
-      throw new Error(x);
-    }
-
-    return dst.flip().toString();
-  }
-
-  /**
-   * Get the length of a vector.
-   *
-   * @param offset An `int` index into the Table's ByteBuffer.
-   * @return Returns the length of the vector whose offset is stored at `offset`.
-   */
-  protected int __vector_len(int offset) {
-    offset += bb_pos;
-    offset += bb.getInt(offset);
-    return bb.getInt(offset);
-  }
-
-  /**
-   * Get the start data of a vector.
-   *
-   * @param offset An `int` index into the Table's ByteBuffer.
-   * @return Returns the start of the vector data whose offset is stored at `offset`.
-   */
-  protected int __vector(int offset) {
-    offset += bb_pos;
-    return offset + bb.getInt(offset) + SIZEOF_INT;  // data starts after the length
-  }
-
-  /**
-   * Get a whole vector as a ByteBuffer.
-   *
-   * This is efficient, since it only allocates a new {@link ByteBuffer} object,
-   * but does not actually copy the data, it still refers to the same bytes
-   * as the original ByteBuffer. Also useful with nested FlatBuffers, etc.
-   *
-   * @param vector_offset The position of the vector in the byte buffer
-   * @param elem_size The size of each element in the array
-   * @return The {@link ByteBuffer} for the array
-   */
-  protected ByteBuffer __vector_as_bytebuffer(int vector_offset, int elem_size) {
-    int o = __offset(vector_offset);
-    if (o == 0) return null;
-    ByteBuffer bb = this.bb.duplicate().order(ByteOrder.LITTLE_ENDIAN);
-    int vectorstart = __vector(o);
-    bb.position(vectorstart);
-    bb.limit(vectorstart + __vector_len(o) * elem_size);
-    return bb;
-  }
-
-  /**
-   * Initialize any Table-derived type to point to the union at the given `offset`.
-   *
-   * @param t A `Table`-derived type that should point to the union at `offset`.
-   * @param offset An `int` index into the Table's ByteBuffer.
-   * @return Returns the Table that points to the union at `offset`.
-   */
-  protected Table __union(Table t, int offset) {
-    offset += bb_pos;
-    t.bb_pos = offset + bb.getInt(offset);
-    t.bb = bb;
-    return t;
-  }
-
-  /**
-   * Check if a {@link ByteBuffer} contains a file identifier.
-   *
-   * @param bb A {@code ByteBuffer} to check if it contains the identifier
-   * `ident`.
-   * @param ident A `String` identifier of the FlatBuffer file.
-   * @return True if the buffer contains the file identifier
-   */
-  protected static boolean __has_identifier(ByteBuffer bb, String ident) {
-    if (ident.length() != FILE_IDENTIFIER_LENGTH)
-        throw new AssertionError("FlatBuffers: file identifier must be length " +
-                                 FILE_IDENTIFIER_LENGTH);
-    for (int i = 0; i < FILE_IDENTIFIER_LENGTH; i++) {
-      if (ident.charAt(i) != (char)bb.get(bb.position() + SIZEOF_INT + i)) return false;
-    }
-    return true;
-  }
-
-  /**
-   * Sort tables by the key.
-   *
-   * @param offsets An 'int' indexes of the tables into the bb.
-   * @param bb A {@code ByteBuffer} to get the tables.
-   */
-  protected void sortTables(int[] offsets, final ByteBuffer bb) {
-    Integer[] off = new Integer[offsets.length];
-    for (int i = 0; i < offsets.length; i++) off[i] = offsets[i];
-    java.util.Arrays.sort(off, new java.util.Comparator<Integer>() {
-      public int compare(Integer o1, Integer o2) {
-        return keysCompare(o1, o2, bb);
-      }
-    });
-    for (int i = 0; i < offsets.length; i++) offsets[i] = off[i];
-  }
-
-  /**
-   * Compare two tables by the key.
-   *
-   * @param o1 An 'Integer' index of the first key into the bb.
-   * @param o2 An 'Integer' index of the second key into the bb.
-   * @param bb A {@code ByteBuffer} to get the keys.
-   */
-  protected int keysCompare(Integer o1, Integer o2, ByteBuffer bb) { return 0; }
-
-  /**
-   * Compare two strings in the buffer.
-   *
-   * @param offset_1 An 'int' index of the first string into the bb.
-   * @param offset_2 An 'int' index of the second string into the bb.
-   * @param bb A {@code ByteBuffer} to get the strings.
-   */
-  protected static int compareStrings(int offset_1, int offset_2, ByteBuffer bb) {
-    offset_1 += bb.getInt(offset_1);
-    offset_2 += bb.getInt(offset_2);
-    int len_1 = bb.getInt(offset_1);
-    int len_2 = bb.getInt(offset_2);
-    int startPos_1 = offset_1 + SIZEOF_INT;
-    int startPos_2 = offset_2 + SIZEOF_INT;
-    int len = Math.min(len_1, len_2);
-    byte[] bbArray = bb.array();
-    for(int i = 0; i < len; i++) {
-      if (bbArray[i + startPos_1] != bbArray[i + startPos_2])
-        return bbArray[i + startPos_1] - bbArray[i + startPos_2];
-    }
-    return len_1 - len_2;
-  }
-
-  /**
-   * Compare string from the buffer with the 'String' object.
-   *
-   * @param offset_1 An 'int' index of the first string into the bb.
-   * @param key Second string as a byte array.
-   * @param bb A {@code ByteBuffer} to get the first string.
-   */
-  protected static int compareStrings(int offset_1, byte[] key, ByteBuffer bb) {
-    offset_1 += bb.getInt(offset_1);
-    int len_1 = bb.getInt(offset_1);
-    int len_2 = key.length;
-    int startPos_1 = offset_1 + Constants.SIZEOF_INT;
-    int len = Math.min(len_1, len_2);
-    byte[] bbArray = bb.array();
-    for (int i = 0; i < len; i++) {
-      if (bbArray[i + startPos_1] != key[i])
-        return bbArray[i + startPos_1] - key[i];
-    }
-    return len_1 - len_2;
-  }
-}
-
-/// @endcond
diff --git a/third_party/flatbuffers/js/flatbuffers.js b/third_party/flatbuffers/js/flatbuffers.js
deleted file mode 100644
index ccbd362..0000000
--- a/third_party/flatbuffers/js/flatbuffers.js
+++ /dev/null
@@ -1,1196 +0,0 @@
-/// @file
-/// @addtogroup flatbuffers_javascript_api
-/// @{
-/// @cond FLATBUFFERS_INTERNAL
-
-/**
- * @fileoverview
- *
- * Need to suppress 'global this' error so the Node.js export line doesn't cause
- * closure compile to error out.
- * @suppress {globalThis}
- */
-
-/**
- * @const
- * @namespace
- */
-var flatbuffers = {};
-
-/**
- * @typedef {number}
- */
-flatbuffers.Offset;
-
-/**
- * @typedef {{
- *   bb: flatbuffers.ByteBuffer,
- *   bb_pos: number
- * }}
- */
-flatbuffers.Table;
-
-/**
- * @type {number}
- * @const
- */
-flatbuffers.SIZEOF_SHORT = 2;
-
-/**
- * @type {number}
- * @const
- */
-flatbuffers.SIZEOF_INT = 4;
-
-/**
- * @type {number}
- * @const
- */
-flatbuffers.FILE_IDENTIFIER_LENGTH = 4;
-
-/**
- * @enum {number}
- */
-flatbuffers.Encoding = {
-  UTF8_BYTES: 1,
-  UTF16_STRING: 2
-};
-
-/**
- * @type {Int32Array}
- * @const
- */
-flatbuffers.int32 = new Int32Array(2);
-
-/**
- * @type {Float32Array}
- * @const
- */
-flatbuffers.float32 = new Float32Array(flatbuffers.int32.buffer);
-
-/**
- * @type {Float64Array}
- * @const
- */
-flatbuffers.float64 = new Float64Array(flatbuffers.int32.buffer);
-
-/**
- * @type {boolean}
- * @const
- */
-flatbuffers.isLittleEndian = new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;
-
-////////////////////////////////////////////////////////////////////////////////
-
-/**
- * @constructor
- * @param {number} low
- * @param {number} high
- */
-flatbuffers.Long = function(low, high) {
-  /**
-   * @type {number}
-   * @const
-   */
-  this.low = low | 0;
-
-  /**
-   * @type {number}
-   * @const
-   */
-  this.high = high | 0;
-};
-
-/**
- * @param {number} low
- * @param {number} high
- * @returns {flatbuffers.Long}
- */
-flatbuffers.Long.create = function(low, high) {
-  // Special-case zero to avoid GC overhead for default values
-  return low == 0 && high == 0 ? flatbuffers.Long.ZERO : new flatbuffers.Long(low, high);
-};
-
-/**
- * @returns {number}
- */
-flatbuffers.Long.prototype.toFloat64 = function() {
-  return (this.low >>> 0) + this.high * 0x100000000;
-};
-
-/**
- * @param {flatbuffers.Long} other
- * @returns {boolean}
- */
-flatbuffers.Long.prototype.equals = function(other) {
-  return this.low == other.low && this.high == other.high;
-};
-
-/**
- * @type {flatbuffers.Long}
- * @const
- */
-flatbuffers.Long.ZERO = new flatbuffers.Long(0, 0);
-
-/// @endcond
-////////////////////////////////////////////////////////////////////////////////
-/**
- * Create a FlatBufferBuilder.
- *
- * @constructor
- * @param {number=} opt_initial_size
- */
-flatbuffers.Builder = function(opt_initial_size) {
-  if (!opt_initial_size) {
-    var initial_size = 1024;
-  } else {
-    var initial_size = opt_initial_size;
-  }
-
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   * @private
-   */
-  this.bb = flatbuffers.ByteBuffer.allocate(initial_size);
-
-  /**
-   * Remaining space in the ByteBuffer.
-   *
-   * @type {number}
-   * @private
-   */
-  this.space = initial_size;
-
-  /**
-   * Minimum alignment encountered so far.
-   *
-   * @type {number}
-   * @private
-   */
-  this.minalign = 1;
-
-  /**
-   * The vtable for the current table.
-   *
-   * @type {Array.<number>}
-   * @private
-   */
-  this.vtable = null;
-
-  /**
-   * The amount of fields we're actually using.
-   *
-   * @type {number}
-   * @private
-   */
-  this.vtable_in_use = 0;
-
-  /**
-   * Whether we are currently serializing a table.
-   *
-   * @type {boolean}
-   * @private
-   */
-  this.isNested = false;
-
-  /**
-   * Starting offset of the current struct/table.
-   *
-   * @type {number}
-   * @private
-   */
-  this.object_start = 0;
-
-  /**
-   * List of offsets of all vtables.
-   *
-   * @type {Array.<number>}
-   * @private
-   */
-  this.vtables = [];
-
-  /**
-   * For the current vector being built.
-   *
-   * @type {number}
-   * @private
-   */
-  this.vector_num_elems = 0;
-
-  /**
-   * False omits default values from the serialized data
-   *
-   * @type {boolean}
-   * @private
-   */
-  this.force_defaults = false;
-};
-
-/**
- * In order to save space, fields that are set to their default value
- * don't get serialized into the buffer. Forcing defaults provides a
- * way to manually disable this optimization.
- *
- * @param {boolean} forceDefaults true always serializes default values
- */
-flatbuffers.Builder.prototype.forceDefaults = function(forceDefaults) {
-  this.force_defaults = forceDefaults;
-};
-
-/**
- * Get the ByteBuffer representing the FlatBuffer. Only call this after you've
- * called finish(). The actual data starts at the ByteBuffer's current position,
- * not necessarily at 0.
- *
- * @returns {flatbuffers.ByteBuffer}
- */
-flatbuffers.Builder.prototype.dataBuffer = function() {
-  return this.bb;
-};
-
-/**
- * Get the bytes representing the FlatBuffer. Only call this after you've
- * called finish().
- *
- * @returns {Uint8Array}
- */
-flatbuffers.Builder.prototype.asUint8Array = function() {
-  return this.bb.bytes().subarray(this.bb.position(), this.bb.position() + this.offset());
-};
-
-/// @cond FLATBUFFERS_INTERNAL
-/**
- * Prepare to write an element of `size` after `additional_bytes` have been
- * written, e.g. if you write a string, you need to align such the int length
- * field is aligned to 4 bytes, and the string data follows it directly. If all
- * you need to do is alignment, `additional_bytes` will be 0.
- *
- * @param {number} size This is the of the new element to write
- * @param {number} additional_bytes The padding size
- */
-flatbuffers.Builder.prototype.prep = function(size, additional_bytes) {
-  // Track the biggest thing we've ever aligned to.
-  if (size > this.minalign) {
-    this.minalign = size;
-  }
-
-  // Find the amount of alignment needed such that `size` is properly
-  // aligned after `additional_bytes`
-  var align_size = ((~(this.bb.capacity() - this.space + additional_bytes)) + 1) & (size - 1);
-
-  // Reallocate the buffer if needed.
-  while (this.space < align_size + size + additional_bytes) {
-    var old_buf_size = this.bb.capacity();
-    this.bb = flatbuffers.Builder.growByteBuffer(this.bb);
-    this.space += this.bb.capacity() - old_buf_size;
-  }
-
-  this.pad(align_size);
-};
-
-/**
- * @param {number} byte_size
- */
-flatbuffers.Builder.prototype.pad = function(byte_size) {
-  for (var i = 0; i < byte_size; i++) {
-    this.bb.writeInt8(--this.space, 0);
-  }
-};
-
-/**
- * @param {number} value
- */
-flatbuffers.Builder.prototype.writeInt8 = function(value) {
-  this.bb.writeInt8(this.space -= 1, value);
-};
-
-/**
- * @param {number} value
- */
-flatbuffers.Builder.prototype.writeInt16 = function(value) {
-  this.bb.writeInt16(this.space -= 2, value);
-};
-
-/**
- * @param {number} value
- */
-flatbuffers.Builder.prototype.writeInt32 = function(value) {
-  this.bb.writeInt32(this.space -= 4, value);
-};
-
-/**
- * @param {flatbuffers.Long} value
- */
-flatbuffers.Builder.prototype.writeInt64 = function(value) {
-  this.bb.writeInt64(this.space -= 8, value);
-};
-
-/**
- * @param {number} value
- */
-flatbuffers.Builder.prototype.writeFloat32 = function(value) {
-  this.bb.writeFloat32(this.space -= 4, value);
-};
-
-/**
- * @param {number} value
- */
-flatbuffers.Builder.prototype.writeFloat64 = function(value) {
-  this.bb.writeFloat64(this.space -= 8, value);
-};
-/// @endcond
-
-/**
- * Add an `int8` to the buffer, properly aligned, and grows the buffer (if necessary).
- * @param {number} value The `int8` to add the the buffer.
- */
-flatbuffers.Builder.prototype.addInt8 = function(value) {
-  this.prep(1, 0);
-  this.writeInt8(value);
-};
-
-/**
- * Add an `int16` to the buffer, properly aligned, and grows the buffer (if necessary).
- * @param {number} value The `int16` to add the the buffer.
- */
-flatbuffers.Builder.prototype.addInt16 = function(value) {
-  this.prep(2, 0);
-  this.writeInt16(value);
-};
-
-/**
- * Add an `int32` to the buffer, properly aligned, and grows the buffer (if necessary).
- * @param {number} value The `int32` to add the the buffer.
- */
-flatbuffers.Builder.prototype.addInt32 = function(value) {
-  this.prep(4, 0);
-  this.writeInt32(value);
-};
-
-/**
- * Add an `int64` to the buffer, properly aligned, and grows the buffer (if necessary).
- * @param {flatbuffers.Long} value The `int64` to add the the buffer.
- */
-flatbuffers.Builder.prototype.addInt64 = function(value) {
-  this.prep(8, 0);
-  this.writeInt64(value);
-};
-
-/**
- * Add a `float32` to the buffer, properly aligned, and grows the buffer (if necessary).
- * @param {number} value The `float32` to add the the buffer.
- */
-flatbuffers.Builder.prototype.addFloat32 = function(value) {
-  this.prep(4, 0);
-  this.writeFloat32(value);
-};
-
-/**
- * Add a `float64` to the buffer, properly aligned, and grows the buffer (if necessary).
- * @param {number} value The `float64` to add the the buffer.
- */
-flatbuffers.Builder.prototype.addFloat64 = function(value) {
-  this.prep(8, 0);
-  this.writeFloat64(value);
-};
-
-/// @cond FLATBUFFERS_INTERNAL
-/**
- * @param {number} voffset
- * @param {number} value
- * @param {number} defaultValue
- */
-flatbuffers.Builder.prototype.addFieldInt8 = function(voffset, value, defaultValue) {
-  if (this.force_defaults || value != defaultValue) {
-    this.addInt8(value);
-    this.slot(voffset);
-  }
-};
-
-/**
- * @param {number} voffset
- * @param {number} value
- * @param {number} defaultValue
- */
-flatbuffers.Builder.prototype.addFieldInt16 = function(voffset, value, defaultValue) {
-  if (this.force_defaults || value != defaultValue) {
-    this.addInt16(value);
-    this.slot(voffset);
-  }
-};
-
-/**
- * @param {number} voffset
- * @param {number} value
- * @param {number} defaultValue
- */
-flatbuffers.Builder.prototype.addFieldInt32 = function(voffset, value, defaultValue) {
-  if (this.force_defaults || value != defaultValue) {
-    this.addInt32(value);
-    this.slot(voffset);
-  }
-};
-
-/**
- * @param {number} voffset
- * @param {flatbuffers.Long} value
- * @param {flatbuffers.Long} defaultValue
- */
-flatbuffers.Builder.prototype.addFieldInt64 = function(voffset, value, defaultValue) {
-  if (this.force_defaults || !value.equals(defaultValue)) {
-    this.addInt64(value);
-    this.slot(voffset);
-  }
-};
-
-/**
- * @param {number} voffset
- * @param {number} value
- * @param {number} defaultValue
- */
-flatbuffers.Builder.prototype.addFieldFloat32 = function(voffset, value, defaultValue) {
-  if (this.force_defaults || value != defaultValue) {
-    this.addFloat32(value);
-    this.slot(voffset);
-  }
-};
-
-/**
- * @param {number} voffset
- * @param {number} value
- * @param {number} defaultValue
- */
-flatbuffers.Builder.prototype.addFieldFloat64 = function(voffset, value, defaultValue) {
-  if (this.force_defaults || value != defaultValue) {
-    this.addFloat64(value);
-    this.slot(voffset);
-  }
-};
-
-/**
- * @param {number} voffset
- * @param {flatbuffers.Offset} value
- * @param {flatbuffers.Offset} defaultValue
- */
-flatbuffers.Builder.prototype.addFieldOffset = function(voffset, value, defaultValue) {
-  if (this.force_defaults || value != defaultValue) {
-    this.addOffset(value);
-    this.slot(voffset);
-  }
-};
-
-/**
- * Structs are stored inline, so nothing additional is being added. `d` is always 0.
- *
- * @param {number} voffset
- * @param {flatbuffers.Offset} value
- * @param {flatbuffers.Offset} defaultValue
- */
-flatbuffers.Builder.prototype.addFieldStruct = function(voffset, value, defaultValue) {
-  if (value != defaultValue) {
-    this.nested(value);
-    this.slot(voffset);
-  }
-};
-
-/**
- * Structures are always stored inline, they need to be created right
- * where they're used.  You'll get this assertion failure if you
- * created it elsewhere.
- *
- * @param {flatbuffers.Offset} obj The offset of the created object
- */
-flatbuffers.Builder.prototype.nested = function(obj) {
-  if (obj != this.offset()) {
-    throw new Error('FlatBuffers: struct must be serialized inline.');
-  }
-};
-
-/**
- * Should not be creating any other object, string or vector
- * while an object is being constructed
- */
-flatbuffers.Builder.prototype.notNested = function() {
-  if (this.isNested) {
-    throw new Error('FlatBuffers: object serialization must not be nested.');
-  }
-};
-
-/**
- * Set the current vtable at `voffset` to the current location in the buffer.
- *
- * @param {number} voffset
- */
-flatbuffers.Builder.prototype.slot = function(voffset) {
-  this.vtable[voffset] = this.offset();
-};
-
-/**
- * @returns {flatbuffers.Offset} Offset relative to the end of the buffer.
- */
-flatbuffers.Builder.prototype.offset = function() {
-  return this.bb.capacity() - this.space;
-};
-
-/**
- * Doubles the size of the backing ByteBuffer and copies the old data towards
- * the end of the new buffer (since we build the buffer backwards).
- *
- * @param {flatbuffers.ByteBuffer} bb The current buffer with the existing data
- * @returns {flatbuffers.ByteBuffer} A new byte buffer with the old data copied
- * to it. The data is located at the end of the buffer.
- *
- * uint8Array.set() formally takes {Array<number>|ArrayBufferView}, so to pass
- * it a uint8Array we need to suppress the type check:
- * @suppress {checkTypes}
- */
-flatbuffers.Builder.growByteBuffer = function(bb) {
-  var old_buf_size = bb.capacity();
-
-  // Ensure we don't grow beyond what fits in an int.
-  if (old_buf_size & 0xC0000000) {
-    throw new Error('FlatBuffers: cannot grow buffer beyond 2 gigabytes.');
-  }
-
-  var new_buf_size = old_buf_size << 1;
-  var nbb = flatbuffers.ByteBuffer.allocate(new_buf_size);
-  nbb.setPosition(new_buf_size - old_buf_size);
-  nbb.bytes().set(bb.bytes(), new_buf_size - old_buf_size);
-  return nbb;
-};
-/// @endcond
-
-/**
- * Adds on offset, relative to where it will be written.
- *
- * @param {flatbuffers.Offset} offset The offset to add.
- */
-flatbuffers.Builder.prototype.addOffset = function(offset) {
-  this.prep(flatbuffers.SIZEOF_INT, 0); // Ensure alignment is already done.
-  this.writeInt32(this.offset() - offset + flatbuffers.SIZEOF_INT);
-};
-
-/// @cond FLATBUFFERS_INTERNAL
-/**
- * Start encoding a new object in the buffer.  Users will not usually need to
- * call this directly. The FlatBuffers compiler will generate helper methods
- * that call this method internally.
- *
- * @param {number} numfields
- */
-flatbuffers.Builder.prototype.startObject = function(numfields) {
-  this.notNested();
-  if (this.vtable == null) {
-    this.vtable = [];
-  }
-  this.vtable_in_use = numfields;
-  for (var i = 0; i < numfields; i++) {
-    this.vtable[i] = 0; // This will push additional elements as needed
-  }
-  this.isNested = true;
-  this.object_start = this.offset();
-};
-
-/**
- * Finish off writing the object that is under construction.
- *
- * @returns {flatbuffers.Offset} The offset to the object inside `dataBuffer`
- */
-flatbuffers.Builder.prototype.endObject = function() {
-  if (this.vtable == null || !this.isNested) {
-    throw new Error('FlatBuffers: endObject called without startObject');
-  }
-
-  this.addInt32(0);
-  var vtableloc = this.offset();
-
-  // Write out the current vtable.
-  for (var i = this.vtable_in_use - 1; i >= 0; i--) {
-    // Offset relative to the start of the table.
-    this.addInt16(this.vtable[i] != 0 ? vtableloc - this.vtable[i] : 0);
-  }
-
-  var standard_fields = 2; // The fields below:
-  this.addInt16(vtableloc - this.object_start);
-  this.addInt16((this.vtable_in_use + standard_fields) * flatbuffers.SIZEOF_SHORT);
-
-  // Search for an existing vtable that matches the current one.
-  var existing_vtable = 0;
-outer_loop:
-  for (var i = 0; i < this.vtables.length; i++) {
-    var vt1 = this.bb.capacity() - this.vtables[i];
-    var vt2 = this.space;
-    var len = this.bb.readInt16(vt1);
-    if (len == this.bb.readInt16(vt2)) {
-      for (var j = flatbuffers.SIZEOF_SHORT; j < len; j += flatbuffers.SIZEOF_SHORT) {
-        if (this.bb.readInt16(vt1 + j) != this.bb.readInt16(vt2 + j)) {
-          continue outer_loop;
-        }
-      }
-      existing_vtable = this.vtables[i];
-      break;
-    }
-  }
-
-  if (existing_vtable) {
-    // Found a match:
-    // Remove the current vtable.
-    this.space = this.bb.capacity() - vtableloc;
-
-    // Point table to existing vtable.
-    this.bb.writeInt32(this.space, existing_vtable - vtableloc);
-  } else {
-    // No match:
-    // Add the location of the current vtable to the list of vtables.
-    this.vtables.push(this.offset());
-
-    // Point table to current vtable.
-    this.bb.writeInt32(this.bb.capacity() - vtableloc, this.offset() - vtableloc);
-  }
-
-  this.isNested = false;
-  return vtableloc;
-};
-/// @endcond
-
-/**
- * Finalize a buffer, poiting to the given `root_table`.
- *
- * @param {flatbuffers.Offset} root_table
- * @param {string=} opt_file_identifier
- */
-flatbuffers.Builder.prototype.finish = function(root_table, opt_file_identifier) {
-  if (opt_file_identifier) {
-    var file_identifier = opt_file_identifier;
-    this.prep(this.minalign, flatbuffers.SIZEOF_INT +
-      flatbuffers.FILE_IDENTIFIER_LENGTH);
-    if (file_identifier.length != flatbuffers.FILE_IDENTIFIER_LENGTH) {
-      throw new Error('FlatBuffers: file identifier must be length ' +
-        flatbuffers.FILE_IDENTIFIER_LENGTH);
-    }
-    for (var i = flatbuffers.FILE_IDENTIFIER_LENGTH - 1; i >= 0; i--) {
-      this.writeInt8(file_identifier.charCodeAt(i));
-    }
-  }
-  this.prep(this.minalign, flatbuffers.SIZEOF_INT);
-  this.addOffset(root_table);
-  this.bb.setPosition(this.space);
-};
-
-/// @cond FLATBUFFERS_INTERNAL
-/**
- * This checks a required field has been set in a given table that has
- * just been constructed.
- *
- * @param {flatbuffers.Offset} table
- * @param {number} field
- */
-flatbuffers.Builder.prototype.requiredField = function(table, field) {
-  var table_start = this.bb.capacity() - table;
-  var vtable_start = table_start - this.bb.readInt32(table_start);
-  var ok = this.bb.readInt16(vtable_start + field) != 0;
-
-  // If this fails, the caller will show what field needs to be set.
-  if (!ok) {
-    throw new Error('FlatBuffers: field ' + field + ' must be set');
-  }
-};
-
-/**
- * Start a new array/vector of objects.  Users usually will not call
- * this directly. The FlatBuffers compiler will create a start/end
- * method for vector types in generated code.
- *
- * @param {number} elem_size The size of each element in the array
- * @param {number} num_elems The number of elements in the array
- * @param {number} alignment The alignment of the array
- */
-flatbuffers.Builder.prototype.startVector = function(elem_size, num_elems, alignment) {
-  this.notNested();
-  this.vector_num_elems = num_elems;
-  this.prep(flatbuffers.SIZEOF_INT, elem_size * num_elems);
-  this.prep(alignment, elem_size * num_elems); // Just in case alignment > int.
-};
-
-/**
- * Finish off the creation of an array and all its elements. The array must be
- * created with `startVector`.
- *
- * @returns {flatbuffers.Offset} The offset at which the newly created array
- * starts.
- */
-flatbuffers.Builder.prototype.endVector = function() {
-  this.writeInt32(this.vector_num_elems);
-  return this.offset();
-};
-/// @endcond
-
-/**
- * Encode the string `s` in the buffer using UTF-8. If a Uint8Array is passed
- * instead of a string, it is assumed to contain valid UTF-8 encoded data.
- *
- * @param {string|Uint8Array} s The string to encode
- * @return {flatbuffers.Offset} The offset in the buffer where the encoded string starts
- */
-flatbuffers.Builder.prototype.createString = function(s) {
-  if (s instanceof Uint8Array) {
-    var utf8 = s;
-  } else {
-    var utf8 = [];
-    var i = 0;
-
-    while (i < s.length) {
-      var codePoint;
-
-      // Decode UTF-16
-      var a = s.charCodeAt(i++);
-      if (a < 0xD800 || a >= 0xDC00) {
-        codePoint = a;
-      } else {
-        var b = s.charCodeAt(i++);
-        codePoint = (a << 10) + b + (0x10000 - (0xD800 << 10) - 0xDC00);
-      }
-
-      // Encode UTF-8
-      if (codePoint < 0x80) {
-        utf8.push(codePoint);
-      } else {
-        if (codePoint < 0x800) {
-          utf8.push(((codePoint >> 6) & 0x1F) | 0xC0);
-        } else {
-          if (codePoint < 0x10000) {
-            utf8.push(((codePoint >> 12) & 0x0F) | 0xE0);
-          } else {
-            utf8.push(
-              ((codePoint >> 18) & 0x07) | 0xF0,
-              ((codePoint >> 12) & 0x3F) | 0x80);
-          }
-          utf8.push(((codePoint >> 6) & 0x3F) | 0x80);
-        }
-        utf8.push((codePoint & 0x3F) | 0x80);
-      }
-    }
-  }
-
-  this.addInt8(0);
-  this.startVector(1, utf8.length, 1);
-  this.bb.setPosition(this.space -= utf8.length);
-  for (var i = 0, offset = this.space, bytes = this.bb.bytes(); i < utf8.length; i++) {
-    bytes[offset++] = utf8[i];
-  }
-  return this.endVector();
-};
-
-/**
- * A helper function to avoid generated code depending on this file directly.
- *
- * @param {number} low
- * @param {number} high
- * @returns {flatbuffers.Long}
- */
-flatbuffers.Builder.prototype.createLong = function(low, high) {
-  return flatbuffers.Long.create(low, high);
-};
-////////////////////////////////////////////////////////////////////////////////
-/// @cond FLATBUFFERS_INTERNAL
-/**
- * Create a new ByteBuffer with a given array of bytes (`Uint8Array`).
- *
- * @constructor
- * @param {Uint8Array} bytes
- */
-flatbuffers.ByteBuffer = function(bytes) {
-  /**
-   * @type {Uint8Array}
-   * @private
-   */
-  this.bytes_ = bytes;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.position_ = 0;
-};
-
-/**
- * Create and allocate a new ByteBuffer with a given size.
- *
- * @param {number} byte_size
- * @returns {flatbuffers.ByteBuffer}
- */
-flatbuffers.ByteBuffer.allocate = function(byte_size) {
-  return new flatbuffers.ByteBuffer(new Uint8Array(byte_size));
-};
-
-/**
- * Get the underlying `Uint8Array`.
- *
- * @returns {Uint8Array}
- */
-flatbuffers.ByteBuffer.prototype.bytes = function() {
-  return this.bytes_;
-};
-
-/**
- * Get the buffer's position.
- *
- * @returns {number}
- */
-flatbuffers.ByteBuffer.prototype.position = function() {
-  return this.position_;
-};
-
-/**
- * Set the buffer's position.
- *
- * @param {number} position
- */
-flatbuffers.ByteBuffer.prototype.setPosition = function(position) {
-  this.position_ = position;
-};
-
-/**
- * Get the buffer's capacity.
- *
- * @returns {number}
- */
-flatbuffers.ByteBuffer.prototype.capacity = function() {
-  return this.bytes_.length;
-};
-
-/**
- * @param {number} offset
- * @returns {number}
- */
-flatbuffers.ByteBuffer.prototype.readInt8 = function(offset) {
-  return this.readUint8(offset) << 24 >> 24;
-};
-
-/**
- * @param {number} offset
- * @returns {number}
- */
-flatbuffers.ByteBuffer.prototype.readUint8 = function(offset) {
-  return this.bytes_[offset];
-};
-
-/**
- * @param {number} offset
- * @returns {number}
- */
-flatbuffers.ByteBuffer.prototype.readInt16 = function(offset) {
-  return this.readUint16(offset) << 16 >> 16;
-};
-
-/**
- * @param {number} offset
- * @returns {number}
- */
-flatbuffers.ByteBuffer.prototype.readUint16 = function(offset) {
-  return this.bytes_[offset] | this.bytes_[offset + 1] << 8;
-};
-
-/**
- * @param {number} offset
- * @returns {number}
- */
-flatbuffers.ByteBuffer.prototype.readInt32 = function(offset) {
-  return this.bytes_[offset] | this.bytes_[offset + 1] << 8 | this.bytes_[offset + 2] << 16 | this.bytes_[offset + 3] << 24;
-};
-
-/**
- * @param {number} offset
- * @returns {number}
- */
-flatbuffers.ByteBuffer.prototype.readUint32 = function(offset) {
-  return this.readInt32(offset) >>> 0;
-};
-
-/**
- * @param {number} offset
- * @returns {flatbuffers.Long}
- */
-flatbuffers.ByteBuffer.prototype.readInt64 = function(offset) {
-  return new flatbuffers.Long(this.readInt32(offset), this.readInt32(offset + 4));
-};
-
-/**
- * @param {number} offset
- * @returns {flatbuffers.Long}
- */
-flatbuffers.ByteBuffer.prototype.readUint64 = function(offset) {
-  return new flatbuffers.Long(this.readUint32(offset), this.readUint32(offset + 4));
-};
-
-/**
- * @param {number} offset
- * @returns {number}
- */
-flatbuffers.ByteBuffer.prototype.readFloat32 = function(offset) {
-  flatbuffers.int32[0] = this.readInt32(offset);
-  return flatbuffers.float32[0];
-};
-
-/**
- * @param {number} offset
- * @returns {number}
- */
-flatbuffers.ByteBuffer.prototype.readFloat64 = function(offset) {
-  flatbuffers.int32[flatbuffers.isLittleEndian ? 0 : 1] = this.readInt32(offset);
-  flatbuffers.int32[flatbuffers.isLittleEndian ? 1 : 0] = this.readInt32(offset + 4);
-  return flatbuffers.float64[0];
-};
-
-/**
- * @param {number} offset
- * @param {number|boolean} value
- */
-flatbuffers.ByteBuffer.prototype.writeInt8 = function(offset, value) {
-  this.bytes_[offset] = /** @type {number} */(value);
-};
-
-/**
- * @param {number} offset
- * @param {number} value
- */
-flatbuffers.ByteBuffer.prototype.writeUint8 = function(offset, value) {
-  this.bytes_[offset] = value;
-};
-
-/**
- * @param {number} offset
- * @param {number} value
- */
-flatbuffers.ByteBuffer.prototype.writeInt16 = function(offset, value) {
-  this.bytes_[offset] = value;
-  this.bytes_[offset + 1] = value >> 8;
-};
-
-/**
- * @param {number} offset
- * @param {number} value
- */
-flatbuffers.ByteBuffer.prototype.writeUint16 = function(offset, value) {
-    this.bytes_[offset] = value;
-    this.bytes_[offset + 1] = value >> 8;
-};
-
-/**
- * @param {number} offset
- * @param {number} value
- */
-flatbuffers.ByteBuffer.prototype.writeInt32 = function(offset, value) {
-  this.bytes_[offset] = value;
-  this.bytes_[offset + 1] = value >> 8;
-  this.bytes_[offset + 2] = value >> 16;
-  this.bytes_[offset + 3] = value >> 24;
-};
-
-/**
- * @param {number} offset
- * @param {number} value
- */
-flatbuffers.ByteBuffer.prototype.writeUint32 = function(offset, value) {
-    this.bytes_[offset] = value;
-    this.bytes_[offset + 1] = value >> 8;
-    this.bytes_[offset + 2] = value >> 16;
-    this.bytes_[offset + 3] = value >> 24;
-};
-
-/**
- * @param {number} offset
- * @param {flatbuffers.Long} value
- */
-flatbuffers.ByteBuffer.prototype.writeInt64 = function(offset, value) {
-  this.writeInt32(offset, value.low);
-  this.writeInt32(offset + 4, value.high);
-};
-
-/**
- * @param {number} offset
- * @param {flatbuffers.Long} value
- */
-flatbuffers.ByteBuffer.prototype.writeUint64 = function(offset, value) {
-    this.writeUint32(offset, value.low);
-    this.writeUint32(offset + 4, value.high);
-};
-
-/**
- * @param {number} offset
- * @param {number} value
- */
-flatbuffers.ByteBuffer.prototype.writeFloat32 = function(offset, value) {
-  flatbuffers.float32[0] = value;
-  this.writeInt32(offset, flatbuffers.int32[0]);
-};
-
-/**
- * @param {number} offset
- * @param {number} value
- */
-flatbuffers.ByteBuffer.prototype.writeFloat64 = function(offset, value) {
-  flatbuffers.float64[0] = value;
-  this.writeInt32(offset, flatbuffers.int32[flatbuffers.isLittleEndian ? 0 : 1]);
-  this.writeInt32(offset + 4, flatbuffers.int32[flatbuffers.isLittleEndian ? 1 : 0]);
-};
-
-/**
- * Look up a field in the vtable, return an offset into the object, or 0 if the
- * field is not present.
- *
- * @param {number} bb_pos
- * @param {number} vtable_offset
- * @returns {number}
- */
-flatbuffers.ByteBuffer.prototype.__offset = function(bb_pos, vtable_offset) {
-  var vtable = bb_pos - this.readInt32(bb_pos);
-  return vtable_offset < this.readInt16(vtable) ? this.readInt16(vtable + vtable_offset) : 0;
-};
-
-/**
- * Initialize any Table-derived type to point to the union at the given offset.
- *
- * @param {flatbuffers.Table} t
- * @param {number} offset
- * @returns {flatbuffers.Table}
- */
-flatbuffers.ByteBuffer.prototype.__union = function(t, offset) {
-  t.bb_pos = offset + this.readInt32(offset);
-  t.bb = this;
-  return t;
-};
-
-/**
- * Create a JavaScript string from UTF-8 data stored inside the FlatBuffer.
- * This allocates a new string and converts to wide chars upon each access.
- *
- * To avoid the conversion to UTF-16, pass flatbuffers.Encoding.UTF8_BYTES as
- * the "optionalEncoding" argument. This is useful for avoiding conversion to
- * and from UTF-16 when the data will just be packaged back up in another
- * FlatBuffer later on.
- *
- * @param {number} offset
- * @param {flatbuffers.Encoding=} opt_encoding Defaults to UTF16_STRING
- * @returns {string|Uint8Array}
- */
-flatbuffers.ByteBuffer.prototype.__string = function(offset, opt_encoding) {
-  offset += this.readInt32(offset);
-
-  var length = this.readInt32(offset);
-  var result = '';
-  var i = 0;
-
-  offset += flatbuffers.SIZEOF_INT;
-
-  if (opt_encoding === flatbuffers.Encoding.UTF8_BYTES) {
-    return this.bytes_.subarray(offset, offset + length);
-  }
-
-  while (i < length) {
-    var codePoint;
-
-    // Decode UTF-8
-    var a = this.readUint8(offset + i++);
-    if (a < 0xC0) {
-      codePoint = a;
-    } else {
-      var b = this.readUint8(offset + i++);
-      if (a < 0xE0) {
-        codePoint =
-          ((a & 0x1F) << 6) |
-          (b & 0x3F);
-      } else {
-        var c = this.readUint8(offset + i++);
-        if (a < 0xF0) {
-          codePoint =
-            ((a & 0x0F) << 12) |
-            ((b & 0x3F) << 6) |
-            (c & 0x3F);
-        } else {
-          var d = this.readUint8(offset + i++);
-          codePoint =
-            ((a & 0x07) << 18) |
-            ((b & 0x3F) << 12) |
-            ((c & 0x3F) << 6) |
-            (d & 0x3F);
-        }
-      }
-    }
-
-    // Encode UTF-16
-    if (codePoint < 0x10000) {
-      result += String.fromCharCode(codePoint);
-    } else {
-      codePoint -= 0x10000;
-      result += String.fromCharCode(
-        (codePoint >> 10) + 0xD800,
-        (codePoint & ((1 << 10) - 1)) + 0xDC00);
-    }
-  }
-
-  return result;
-};
-
-/**
- * Retrieve the relative offset stored at "offset"
- * @param {number} offset
- * @returns {number}
- */
-flatbuffers.ByteBuffer.prototype.__indirect = function(offset) {
-  return offset + this.readInt32(offset);
-};
-
-/**
- * Get the start of data of a vector whose offset is stored at "offset" in this object.
- *
- * @param {number} offset
- * @returns {number}
- */
-flatbuffers.ByteBuffer.prototype.__vector = function(offset) {
-  return offset + this.readInt32(offset) + flatbuffers.SIZEOF_INT; // data starts after the length
-};
-
-/**
- * Get the length of a vector whose offset is stored at "offset" in this object.
- *
- * @param {number} offset
- * @returns {number}
- */
-flatbuffers.ByteBuffer.prototype.__vector_len = function(offset) {
-  return this.readInt32(offset + this.readInt32(offset));
-};
-
-/**
- * @param {string} ident
- * @returns {boolean}
- */
-flatbuffers.ByteBuffer.prototype.__has_identifier = function(ident) {
-  if (ident.length != flatbuffers.FILE_IDENTIFIER_LENGTH) {
-    throw new Error('FlatBuffers: file identifier must be length ' +
-                    flatbuffers.FILE_IDENTIFIER_LENGTH);
-  }
-  for (var i = 0; i < flatbuffers.FILE_IDENTIFIER_LENGTH; i++) {
-    if (ident.charCodeAt(i) != this.readInt8(this.position_ + flatbuffers.SIZEOF_INT + i)) {
-      return false;
-    }
-  }
-  return true;
-};
-
-/**
- * A helper function to avoid generated code depending on this file directly.
- *
- * @param {number} low
- * @param {number} high
- * @returns {flatbuffers.Long}
- */
-flatbuffers.ByteBuffer.prototype.createLong = function(low, high) {
-  return flatbuffers.Long.create(low, high);
-};
-
-// Exports for Node.js and RequireJS
-this.flatbuffers = flatbuffers;
-
-/// @endcond
-/// @}
diff --git a/third_party/flatbuffers/net/FlatBuffers/ByteBuffer.cs b/third_party/flatbuffers/net/FlatBuffers/ByteBuffer.cs
deleted file mode 100755
index 37a2c7e..0000000
--- a/third_party/flatbuffers/net/FlatBuffers/ByteBuffer.cs
+++ /dev/null
@@ -1,457 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// There are 2 #defines that have an impact on performance of this ByteBuffer implementation
-//
-//      UNSAFE_BYTEBUFFER 
-//          This will use unsafe code to manipulate the underlying byte array. This
-//          can yield a reasonable performance increase.
-//
-//      BYTEBUFFER_NO_BOUNDS_CHECK
-//          This will disable the bounds check asserts to the byte array. This can
-//          yield a small performance gain in normal code..
-//
-// Using UNSAFE_BYTEBUFFER and BYTEBUFFER_NO_BOUNDS_CHECK together can yield a
-// performance gain of ~15% for some operations, however doing so is potentially 
-// dangerous. Do so at your own risk!
-//
-
-using System;
-
-namespace FlatBuffers
-{
-    /// <summary>
-    /// Class to mimic Java's ByteBuffer which is used heavily in Flatbuffers.
-    /// </summary>
-    public class ByteBuffer
-    {
-        private readonly byte[] _buffer;
-        private int _pos;  // Must track start of the buffer.
-
-        public int Length { get { return _buffer.Length; } }
-
-        public byte[] Data { get { return _buffer; } }
-
-        public ByteBuffer(byte[] buffer) : this(buffer, 0) { }
-
-        public ByteBuffer(byte[] buffer, int pos)
-        {
-            _buffer = buffer;
-            _pos = pos;
-        }
-
-        public int Position {
-            get { return _pos; }
-            set { _pos = value; }
-        }
-
-        public void Reset()
-        {
-            _pos = 0;
-        }
-
-        // Pre-allocated helper arrays for convertion.
-        private float[] floathelper = new[] { 0.0f };
-        private int[] inthelper = new[] { 0 };
-        private double[] doublehelper = new[] { 0.0 };
-        private ulong[] ulonghelper = new[] { 0UL };
-
-        // Helper functions for the unsafe version.
-        static public ushort ReverseBytes(ushort input)
-        {
-            return (ushort)(((input & 0x00FFU) << 8) |
-                            ((input & 0xFF00U) >> 8));
-        }
-        static public uint ReverseBytes(uint input)
-        {
-            return ((input & 0x000000FFU) << 24) |
-                   ((input & 0x0000FF00U) <<  8) |
-                   ((input & 0x00FF0000U) >>  8) |
-                   ((input & 0xFF000000U) >> 24);
-        }
-        static public ulong ReverseBytes(ulong input)
-        {
-            return (((input & 0x00000000000000FFUL) << 56) |
-                    ((input & 0x000000000000FF00UL) << 40) |
-                    ((input & 0x0000000000FF0000UL) << 24) |
-                    ((input & 0x00000000FF000000UL) <<  8) |
-                    ((input & 0x000000FF00000000UL) >>  8) |
-                    ((input & 0x0000FF0000000000UL) >> 24) |
-                    ((input & 0x00FF000000000000UL) >> 40) |
-                    ((input & 0xFF00000000000000UL) >> 56));
-        }
-
-#if !UNSAFE_BYTEBUFFER
-        // Helper functions for the safe (but slower) version.
-        protected void WriteLittleEndian(int offset, int count, ulong data)
-        {
-            if (BitConverter.IsLittleEndian)
-            {
-                for (int i = 0; i < count; i++)
-                {
-                    _buffer[offset + i] = (byte)(data >> i * 8);
-                }
-            }
-            else
-            {
-                for (int i = 0; i < count; i++)
-                {
-                    _buffer[offset + count - 1 - i] = (byte)(data >> i * 8);
-                }
-            }
-        }
-
-        protected ulong ReadLittleEndian(int offset, int count)
-        {
-            AssertOffsetAndLength(offset, count);
-            ulong r = 0;
-            if (BitConverter.IsLittleEndian)
-            {
-                for (int i = 0; i < count; i++)
-                {
-                  r |= (ulong)_buffer[offset + i] << i * 8;
-                }
-            }
-            else
-            {
-              for (int i = 0; i < count; i++)
-              {
-                r |= (ulong)_buffer[offset + count - 1 - i] << i * 8;
-              }
-            }
-            return r;
-        }
-#endif // !UNSAFE_BYTEBUFFER
-
-
-        private void AssertOffsetAndLength(int offset, int length)
-        {
-            #if !BYTEBUFFER_NO_BOUNDS_CHECK
-            if (offset < 0 ||
-                offset > _buffer.Length - length)
-                throw new ArgumentOutOfRangeException();
-            #endif
-        }
-
-        public void PutSbyte(int offset, sbyte value)
-        {
-            AssertOffsetAndLength(offset, sizeof(sbyte));
-            _buffer[offset] = (byte)value;
-        }
-
-        public void PutByte(int offset, byte value)
-        {
-            AssertOffsetAndLength(offset, sizeof(byte));
-            _buffer[offset] = value;
-        }
-
-        public void PutByte(int offset, byte value, int count)
-        {
-            AssertOffsetAndLength(offset, sizeof(byte) * count);
-            for (var i = 0; i < count; ++i)
-                _buffer[offset + i] = value;
-        }
-
-        // this method exists in order to conform with Java ByteBuffer standards
-        public void Put(int offset, byte value)
-        {
-            PutByte(offset, value);
-        }
-
-#if UNSAFE_BYTEBUFFER
-        // Unsafe but more efficient versions of Put*.
-        public void PutShort(int offset, short value)
-        {
-            PutUshort(offset, (ushort)value);
-        }
-
-        public unsafe void PutUshort(int offset, ushort value)
-        {
-            AssertOffsetAndLength(offset, sizeof(ushort));
-            fixed (byte* ptr = _buffer)
-            {
-                *(ushort*)(ptr + offset) = BitConverter.IsLittleEndian
-                    ? value
-                    : ReverseBytes(value);
-            }
-        }
-
-        public void PutInt(int offset, int value)
-        {
-            PutUint(offset, (uint)value);
-        }
-
-        public unsafe void PutUint(int offset, uint value)
-        {
-            AssertOffsetAndLength(offset, sizeof(uint));
-            fixed (byte* ptr = _buffer)
-            {
-                *(uint*)(ptr + offset) = BitConverter.IsLittleEndian
-                    ? value
-                    : ReverseBytes(value);
-            }
-        }
-
-        public unsafe void PutLong(int offset, long value)
-        {
-            PutUlong(offset, (ulong)value);
-        }
-
-        public unsafe void PutUlong(int offset, ulong value)
-        {
-            AssertOffsetAndLength(offset, sizeof(ulong));
-            fixed (byte* ptr = _buffer)
-            {
-                *(ulong*)(ptr + offset) = BitConverter.IsLittleEndian
-                    ? value
-                    : ReverseBytes(value);
-            }
-        }
-
-        public unsafe void PutFloat(int offset, float value)
-        {
-            AssertOffsetAndLength(offset, sizeof(float));
-            fixed (byte* ptr = _buffer)
-            {
-                if (BitConverter.IsLittleEndian)
-                {
-                    *(float*)(ptr + offset) = value;
-                }
-                else
-                {
-                    *(uint*)(ptr + offset) = ReverseBytes(*(uint*)(&value));
-                }
-            }
-        }
-
-        public unsafe void PutDouble(int offset, double value)
-        {
-            AssertOffsetAndLength(offset, sizeof(double));
-            fixed (byte* ptr = _buffer)
-            {
-                if (BitConverter.IsLittleEndian)
-                {
-                    *(double*)(ptr + offset) = value;
-
-                }
-                else
-                {
-                    *(ulong*)(ptr + offset) = ReverseBytes(*(ulong*)(ptr + offset));
-                }
-            }
-        }
-#else // !UNSAFE_BYTEBUFFER
-        // Slower versions of Put* for when unsafe code is not allowed.
-        public void PutShort(int offset, short value)
-        {
-            AssertOffsetAndLength(offset, sizeof(short));
-            WriteLittleEndian(offset, sizeof(short), (ulong)value);
-        }
-
-        public void PutUshort(int offset, ushort value)
-        {
-            AssertOffsetAndLength(offset, sizeof(ushort));
-            WriteLittleEndian(offset, sizeof(ushort), (ulong)value);
-        }
-
-        public void PutInt(int offset, int value)
-        {
-            AssertOffsetAndLength(offset, sizeof(int));
-            WriteLittleEndian(offset, sizeof(int), (ulong)value);
-        }
-
-        public void PutUint(int offset, uint value)
-        {
-            AssertOffsetAndLength(offset, sizeof(uint));
-            WriteLittleEndian(offset, sizeof(uint), (ulong)value);
-        }
-
-        public void PutLong(int offset, long value)
-        {
-            AssertOffsetAndLength(offset, sizeof(long));
-            WriteLittleEndian(offset, sizeof(long), (ulong)value);
-        }
-
-        public void PutUlong(int offset, ulong value)
-        {
-            AssertOffsetAndLength(offset, sizeof(ulong));
-            WriteLittleEndian(offset, sizeof(ulong), value);
-        }
-
-        public void PutFloat(int offset, float value)
-        {
-            AssertOffsetAndLength(offset, sizeof(float));
-            floathelper[0] = value;
-            Buffer.BlockCopy(floathelper, 0, inthelper, 0, sizeof(float));
-            WriteLittleEndian(offset, sizeof(float), (ulong)inthelper[0]);
-        }
-
-        public void PutDouble(int offset, double value)
-        {
-            AssertOffsetAndLength(offset, sizeof(double));
-            doublehelper[0] = value;
-            Buffer.BlockCopy(doublehelper, 0, ulonghelper, 0, sizeof(double));
-            WriteLittleEndian(offset, sizeof(double), ulonghelper[0]);
-        }
-
-#endif // UNSAFE_BYTEBUFFER
-
-        public sbyte GetSbyte(int index)
-        {
-            AssertOffsetAndLength(index, sizeof(sbyte));
-            return (sbyte)_buffer[index];
-        }
-
-        public byte Get(int index)
-        {
-            AssertOffsetAndLength(index, sizeof(byte));
-            return _buffer[index];
-        }
-
-#if UNSAFE_BYTEBUFFER
-        // Unsafe but more efficient versions of Get*.
-        public short GetShort(int offset)
-        {
-            return (short)GetUshort(offset);
-        }
-
-        public unsafe ushort GetUshort(int offset)
-        {
-            AssertOffsetAndLength(offset, sizeof(ushort));
-            fixed (byte* ptr = _buffer)
-            {
-                return BitConverter.IsLittleEndian
-                    ? *(ushort*)(ptr + offset)
-                    : ReverseBytes(*(ushort*)(ptr + offset));
-            }
-        }
-
-        public int GetInt(int offset)
-        {
-            return (int)GetUint(offset);
-        }
-
-        public unsafe uint GetUint(int offset)
-        {
-            AssertOffsetAndLength(offset, sizeof(uint));
-            fixed (byte* ptr = _buffer)
-            {
-                return BitConverter.IsLittleEndian
-                    ? *(uint*)(ptr + offset)
-                    : ReverseBytes(*(uint*)(ptr + offset));
-            }
-        }
-
-        public long GetLong(int offset)
-        {
-            return (long)GetUlong(offset);
-        }
-
-        public unsafe ulong GetUlong(int offset)
-        {
-            AssertOffsetAndLength(offset, sizeof(ulong));
-            fixed (byte* ptr = _buffer)
-            {
-                return BitConverter.IsLittleEndian
-                    ? *(ulong*)(ptr + offset)
-                    : ReverseBytes(*(ulong*)(ptr + offset));
-            }
-        }
-
-        public unsafe float GetFloat(int offset)
-        {
-            AssertOffsetAndLength(offset, sizeof(float));
-            fixed (byte* ptr = _buffer)
-            {
-                if (BitConverter.IsLittleEndian)
-                {
-                    return *(float*)(ptr + offset);
-                }
-                else
-                {
-                    uint uvalue = ReverseBytes(*(uint*)(ptr + offset));
-                    return *(float*)(&uvalue);
-                }
-            }
-        }
-
-        public unsafe double GetDouble(int offset)
-        {
-            AssertOffsetAndLength(offset, sizeof(double));
-            fixed (byte* ptr = _buffer)
-            {
-                if (BitConverter.IsLittleEndian)
-                {
-                    return *(double*)(ptr + offset);
-                }
-                else
-                {
-                    ulong uvalue = ReverseBytes(*(ulong*)(ptr + offset));
-                    return *(double*)(&uvalue);
-                }
-            }
-        }
-#else // !UNSAFE_BYTEBUFFER
-        // Slower versions of Get* for when unsafe code is not allowed.
-        public short GetShort(int index)
-        {
-            return (short)ReadLittleEndian(index, sizeof(short));
-        }
-
-        public ushort GetUshort(int index)
-        {
-            return (ushort)ReadLittleEndian(index, sizeof(ushort));
-        }
-
-        public int GetInt(int index)
-        {
-            return (int)ReadLittleEndian(index, sizeof(int));
-        }
-
-        public uint GetUint(int index)
-        {
-            return (uint)ReadLittleEndian(index, sizeof(uint));
-        }
-
-        public long GetLong(int index)
-        {
-           return (long)ReadLittleEndian(index, sizeof(long));
-        }
-
-        public ulong GetUlong(int index)
-        {
-            return ReadLittleEndian(index, sizeof(ulong));
-        }
-
-        public float GetFloat(int index)
-        {
-            int i = (int)ReadLittleEndian(index, sizeof(float));
-            inthelper[0] = i;
-            Buffer.BlockCopy(inthelper, 0, floathelper, 0, sizeof(float));
-            return floathelper[0];
-        }
-
-        public double GetDouble(int index)
-        {
-            ulong i = ReadLittleEndian(index, sizeof(double));
-            // There's Int64BitsToDouble but it uses unsafe code internally.
-            ulonghelper[0] = i;
-            Buffer.BlockCopy(ulonghelper, 0, doublehelper, 0, sizeof(double));
-            return doublehelper[0];
-        }
-#endif // UNSAFE_BYTEBUFFER
-    }
-}
diff --git a/third_party/flatbuffers/net/FlatBuffers/FlatBufferBuilder.cs b/third_party/flatbuffers/net/FlatBuffers/FlatBufferBuilder.cs
deleted file mode 100644
index b6701df..0000000
--- a/third_party/flatbuffers/net/FlatBuffers/FlatBufferBuilder.cs
+++ /dev/null
@@ -1,652 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-using System;
-using System.Text;
-
-/// @file
-/// @addtogroup flatbuffers_csharp_api
-/// @{
-
-namespace FlatBuffers
-{
-    /// <summary>
-    /// Responsible for building up and accessing a FlatBuffer formatted byte
-    /// array (via ByteBuffer).
-    /// </summary>
-    public class FlatBufferBuilder
-    {
-        private int _space;
-        private ByteBuffer _bb;
-        private int _minAlign = 1;
-
-        // The vtable for the current table (if _vtableSize >= 0)
-        private int[] _vtable = new int[16];
-        // The size of the vtable. -1 indicates no vtable
-        private int _vtableSize = -1;
-        // Starting offset of the current struct/table.
-        private int _objectStart;
-        // List of offsets of all vtables.
-        private int[] _vtables = new int[16];
-        // Number of entries in `vtables` in use.
-        private int _numVtables = 0;
-        // For the current vector being built.
-        private int _vectorNumElems = 0;
-
-        /// <summary>
-        /// Create a FlatBufferBuilder with a given initial size.
-        /// </summary>
-        /// <param name="initialSize">
-        /// The initial size to use for the internal buffer.
-        /// </param>
-        public FlatBufferBuilder(int initialSize)
-        {
-            if (initialSize <= 0)
-                throw new ArgumentOutOfRangeException("initialSize",
-                    initialSize, "Must be greater than zero");
-            _space = initialSize;
-            _bb = new ByteBuffer(new byte[initialSize]);
-        }
-
-        /// <summary>
-        /// Reset the FlatBufferBuilder by purging all data that it holds.
-        /// </summary>
-        public void Clear()
-        {
-            _space = _bb.Length;
-            _bb.Reset();
-            _minAlign = 1;
-            while (_vtableSize > 0) _vtable[--_vtableSize] = 0;
-            _vtableSize = -1;
-            _objectStart = 0;
-            _numVtables = 0;
-            _vectorNumElems = 0;
-        }
-
-        /// <summary>
-        /// Gets and sets a Boolean to disable the optimization when serializing
-        /// default values to a Table.
-        ///
-        /// In order to save space, fields that are set to their default value
-        /// don't get serialized into the buffer.
-        /// </summary>
-        public bool ForceDefaults { get; set; }
-
-        /// @cond FLATBUFFERS_INTERNAL
-
-        public int Offset { get { return _bb.Length - _space; } }
-
-        public void Pad(int size)
-        {
-             _bb.PutByte(_space -= size, 0, size);
-        }
-
-        // Doubles the size of the ByteBuffer, and copies the old data towards
-        // the end of the new buffer (since we build the buffer backwards).
-        void GrowBuffer()
-        {
-            var oldBuf = _bb.Data;
-            var oldBufSize = oldBuf.Length;
-            if ((oldBufSize & 0xC0000000) != 0)
-                throw new Exception(
-                    "FlatBuffers: cannot grow buffer beyond 2 gigabytes.");
-
-            var newBufSize = oldBufSize << 1;
-            var newBuf = new byte[newBufSize];
-
-            Buffer.BlockCopy(oldBuf, 0, newBuf, newBufSize - oldBufSize,
-                             oldBufSize);
-            _bb = new ByteBuffer(newBuf, newBufSize);
-        }
-
-        // Prepare to write an element of `size` after `additional_bytes`
-        // have been written, e.g. if you write a string, you need to align
-        // such the int length field is aligned to SIZEOF_INT, and the string
-        // data follows it directly.
-        // If all you need to do is align, `additional_bytes` will be 0.
-        public void Prep(int size, int additionalBytes)
-        {
-            // Track the biggest thing we've ever aligned to.
-            if (size > _minAlign)
-                _minAlign = size;
-            // Find the amount of alignment needed such that `size` is properly
-            // aligned after `additional_bytes`
-            var alignSize =
-                ((~((int)_bb.Length - _space + additionalBytes)) + 1) &
-                (size - 1);
-            // Reallocate the buffer if needed.
-            while (_space < alignSize + size + additionalBytes)
-            {
-                var oldBufSize = (int)_bb.Length;
-                GrowBuffer();
-                _space += (int)_bb.Length - oldBufSize;
-
-            }
-            if (alignSize > 0)
-                Pad(alignSize);
-        }
-
-        public void PutBool(bool x)
-        {
-          _bb.PutByte(_space -= sizeof(byte), (byte)(x ? 1 : 0));
-        }
-
-        public void PutSbyte(sbyte x)
-        {
-          _bb.PutSbyte(_space -= sizeof(sbyte), x);
-        }
-
-        public void PutByte(byte x)
-        {
-            _bb.PutByte(_space -= sizeof(byte), x);
-        }
-
-        public void PutShort(short x)
-        {
-            _bb.PutShort(_space -= sizeof(short), x);
-        }
-
-        public void PutUshort(ushort x)
-        {
-          _bb.PutUshort(_space -= sizeof(ushort), x);
-        }
-
-        public void PutInt(int x)
-        {
-            _bb.PutInt(_space -= sizeof(int), x);
-        }
-
-        public void PutUint(uint x)
-        {
-          _bb.PutUint(_space -= sizeof(uint), x);
-        }
-
-        public void PutLong(long x)
-        {
-            _bb.PutLong(_space -= sizeof(long), x);
-        }
-
-        public void PutUlong(ulong x)
-        {
-          _bb.PutUlong(_space -= sizeof(ulong), x);
-        }
-
-        public void PutFloat(float x)
-        {
-            _bb.PutFloat(_space -= sizeof(float), x);
-        }
-
-        public void PutDouble(double x)
-        {
-            _bb.PutDouble(_space -= sizeof(double), x);
-        }
-        /// @endcond
-
-        /// <summary>
-        /// Add a `bool` to the buffer (aligns the data and grows if necessary).
-        /// </summary>
-        /// <param name="x">The `bool` to add to the buffer.</param>
-        public void AddBool(bool x) { Prep(sizeof(byte), 0); PutBool(x); }
-
-        /// <summary>
-        /// Add a `sbyte` to the buffer (aligns the data and grows if necessary).
-        /// </summary>
-        /// <param name="x">The `sbyte` to add to the buffer.</param>
-        public void AddSbyte(sbyte x) { Prep(sizeof(sbyte), 0); PutSbyte(x); }
-
-        /// <summary>
-        /// Add a `byte` to the buffer (aligns the data and grows if necessary).
-        /// </summary>
-        /// <param name="x">The `byte` to add to the buffer.</param>
-        public void AddByte(byte x) { Prep(sizeof(byte), 0); PutByte(x); }
-
-        /// <summary>
-        /// Add a `short` to the buffer (aligns the data and grows if necessary).
-        /// </summary>
-        /// <param name="x">The `short` to add to the buffer.</param>
-        public void AddShort(short x) { Prep(sizeof(short), 0); PutShort(x); }
-
-        /// <summary>
-        /// Add an `ushort` to the buffer (aligns the data and grows if necessary).
-        /// </summary>
-        /// <param name="x">The `ushort` to add to the buffer.</param>
-        public void AddUshort(ushort x) { Prep(sizeof(ushort), 0); PutUshort(x); }
-
-        /// <summary>
-        /// Add an `int` to the buffer (aligns the data and grows if necessary).
-        /// </summary>
-        /// <param name="x">The `int` to add to the buffer.</param>
-        public void AddInt(int x) { Prep(sizeof(int), 0); PutInt(x); }
-
-        /// <summary>
-        /// Add an `uint` to the buffer (aligns the data and grows if necessary).
-        /// </summary>
-        /// <param name="x">The `uint` to add to the buffer.</param>
-        public void AddUint(uint x) { Prep(sizeof(uint), 0); PutUint(x); }
-
-        /// <summary>
-        /// Add a `long` to the buffer (aligns the data and grows if necessary).
-        /// </summary>
-        /// <param name="x">The `long` to add to the buffer.</param>
-        public void AddLong(long x) { Prep(sizeof(long), 0); PutLong(x); }
-
-        /// <summary>
-        /// Add an `ulong` to the buffer (aligns the data and grows if necessary).
-        /// </summary>
-        /// <param name="x">The `ulong` to add to the buffer.</param>
-        public void AddUlong(ulong x) { Prep(sizeof(ulong), 0); PutUlong(x); }
-
-        /// <summary>
-        /// Add a `float` to the buffer (aligns the data and grows if necessary).
-        /// </summary>
-        /// <param name="x">The `float` to add to the buffer.</param>
-        public void AddFloat(float x) { Prep(sizeof(float), 0); PutFloat(x); }
-
-        /// <summary>
-        /// Add a `double` to the buffer (aligns the data and grows if necessary).
-        /// </summary>
-        /// <param name="x">The `double` to add to the buffer.</param>
-        public void AddDouble(double x) { Prep(sizeof(double), 0);
-                                          PutDouble(x); }
-
-        /// <summary>
-        /// Adds an offset, relative to where it will be written.
-        /// </summary>
-        /// <param name="off">The offset to add to the buffer.</param>
-        public void AddOffset(int off)
-        {
-            Prep(sizeof(int), 0);  // Ensure alignment is already done.
-            if (off > Offset)
-                throw new ArgumentException();
-
-            off = Offset - off + sizeof(int);
-            PutInt(off);
-        }
-
-        /// @cond FLATBUFFERS_INTERNAL
-        public void StartVector(int elemSize, int count, int alignment)
-        {
-            NotNested();
-            _vectorNumElems = count;
-            Prep(sizeof(int), elemSize * count);
-            Prep(alignment, elemSize * count); // Just in case alignment > int.
-        }
-        /// @endcond
-
-        /// <summary>
-        /// Writes data necessary to finish a vector construction.
-        /// </summary>
-        public VectorOffset EndVector()
-        {
-            PutInt(_vectorNumElems);
-            return new VectorOffset(Offset);
-        }
-
-        /// <summary>
-        /// Creates a vector of tables.
-        /// </summary>
-        /// <param name="offsets">Offsets of the tables.</param>
-        public VectorOffset CreateVectorOfTables<T>(Offset<T>[] offsets) where T : struct
-        {
-            NotNested();
-            StartVector(sizeof(int), offsets.Length, sizeof(int));
-            for (int i = offsets.Length - 1; i >= 0; i--) AddOffset(offsets[i].Value);
-            return EndVector();
-        }
-
-        /// @cond FLATBUFFERS_INTENRAL
-        public void Nested(int obj)
-        {
-            // Structs are always stored inline, so need to be created right
-            // where they are used. You'll get this assert if you created it
-            // elsewhere.
-            if (obj != Offset)
-                throw new Exception(
-                    "FlatBuffers: struct must be serialized inline.");
-        }
-
-        public void NotNested()
-        {
-            // You should not be creating any other objects or strings/vectors
-            // while an object is being constructed
-            if (_vtableSize >= 0)
-                throw new Exception(
-                    "FlatBuffers: object serialization must not be nested.");
-        }
-
-        public void StartObject(int numfields)
-        {
-            if (numfields < 0)
-                throw new ArgumentOutOfRangeException("Flatbuffers: invalid numfields");
-
-            NotNested();
-
-            if (_vtable.Length < numfields)
-                _vtable = new int[numfields];
-
-            _vtableSize = numfields;
-            _objectStart = Offset;
-        }
-
-
-        // Set the current vtable at `voffset` to the current location in the
-        // buffer.
-        public void Slot(int voffset)
-        {
-            if (voffset >= _vtableSize)
-                throw new IndexOutOfRangeException("Flatbuffers: invalid voffset");
-
-            _vtable[voffset] = Offset;
-        }
-
-        /// <summary>
-        /// Adds a Boolean to the Table at index `o` in its vtable using the value `x` and default `d`
-        /// </summary>
-        /// <param name="o">The index into the vtable</param>
-        /// <param name="x">The value to put into the buffer. If the value is equal to the default
-        /// and <see cref="ForceDefaults"/> is false, the value will be skipped.</param>
-        /// <param name="d">The default value to compare the value against</param>
-        public void AddBool(int o, bool x, bool d) { if (ForceDefaults || x != d) { AddBool(x); Slot(o); } }
-
-        /// <summary>
-        /// Adds a SByte to the Table at index `o` in its vtable using the value `x` and default `d`
-        /// </summary>
-        /// <param name="o">The index into the vtable</param>
-        /// <param name="x">The value to put into the buffer. If the value is equal to the default
-        /// and <see cref="ForceDefaults"/> is false, the value will be skipped.</param>
-        /// <param name="d">The default value to compare the value against</param>
-        public void AddSbyte(int o, sbyte x, sbyte d) { if (ForceDefaults || x != d) { AddSbyte(x); Slot(o); } }
-
-        /// <summary>
-        /// Adds a Byte to the Table at index `o` in its vtable using the value `x` and default `d`
-        /// </summary>
-        /// <param name="o">The index into the vtable</param>
-        /// <param name="x">The value to put into the buffer. If the value is equal to the default
-        /// and <see cref="ForceDefaults"/> is false, the value will be skipped.</param>
-        /// <param name="d">The default value to compare the value against</param>
-        public void AddByte(int o, byte x, byte d) { if (ForceDefaults || x != d) { AddByte(x); Slot(o); } }
-
-        /// <summary>
-        /// Adds a Int16 to the Table at index `o` in its vtable using the value `x` and default `d`
-        /// </summary>
-        /// <param name="o">The index into the vtable</param>
-        /// <param name="x">The value to put into the buffer. If the value is equal to the default
-        /// and <see cref="ForceDefaults"/> is false, the value will be skipped.</param>
-        /// <param name="d">The default value to compare the value against</param>
-        public void AddShort(int o, short x, int d) { if (ForceDefaults || x != d) { AddShort(x); Slot(o); } }
-
-        /// <summary>
-        /// Adds a UInt16 to the Table at index `o` in its vtable using the value `x` and default `d`
-        /// </summary>
-        /// <param name="o">The index into the vtable</param>
-        /// <param name="x">The value to put into the buffer. If the value is equal to the default
-        /// and <see cref="ForceDefaults"/> is false, the value will be skipped.</param>
-        /// <param name="d">The default value to compare the value against</param>
-        public void AddUshort(int o, ushort x, ushort d) { if (ForceDefaults || x != d) { AddUshort(x); Slot(o); } }
-
-        /// <summary>
-        /// Adds an Int32 to the Table at index `o` in its vtable using the value `x` and default `d`
-        /// </summary>
-        /// <param name="o">The index into the vtable</param>
-        /// <param name="x">The value to put into the buffer. If the value is equal to the default
-        /// and <see cref="ForceDefaults"/> is false, the value will be skipped.</param>
-        /// <param name="d">The default value to compare the value against</param>
-        public void AddInt(int o, int x, int d) { if (ForceDefaults || x != d) { AddInt(x); Slot(o); } }
-
-        /// <summary>
-        /// Adds a UInt32 to the Table at index `o` in its vtable using the value `x` and default `d`
-        /// </summary>
-        /// <param name="o">The index into the vtable</param>
-        /// <param name="x">The value to put into the buffer. If the value is equal to the default
-        /// and <see cref="ForceDefaults"/> is false, the value will be skipped.</param>
-        /// <param name="d">The default value to compare the value against</param>
-        public void AddUint(int o, uint x, uint d) { if (ForceDefaults || x != d) { AddUint(x); Slot(o); } }
-
-        /// <summary>
-        /// Adds an Int64 to the Table at index `o` in its vtable using the value `x` and default `d`
-        /// </summary>
-        /// <param name="o">The index into the vtable</param>
-        /// <param name="x">The value to put into the buffer. If the value is equal to the default
-        /// and <see cref="ForceDefaults"/> is false, the value will be skipped.</param>
-        /// <param name="d">The default value to compare the value against</param>
-        public void AddLong(int o, long x, long d) { if (ForceDefaults || x != d) { AddLong(x); Slot(o); } }
-
-        /// <summary>
-        /// Adds a UInt64 to the Table at index `o` in its vtable using the value `x` and default `d`
-        /// </summary>
-        /// <param name="o">The index into the vtable</param>
-        /// <param name="x">The value to put into the buffer. If the value is equal to the default
-        /// and <see cref="ForceDefaults"/> is false, the value will be skipped.</param>
-        /// <param name="d">The default value to compare the value against</param>
-        public void AddUlong(int o, ulong x, ulong d) { if (ForceDefaults || x != d) { AddUlong(x); Slot(o); } }
-
-        /// <summary>
-        /// Adds a Single to the Table at index `o` in its vtable using the value `x` and default `d`
-        /// </summary>
-        /// <param name="o">The index into the vtable</param>
-        /// <param name="x">The value to put into the buffer. If the value is equal to the default
-        /// and <see cref="ForceDefaults"/> is false, the value will be skipped.</param>
-        /// <param name="d">The default value to compare the value against</param>
-        public void AddFloat(int o, float x, double d) { if (ForceDefaults || x != d) { AddFloat(x); Slot(o); } }
-
-        /// <summary>
-        /// Adds a Double to the Table at index `o` in its vtable using the value `x` and default `d`
-        /// </summary>
-        /// <param name="o">The index into the vtable</param>
-        /// <param name="x">The value to put into the buffer. If the value is equal to the default
-        /// and <see cref="ForceDefaults"/> is false, the value will be skipped.</param>
-        /// <param name="d">The default value to compare the value against</param>
-        public void AddDouble(int o, double x, double d) { if (ForceDefaults || x != d) { AddDouble(x); Slot(o); } }
-
-        /// <summary>
-        /// Adds a buffer offset to the Table at index `o` in its vtable using the value `x` and default `d`
-        /// </summary>
-        /// <param name="o">The index into the vtable</param>
-        /// <param name="x">The value to put into the buffer. If the value is equal to the default
-        /// and <see cref="ForceDefaults"/> is false, the value will be skipped.</param>
-        /// <param name="d">The default value to compare the value against</param>
-        public void AddOffset(int o, int x, int d) { if (ForceDefaults || x != d) { AddOffset(x); Slot(o); } }
-        /// @endcond
-
-        /// <summary>
-        /// Encode the string `s` in the buffer using UTF-8.
-        /// </summary>
-        /// <param name="s">The string to encode.</param>
-        /// <returns>
-        /// The offset in the buffer where the encoded string starts.
-        /// </returns>
-        public StringOffset CreateString(string s)
-        {
-            NotNested();
-            AddByte(0);
-            var utf8StringLen = Encoding.UTF8.GetByteCount(s);
-            StartVector(1, utf8StringLen, 1);
-            Encoding.UTF8.GetBytes(s, 0, s.Length, _bb.Data, _space -= utf8StringLen);
-            return new StringOffset(EndVector().Value);
-        }
-
-        /// @cond FLATBUFFERS_INTERNAL
-        // Structs are stored inline, so nothing additional is being added.
-        // `d` is always 0.
-        public void AddStruct(int voffset, int x, int d)
-        {
-            if (x != d)
-            {
-                Nested(x);
-                Slot(voffset);
-            }
-        }
-
-        public int EndObject()
-        {
-            if (_vtableSize < 0)
-                throw new InvalidOperationException(
-                  "Flatbuffers: calling endObject without a startObject");
-
-            AddInt((int)0);
-            var vtableloc = Offset;
-            // Write out the current vtable.
-            for (int i = _vtableSize - 1; i >= 0 ; i--) {
-                // Offset relative to the start of the table.
-                short off = (short)(_vtable[i] != 0
-                                        ? vtableloc - _vtable[i]
-                                        : 0);
-                AddShort(off);
-
-                // clear out written entry
-                _vtable[i] = 0;
-            }
-
-            const int standardFields = 2; // The fields below:
-            AddShort((short)(vtableloc - _objectStart));
-            AddShort((short)((_vtableSize + standardFields) *
-                             sizeof(short)));
-
-            // Search for an existing vtable that matches the current one.
-            int existingVtable = 0;
-            for (int i = 0; i < _numVtables; i++) {
-                int vt1 = _bb.Length - _vtables[i];
-                int vt2 = _space;
-                short len = _bb.GetShort(vt1);
-                if (len == _bb.GetShort(vt2)) {
-                    for (int j = sizeof(short); j < len; j += sizeof(short)) {
-                        if (_bb.GetShort(vt1 + j) != _bb.GetShort(vt2 + j)) {
-                            goto endLoop;
-                        }
-                    }
-                    existingVtable = _vtables[i];
-                    break;
-                }
-
-            endLoop: { }
-            }
-
-            if (existingVtable != 0) {
-                // Found a match:
-                // Remove the current vtable.
-                _space = _bb.Length - vtableloc;
-                // Point table to existing vtable.
-                _bb.PutInt(_space, existingVtable - vtableloc);
-            } else {
-                // No match:
-                // Add the location of the current vtable to the list of
-                // vtables.
-                if (_numVtables == _vtables.Length)
-                {
-                    // Arrays.CopyOf(vtables num_vtables * 2);
-                    var newvtables = new int[ _numVtables * 2];
-                    Array.Copy(_vtables, newvtables, _vtables.Length);
-
-                    _vtables = newvtables;
-                };
-                _vtables[_numVtables++] = Offset;
-                // Point table to current vtable.
-                _bb.PutInt(_bb.Length - vtableloc, Offset - vtableloc);
-            }
-
-            _vtableSize = -1;
-            return vtableloc;
-        }
-
-        // This checks a required field has been set in a given table that has
-        // just been constructed.
-        public void Required(int table, int field)
-        {
-          int table_start = _bb.Length - table;
-          int vtable_start = table_start - _bb.GetInt(table_start);
-          bool ok = _bb.GetShort(vtable_start + field) != 0;
-          // If this fails, the caller will show what field needs to be set.
-          if (!ok)
-            throw new InvalidOperationException("FlatBuffers: field " + field +
-                                                " must be set");
-        }
-        /// @endcond
-
-        /// <summary>
-        /// Finalize a buffer, pointing to the given `root_table`.
-        /// </summary>
-        /// <param name="rootTable">
-        /// An offset to be added to the buffer.
-        /// </param>
-        public void Finish(int rootTable)
-        {
-            Prep(_minAlign, sizeof(int));
-            AddOffset(rootTable);
-            _bb.Position = _space;
-        }
-
-        /// <summary>
-        /// Get the ByteBuffer representing the FlatBuffer.
-        /// </summary>
-        /// <remarks>
-        /// This is typically only called after you call `Finish()`.
-        /// The actual data starts at the ByteBuffer's current position,
-        /// not necessarily at `0`.
-        /// </remarks>
-        /// <returns>
-        /// Returns the ByteBuffer for this FlatBuffer.
-        /// </returns>
-        public ByteBuffer DataBuffer { get { return _bb; } }
-
-        /// <summary>
-        /// A utility function to copy and return the ByteBuffer data as a
-        /// `byte[]`.
-        /// </summary>
-        /// <returns>
-        /// A full copy of the FlatBuffer data.
-        /// </returns>
-        public byte[] SizedByteArray()
-        {
-            var newArray = new byte[_bb.Data.Length - _bb.Position];
-            Buffer.BlockCopy(_bb.Data, _bb.Position, newArray, 0,
-                             _bb.Data.Length - _bb.Position);
-            return newArray;
-        }
-
-         /// <summary>
-         /// Finalize a buffer, pointing to the given `rootTable`.
-         /// </summary>
-         /// <param name="rootTable">
-         /// An offset to be added to the buffer.
-         /// </param>
-         /// <param name="fileIdentifier">
-         /// A FlatBuffer file identifier to be added to the buffer before
-         /// `root_table`.
-         /// </param>
-         public void Finish(int rootTable, string fileIdentifier)
-         {
-             Prep(_minAlign, sizeof(int) +
-                             FlatBufferConstants.FileIdentifierLength);
-             if (fileIdentifier.Length !=
-                 FlatBufferConstants.FileIdentifierLength)
-                 throw new ArgumentException(
-                     "FlatBuffers: file identifier must be length " +
-                     FlatBufferConstants.FileIdentifierLength,
-                     "fileIdentifier");
-             for (int i = FlatBufferConstants.FileIdentifierLength - 1; i >= 0;
-                  i--)
-             {
-                AddByte((byte)fileIdentifier[i]);
-             }
-             Finish(rootTable);
-        }
-
-
-    }
-}
-
-/// @}
diff --git a/third_party/flatbuffers/net/FlatBuffers/FlatBufferConstants.cs b/third_party/flatbuffers/net/FlatBuffers/FlatBufferConstants.cs
deleted file mode 100644
index ab3092c..0000000
--- a/third_party/flatbuffers/net/FlatBuffers/FlatBufferConstants.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace FlatBuffers
-{
-    public static class FlatBufferConstants
-    {
-        public const int FileIdentifierLength = 4;
-    }
-}
diff --git a/third_party/flatbuffers/net/FlatBuffers/FlatBuffers.csproj b/third_party/flatbuffers/net/FlatBuffers/FlatBuffers.csproj
deleted file mode 100644
index 2a0cf99..0000000
--- a/third_party/flatbuffers/net/FlatBuffers/FlatBuffers.csproj
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{28C00774-1E73-4A75-AD8F-844CD21A064D}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>FlatBuffers</RootNamespace>
-    <AssemblyName>FlatBuffers</AssemblyName>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="ByteBuffer.cs" />
-    <Compile Include="FlatBufferBuilder.cs" />
-    <Compile Include="FlatBufferConstants.cs" />
-    <Compile Include="IFlatbufferObject.cs" />
-    <Compile Include="Offset.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Struct.cs" />
-    <Compile Include="Table.cs" />
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>
\ No newline at end of file
diff --git a/third_party/flatbuffers/net/FlatBuffers/IFlatbufferObject.cs b/third_party/flatbuffers/net/FlatBuffers/IFlatbufferObject.cs
deleted file mode 100644
index 6a15aba..0000000
--- a/third_party/flatbuffers/net/FlatBuffers/IFlatbufferObject.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace FlatBuffers
-{
-    /// <summary>
-    /// This is the base for both structs and tables.
-    /// </summary>
-    public interface IFlatbufferObject
-    {
-        void __init(int _i, ByteBuffer _bb);
-
-        ByteBuffer ByteBuffer { get; }
-    }
-}
diff --git a/third_party/flatbuffers/net/FlatBuffers/Offset.cs b/third_party/flatbuffers/net/FlatBuffers/Offset.cs
deleted file mode 100644
index 2b17cec..0000000
--- a/third_party/flatbuffers/net/FlatBuffers/Offset.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace FlatBuffers
-{
-    /// <summary>
-    /// Offset class for typesafe assignments.
-    /// </summary>
-    public struct Offset<T> where T : struct
-    {
-        public int Value;
-        public Offset(int value)
-        {
-            Value = value;
-        }
-    }
-
-    public struct StringOffset
-    {
-        public int Value;
-        public StringOffset(int value)
-        {
-            Value = value;
-        }
-    }
-
-    public struct VectorOffset
-    {
-        public int Value;
-        public VectorOffset(int value)
-        {
-            Value = value;
-        }
-    }
-}
diff --git a/third_party/flatbuffers/net/FlatBuffers/Properties/AssemblyInfo.cs b/third_party/flatbuffers/net/FlatBuffers/Properties/AssemblyInfo.cs
deleted file mode 100644
index 1edfac4..0000000
--- a/third_party/flatbuffers/net/FlatBuffers/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("FlatBuffers")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("FlatBuffers")]
-[assembly: AssemblyCopyright("Copyright (c) 2015 Google Inc")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components.  If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("91c32e64-ef20-47df-9c9f-cec9207bc6df")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/third_party/flatbuffers/net/FlatBuffers/Struct.cs b/third_party/flatbuffers/net/FlatBuffers/Struct.cs
deleted file mode 100644
index 61da32f..0000000
--- a/third_party/flatbuffers/net/FlatBuffers/Struct.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace FlatBuffers
-{
-    /// <summary>
-    /// All structs in the generated code derive from this class, and add their own accessors.
-    /// </summary>
-    public struct Struct
-    {
-        public int bb_pos;
-        public ByteBuffer bb;
-    }
-}
diff --git a/third_party/flatbuffers/net/FlatBuffers/Table.cs b/third_party/flatbuffers/net/FlatBuffers/Table.cs
deleted file mode 100644
index 55182b3..0000000
--- a/third_party/flatbuffers/net/FlatBuffers/Table.cs
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using System.Text;
-
-namespace FlatBuffers
-{
-    /// <summary>
-    /// All tables in the generated code derive from this struct, and add their own accessors.
-    /// </summary>
-    public struct Table
-    {
-        public int bb_pos;
-        public ByteBuffer bb;
-
-        public ByteBuffer ByteBuffer { get { return bb; } }
-
-        // Look up a field in the vtable, return an offset into the object, or 0 if the field is not
-        // present.
-        public int __offset(int vtableOffset)
-        {
-            int vtable = bb_pos - bb.GetInt(bb_pos);
-            return vtableOffset < bb.GetShort(vtable) ? (int)bb.GetShort(vtable + vtableOffset) : 0;
-        }
-
-        public static int __offset(int vtableOffset, int offset, ByteBuffer bb)
-        {
-            int vtable = bb.Length - offset;
-            return (int)bb.GetShort(vtable + vtableOffset - bb.GetInt(vtable)) + vtable;
-        }
-
-        // Retrieve the relative offset stored at "offset"
-        public int __indirect(int offset)
-        {
-            return offset + bb.GetInt(offset);
-        }
-
-        public static int __indirect(int offset, ByteBuffer bb)
-        {
-            return offset + bb.GetInt(offset);
-        }
-
-        // Create a .NET String from UTF-8 data stored inside the flatbuffer.
-        public string __string(int offset)
-        {
-            offset += bb.GetInt(offset);
-            var len = bb.GetInt(offset);
-            var startPos = offset + sizeof(int);
-            return Encoding.UTF8.GetString(bb.Data, startPos , len);
-        }
-
-        // Get the length of a vector whose offset is stored at "offset" in this object.
-        public int __vector_len(int offset)
-        {
-            offset += bb_pos;
-            offset += bb.GetInt(offset);
-            return bb.GetInt(offset);
-        }
-
-        // Get the start of data of a vector whose offset is stored at "offset" in this object.
-        public int __vector(int offset)
-        {
-            offset += bb_pos;
-            return offset + bb.GetInt(offset) + sizeof(int);  // data starts after the length
-        }
-
-        // Get the data of a vector whoses offset is stored at "offset" in this object as an
-        // ArraySegment&lt;byte&gt;. If the vector is not present in the ByteBuffer,
-        // then a null value will be returned.
-        public ArraySegment<byte>? __vector_as_arraysegment(int offset)
-        {
-            var o = this.__offset(offset);
-            if (0 == o)
-            {
-                return null;
-            }
-
-            var pos = this.__vector(o);
-            var len = this.__vector_len(o);
-            return new ArraySegment<byte>(this.bb.Data, pos, len);
-        }
-
-        // Initialize any Table-derived type to point to the union at the given offset.
-        public T __union<T>(int offset) where T : struct, IFlatbufferObject
-        {
-            offset += bb_pos;
-            T t = new T();
-            t.__init(offset + bb.GetInt(offset), bb);
-            return t;
-        }
-
-        public static bool __has_identifier(ByteBuffer bb, string ident)
-        {
-            if (ident.Length != FlatBufferConstants.FileIdentifierLength)
-                throw new ArgumentException("FlatBuffers: file identifier must be length " + FlatBufferConstants.FileIdentifierLength, "ident");
-
-            for (var i = 0; i < FlatBufferConstants.FileIdentifierLength; i++)
-            {
-                if (ident[i] != (char)bb.Get(bb.Position + sizeof(int) + i)) return false;
-            }
-
-            return true;
-        }
-
-        // Compare strings in the ByteBuffer.
-        public static int CompareStrings(int offset_1, int offset_2, ByteBuffer bb)
-        {
-            offset_1 += bb.GetInt(offset_1);
-            offset_2 += bb.GetInt(offset_2);
-            var len_1 = bb.GetInt(offset_1);
-            var len_2 = bb.GetInt(offset_2);
-            var startPos_1 = offset_1 + sizeof(int);
-            var startPos_2 = offset_2 + sizeof(int);
-            var len = Math.Min(len_1, len_2);
-            byte[] bbArray = bb.Data;
-            for(int i = 0; i < len; i++) {
-                if (bbArray[i + startPos_1] != bbArray[i + startPos_2])
-                    return bbArray[i + startPos_1] - bbArray[i + startPos_2];
-            }
-            return len_1 - len_2;
-        }
-
-        // Compare string from the ByteBuffer with the string object
-        public static int CompareStrings(int offset_1, byte[] key, ByteBuffer bb)
-        {
-            offset_1 += bb.GetInt(offset_1);
-            var len_1 = bb.GetInt(offset_1);
-            var len_2 = key.Length;
-            var startPos_1 = offset_1 + sizeof(int);
-            var len = Math.Min(len_1, len_2);
-            byte[] bbArray = bb.Data;
-            for (int i = 0; i < len; i++) {
-                if (bbArray[i + startPos_1] != key[i])
-                    return bbArray[i + startPos_1] - key[i];
-            }
-            return len_1 - len_2;
-        }
-    }
-}
diff --git a/third_party/flatbuffers/package.json b/third_party/flatbuffers/package.json
deleted file mode 100644
index 070d907..0000000
--- a/third_party/flatbuffers/package.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
-  "name": "flatbuffers",
-  "version": "1.6.0",
-  "description": "Memory Efficient Serialization Library",
-  "files": ["js/flatbuffers.js"],
-  "main": "js/flatbuffers.js",
-  "directories": {
-    "doc": "docs",
-    "test": "tests"
-  },
-  "scripts": {
-    "test": "tests/JavaScriptTest.sh"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/google/flatbuffers.git"
-  },
-  "keywords": [
-    "flatbuffers"
-  ],
-  "author": "The FlatBuffers project",
-  "license": "SEE LICENSE IN LICENSE.txt",
-  "bugs": {
-    "url": "https://github.com/google/flatbuffers/issues"
-  },
-  "homepage": "https://google.github.io/flatbuffers/"
-}
diff --git a/third_party/flatbuffers/php/ByteBuffer.php b/third_party/flatbuffers/php/ByteBuffer.php
deleted file mode 100644
index 9929a7d..0000000
--- a/third_party/flatbuffers/php/ByteBuffer.php
+++ /dev/null
@@ -1,493 +0,0 @@
-<?php
-/*
- * Copyright 2015 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Google\FlatBuffers;
-
-class ByteBuffer
-{
-    /**
-     * @var string $_buffer;
-     */
-    public $_buffer;
-
-    /**
-     * @var int $_pos;
-     */
-    private $_pos;
-
-    /**
-     * @var bool $_is_little_endian
-     */
-    private static $_is_little_endian = null;
-
-    public static function wrap($bytes)
-    {
-        $bb = new ByteBuffer(0);
-        $bb->_buffer = $bytes;
-
-        return $bb;
-    }
-
-    /**
-     * @param $size
-     */
-    public function __construct($size)
-    {
-        $this->_buffer = str_repeat("\0", $size);
-    }
-
-    /**
-     * @return int
-     */
-    public function capacity()
-    {
-        return strlen($this->_buffer);
-    }
-
-    /**
-     * @return int
-     */
-    public function getPosition()
-    {
-        return $this->_pos;
-    }
-
-    /**
-     * @param $pos
-     */
-    public function setPosition($pos)
-    {
-        $this->_pos = $pos;
-    }
-
-    /**
-     *
-     */
-    public function reset()
-    {
-        $this->_pos = 0;
-    }
-
-    /**
-     * @return int
-     */
-    public function length()
-    {
-        return strlen($this->_buffer);
-    }
-
-    /**
-     * @return string
-     */
-    public function data()
-    {
-        return substr($this->_buffer, $this->_pos);
-    }
-
-    /**
-     * @return bool
-     */
-    public static function isLittleEndian()
-    {
-        if (ByteBuffer::$_is_little_endian === null) {
-            ByteBuffer::$_is_little_endian = unpack('S', "\x01\x00")[1] === 1;
-        }
-
-        return ByteBuffer::$_is_little_endian;
-    }
-
-    /**
-     * write little endian value to the buffer.
-     *
-     * @param $offset
-     * @param $count byte length
-     * @param $data actual values
-     */
-    public function writeLittleEndian($offset, $count, $data)
-    {
-        if (ByteBuffer::isLittleEndian()) {
-            for ($i = 0; $i < $count; $i++) {
-                $this->_buffer[$offset + $i] = chr($data >> $i * 8);
-            }
-        } else {
-            for ($i = 0; $i < $count; $i++) {
-                $this->_buffer[$offset + $count - 1 - $i] = chr($data >> $i * 8);
-            }
-        }
-    }
-
-    /**
-     * read little endian value from the buffer
-     *
-     * @param $offset
-     * @param $count acutal size
-     * @return int
-     */
-    public function readLittleEndian($offset, $count, $force_bigendian = false)
-    {
-        $this->assertOffsetAndLength($offset, $count);
-        $r = 0;
-
-        if (ByteBuffer::isLittleEndian() && $force_bigendian == false) {
-            for ($i = 0; $i < $count; $i++) {
-                $r |= ord($this->_buffer[$offset + $i]) << $i * 8;
-            }
-        } else {
-            for ($i = 0; $i < $count; $i++) {
-                $r |= ord($this->_buffer[$offset + $count -1 - $i]) << $i * 8;
-            }
-        }
-
-        return $r;
-    }
-
-    /**
-     * @param $offset
-     * @param $length
-     */
-    public function assertOffsetAndLength($offset, $length)
-    {
-        if ($offset < 0 ||
-            $offset >= strlen($this->_buffer) ||
-            $offset + $length > strlen($this->_buffer)) {
-            throw new \OutOfRangeException(sprintf("offset: %d, length: %d, buffer; %d", $offset, $length, strlen($this->_buffer)));
-        }
-    }
-
-    /**
-     * @param $offset
-     * @param $value
-     * @return mixed
-     */
-    public function putSbyte($offset, $value)
-    {
-        self::validateValue(-128, 127, $value, "sbyte");
-
-        $length = strlen($value);
-        $this->assertOffsetAndLength($offset, $length);
-        return $this->_buffer[$offset] = $value;
-    }
-
-    /**
-     * @param $offset
-     * @param $value
-     * @return mixed
-     */
-    public function putByte($offset, $value)
-    {
-        self::validateValue(0, 255, $value, "byte");
-
-        $length = strlen($value);
-        $this->assertOffsetAndLength($offset, $length);
-        return $this->_buffer[$offset] = $value;
-    }
-
-    /**
-     * @param $offset
-     * @param $value
-     */
-    public function put($offset, $value)
-    {
-        $length = strlen($value);
-        $this->assertOffsetAndLength($offset, $length);
-        for ($i = 0; $i < $length; $i++) {
-            $this->_buffer[$offset + $i] = $value[$i];
-        }
-    }
-
-    /**
-     * @param $offset
-     * @param $value
-     */
-    public function putShort($offset, $value)
-    {
-        self::validateValue(-32768, 32767, $value, "short");
-
-        $this->assertOffsetAndLength($offset, 2);
-        $this->writeLittleEndian($offset, 2, $value);
-    }
-
-    /**
-     * @param $offset
-     * @param $value
-     */
-    public function putUshort($offset, $value)
-    {
-        self::validateValue(0, 65535, $value, "short");
-
-        $this->assertOffsetAndLength($offset, 2);
-        $this->writeLittleEndian($offset, 2, $value);
-    }
-
-    /**
-     * @param $offset
-     * @param $value
-     */
-    public function putInt($offset, $value)
-    {
-        // 2147483647 = (1 << 31) -1 = Maximum signed 32-bit int
-        // -2147483648 = -1 << 31 = Minimum signed 32-bit int
-        self::validateValue(-2147483648, 2147483647, $value, "int");
-
-        $this->assertOffsetAndLength($offset, 4);
-        $this->writeLittleEndian($offset, 4, $value);
-    }
-
-    /**
-     * @param $offset
-     * @param $value
-     */
-    public function putUint($offset, $value)
-    {
-        // NOTE: We can't put big integer value. this is PHP limitation.
-        // 4294967295 = (1 << 32) -1 = Maximum unsigned 32-bin int
-        self::validateValue(0, 4294967295, $value, "uint",  " php has big numbers limitation. check your PHP_INT_MAX");
-
-        $this->assertOffsetAndLength($offset, 4);
-        $this->writeLittleEndian($offset, 4, $value);
-    }
-
-    /**
-     * @param $offset
-     * @param $value
-     */
-    public function putLong($offset, $value)
-    {
-        // NOTE: We can't put big integer value. this is PHP limitation.
-        self::validateValue(~PHP_INT_MAX, PHP_INT_MAX, $value, "long",  " php has big numbers limitation. check your PHP_INT_MAX");
-
-        $this->assertOffsetAndLength($offset, 8);
-        $this->writeLittleEndian($offset, 8, $value);
-    }
-
-    /**
-     * @param $offset
-     * @param $value
-     */
-    public function putUlong($offset, $value)
-    {
-        // NOTE: We can't put big integer value. this is PHP limitation.
-        self::validateValue(0, PHP_INT_MAX, $value, "long", " php has big numbers limitation. check your PHP_INT_MAX");
-
-        $this->assertOffsetAndLength($offset, 8);
-        $this->writeLittleEndian($offset, 8, $value);
-    }
-
-    /**
-     * @param $offset
-     * @param $value
-     */
-    public function putFloat($offset, $value)
-    {
-        $this->assertOffsetAndLength($offset, 4);
-
-        $floathelper = pack("f", $value);
-        $v = unpack("V", $floathelper);
-        $this->writeLittleEndian($offset, 4, $v[1]);
-    }
-
-    /**
-     * @param $offset
-     * @param $value
-     */
-    public function putDouble($offset, $value)
-    {
-        $this->assertOffsetAndLength($offset, 8);
-
-        $floathelper = pack("d", $value);
-        $v = unpack("V*", $floathelper);
-
-        $this->writeLittleEndian($offset, 4, $v[1]);
-        $this->writeLittleEndian($offset + 4, 4, $v[2]);
-    }
-
-    /**
-     * @param $index
-     * @return mixed
-     */
-    public function getByte($index)
-    {
-        return ord($this->_buffer[$index]);
-    }
-
-    /**
-     * @param $index
-     * @return mixed
-     */
-    public function getSbyte($index)
-    {
-        $v = unpack("c", $this->_buffer[$index]);
-        return $v[1];
-    }
-
-    /**
-     * @param $buffer
-     */
-    public function getX(&$buffer)
-    {
-        for ($i = $this->_pos, $j = 0; $j < strlen($buffer); $i++, $j++) {
-            $buffer[$j] = $this->_buffer[$i];
-        }
-    }
-
-    /**
-     * @param $index
-     * @return mixed
-     */
-    public function get($index)
-    {
-        $this->assertOffsetAndLength($index, 1);
-        return $this->_buffer[$index];
-    }
-
-
-    /**
-     * @param $index
-     * @return mixed
-     */
-    public function getBool($index)
-    {
-        return (bool)ord($this->_buffer[$index]);
-    }
-
-    /**
-     * @param $index
-     * @return int
-     */
-    public function getShort($index)
-    {
-        $result = $this->readLittleEndian($index, 2);
-
-        $sign = $index + (ByteBuffer::isLittleEndian() ? 1 : 0);
-        $issigned = isset($this->_buffer[$sign]) && ord($this->_buffer[$sign]) & 0x80;
-
-        // 65536 = 1 << 16 = Maximum unsigned 16-bit int
-        return $issigned ? $result - 65536 : $result;
-    }
-
-    /**
-     * @param $index
-     * @return int
-     */
-    public function getUShort($index)
-    {
-        return $this->readLittleEndian($index, 2);
-    }
-
-    /**
-     * @param $index
-     * @return int
-     */
-    public function getInt($index)
-    {
-        $result = $this->readLittleEndian($index, 4);
-
-        $sign = $index + (ByteBuffer::isLittleEndian() ? 3 : 0);
-        $issigned = isset($this->_buffer[$sign]) && ord($this->_buffer[$sign]) & 0x80;
-
-        if (PHP_INT_SIZE > 4) {
-            // 4294967296 = 1 << 32 = Maximum unsigned 32-bit int
-            return $issigned ? $result - 4294967296 : $result;
-        } else {
-            // 32bit / Windows treated number as signed integer.
-            return $result;
-        }
-    }
-
-    /**
-     * @param $index
-     * @return int
-     */
-    public function getUint($index)
-    {
-        return $this->readLittleEndian($index, 4);
-    }
-
-    /**
-     * @param $index
-     * @return int
-     */
-    public function getLong($index)
-    {
-        return $this->readLittleEndian($index, 8);
-    }
-
-    /**
-     * @param $index
-     * @return int
-     */
-    public function getUlong($index)
-    {
-        return $this->readLittleEndian($index, 8);
-    }
-
-    /**
-     * @param $index
-     * @return mixed
-     */
-    public function getFloat($index)
-    {
-        $i = $this->readLittleEndian($index, 4);
-
-        return self::convertHelper(self::__FLOAT, $i);
-    }
-
-    /**
-     * @param $index
-     * @return float
-     */
-    public function getDouble($index)
-    {
-        $i = $this->readLittleEndian($index, 4);
-        $i2 = $this->readLittleEndian($index + 4, 4);
-
-        return self::convertHelper(self::__DOUBLE, $i, $i2);
-    }
-
-    const __SHORT = 1;
-    const __INT = 2;
-    const __LONG = 3;
-    const __FLOAT = 4;
-    const __DOUBLE = 5;
-    private static function convertHelper($type, $value, $value2 = null) {
-        // readLittleEndian construct unsigned integer value from bytes. we have to encode this value to
-        // correct bytes, and decode as expected types with `unpack` function.
-        // then it returns correct type value.
-        // see also: http://php.net/manual/en/function.pack.php
-
-        switch ($type) {
-            case self::__FLOAT:
-                $inthelper = pack("V", $value);
-                $v = unpack("f", $inthelper);
-                return $v[1];
-                break;
-            case self::__DOUBLE:
-                $inthelper = pack("VV", $value, $value2);
-                $v = unpack("d", $inthelper);
-                return $v[1];
-                break;
-            default:
-                throw new \Exception(sprintf("unexpected type %d specified", $type));
-        }
-    }
-
-    private static function validateValue($min, $max, $value, $type, $additional_notes = "") {
-        if(!($min <= $value && $value <= $max)) {
-            throw new \InvalidArgumentException(sprintf("bad number %s for type %s.%s", $value, $type, $additional_notes));
-        }
-    }
-}
diff --git a/third_party/flatbuffers/php/Constants.php b/third_party/flatbuffers/php/Constants.php
deleted file mode 100644
index ef3730d..0000000
--- a/third_party/flatbuffers/php/Constants.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-/*
- * Copyright 2015 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Google\FlatBuffers;
-
-class Constants
-{
-    const SIZEOF_SHORT = 2;
-    const SIZEOF_INT = 4;
-    const FILE_IDENTIFIER_LENGTH = 4;
-}
diff --git a/third_party/flatbuffers/php/FlatbufferBuilder.php b/third_party/flatbuffers/php/FlatbufferBuilder.php
deleted file mode 100644
index 5c18bf4..0000000
--- a/third_party/flatbuffers/php/FlatbufferBuilder.php
+++ /dev/null
@@ -1,966 +0,0 @@
-<?php
-/*
- * Copyright 2015 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/// @file
-/// @addtogroup flatbuffers_php_api
-/// @{
-
-namespace Google\FlatBuffers;
-
-class FlatbufferBuilder
-{
-    /**
-     * Internal ByteBuffer for the FlatBuffer data.
-     * @var ByteBuffer $bb
-     */
-    public $bb;
-
-    /// @cond FLATBUFFERS_INTERNAL
-    /**
-     * @var int $space
-     */
-    protected $space;
-
-    /**
-     * @var int $minalign
-     */
-    protected $minalign = 1;
-
-    /**
-     * @var array $vtable
-     */
-    protected $vtable;
-
-    /**
-     * @var int $vtable_in_use
-     */
-    protected $vtable_in_use = 0;
-
-    /**
-     * @var bool $nested
-     */
-    protected $nested = false;
-
-    /**
-     * @var int $object_start
-     */
-    protected $object_start;
-
-    /**
-     * @var array $vtables
-     */
-    protected $vtables = array();
-
-    /**
-     * @var int $num_vtables
-     */
-    protected $num_vtables = 0;
-
-    /**
-     * @var int $vector_num_elems
-     */
-    protected $vector_num_elems = 0;
-
-    /**
-     * @var bool $force_defaults
-     */
-    protected $force_defaults = false;
-    /// @endcond
-
-    /**
-     * Create a FlatBufferBuilder with a given initial size.
-     *
-     * @param $initial_size initial byte buffer size.
-     */
-    public function __construct($initial_size)
-    {
-        if ($initial_size <= 0) {
-            $initial_size = 1;
-        }
-        $this->space = $initial_size;
-        $this->bb = $this->newByteBuffer($initial_size);
-    }
-
-    /// @cond FLATBUFFERS_INTERNAL
-    /**
-     * create new bytebuffer
-     *
-     * @param $size
-     * @return ByteBuffer
-     */
-    private function newByteBuffer($size)
-    {
-        return new ByteBuffer($size);
-    }
-
-    /**
-     * Returns the current ByteBuffer offset.
-     *
-     * @return int
-     */
-    public function offset()
-    {
-        return $this->bb->capacity() - $this->space;
-    }
-
-    /**
-     * padding buffer
-     *
-     * @param $byte_size
-     */
-    public function pad($byte_size)
-    {
-        for ($i = 0; $i < $byte_size; $i++) {
-            $this->bb->putByte(--$this->space, "\0");
-        }
-    }
-
-    /**
-     * prepare bytebuffer
-     *
-     * @param $size
-     * @param $additional_bytes
-     * @throws \Exception
-     */
-    public function prep($size, $additional_bytes)
-    {
-        if ($size > $this->minalign) {
-            $this->minalign = $size;
-        }
-
-        $align_size = ((~($this->bb->capacity() - $this->space + $additional_bytes)) + 1) & ($size - 1);
-        while ($this->space < $align_size + $size  + $additional_bytes) {
-            $old_buf_size = $this->bb->capacity();
-            $this->bb = $this->growByteBuffer($this->bb);
-            $this->space += $this->bb->capacity() - $old_buf_size;
-        }
-
-        $this->pad($align_size);
-    }
-
-    /**
-     * @param ByteBuffer $bb
-     * @return ByteBuffer
-     * @throws \Exception
-     */
-    private static function growByteBuffer(ByteBuffer $bb)
-    {
-        $old_buf_size = $bb->capacity();
-        if (($old_buf_size & 0xC0000000) != 0) {
-            throw new \Exception("FlatBuffers: cannot grow buffer beyond 2 gigabytes");
-        }
-        $new_buf_size = $old_buf_size << 1;
-
-        $bb->setPosition(0);
-        $nbb = new ByteBuffer($new_buf_size);
-
-        $nbb->setPosition($new_buf_size - $old_buf_size);
-
-        // TODO(chobie): is this little bit faster?
-        //$nbb->_buffer = substr_replace($nbb->_buffer, $bb->_buffer, $new_buf_size - $old_buf_size, strlen($bb->_buffer));
-        for ($i = $new_buf_size - $old_buf_size, $j = 0; $j < strlen($bb->_buffer); $i++, $j++) {
-            $nbb->_buffer[$i] = $bb->_buffer[$j];
-        }
-
-        return $nbb;
-    }
-
-    /**
-     * @param $x
-     */
-    public function putBool($x)
-    {
-        $this->bb->put($this->space -= 1, chr((int)(bool)($x)));
-    }
-
-    /**
-     * @param $x
-     */
-    public function putByte($x)
-    {
-        $this->bb->put($this->space -= 1, chr($x));
-    }
-
-    /**
-     * @param $x
-     */
-    public function putSbyte($x)
-    {
-        $this->bb->put($this->space -= 1, chr($x));
-    }
-
-    /**
-     * @param $x
-     */
-    public function putShort($x)
-    {
-        $this->bb->putShort($this->space -= 2, $x);
-    }
-
-    /**
-     * @param $x
-     */
-    public function putUshort($x)
-    {
-        $this->bb->putUshort($this->space -= 2, $x);
-    }
-
-    /**
-     * @param $x
-     */
-    public function putInt($x)
-    {
-        $this->bb->putInt($this->space -= 4, $x);
-    }
-
-    /**
-     * @param $x
-     */
-    public function putUint($x)
-    {
-        if ($x > PHP_INT_MAX) {
-            throw new \InvalidArgumentException("your platform can't handle uint correctly. use 64bit machine.");
-        }
-
-        $this->bb->putUint($this->space -= 4, $x);
-    }
-
-    /**
-     * @param $x
-     */
-    public function putLong($x)
-    {
-        if ($x > PHP_INT_MAX) {
-            throw new \InvalidArgumentException("Your platform can't handle long correctly. Use a 64bit machine.");
-        }
-
-        $this->bb->putLong($this->space -= 8, $x);
-    }
-
-    /**
-     * @param $x
-     */
-    public function putUlong($x)
-    {
-        if ($x > PHP_INT_MAX) {
-            throw new \InvalidArgumentException("Your platform can't handle ulong correctly. This is a php limitation. Please wait for the extension release.");
-        }
-
-        $this->bb->putUlong($this->space -= 8, $x);
-    }
-
-    /**
-     * @param $x
-     */
-    public function putFloat($x)
-    {
-        $this->bb->putFloat($this->space -= 4, $x);
-    }
-
-    /**
-     * @param $x
-     */
-    public function putDouble($x)
-    {
-        $this->bb->putDouble($this->space -= 8, $x);
-    }
-    /// @endcond
-
-    /**
-     * Add a `bool` to the buffer, properly aligned, and grows the buffer (if necessary).
-     * @param $x The `bool` to add to the buffer.
-     */
-    public function addBool($x)
-    {
-        $this->prep(1, 0);
-        $this->putBool($x);
-    }
-
-    /**
-     * Add a `byte` to the buffer, properly aligned, and grows the buffer (if necessary).
-     * @param $x The `byte` to add to the buffer.
-     */
-    public function addByte($x)
-    {
-        $this->prep(1, 0);
-        $this->putByte($x);
-    }
-
-    /**
-     * Add a `signed byte` to the buffer, properly aligned, and grows the buffer (if necessary).
-     * @param $x The `signed byte` to add to the buffer.
-     */
-    public function addSbyte($x)
-    {
-        $this->prep(1, 0);
-        $this->putSbyte($x);
-    }
-
-    /**
-     * Add a `short` to the buffer, properly aligned, and grows the buffer (if necessary).
-     * @param $x The `short` to add to the buffer.
-     */
-    public function addShort($x)
-    {
-        $this->prep(2, 0);
-        $this->putShort($x);
-    }
-
-    /**
-     * Add an `unsigned short` to the buffer, properly aligned, and grows the buffer (if necessary).
-     * @param $x The `unsigned short` to add to the buffer.
-     */
-    public function addUshort($x)
-    {
-        $this->prep(2, 0);
-        $this->putUshort($x);
-    }
-
-    /**
-     * Add an `int` to the buffer, properly aligned, and grows the buffer (if necessary).
-     * @param $x The `int` to add to the buffer.
-     */
-    public function addInt($x)
-    {
-        $this->prep(4, 0);
-        $this->putInt($x);
-    }
-
-    /**
-     * Add an `unsigned int` to the buffer, properly aligned, and grows the buffer (if necessary).
-     * @param $x The `unsigned int` to add to the buffer.
-     */
-    public function addUint($x)
-    {
-        $this->prep(4, 0);
-        $this->putUint($x);
-    }
-
-    /**
-     * Add a `long` to the buffer, properly aligned, and grows the buffer (if necessary).
-     * @param $x The `long` to add to the buffer.
-     */
-    public function addLong($x)
-    {
-        $this->prep(8, 0);
-        $this->putLong($x);
-    }
-
-    /**
-     * Add an `unsigned long` to the buffer, properly aligned, and grows the buffer (if necessary).
-     * @param $x The `unsigned long` to add to the buffer.
-     */
-    public function addUlong($x)
-    {
-        $this->prep(8, 0);
-        $this->putUlong($x);
-    }
-
-    /**
-     * Add a `float` to the buffer, properly aligned, and grows the buffer (if necessary).
-     * @param $x The `float` to add to the buffer.
-     */
-    public function addFloat($x)
-    {
-        $this->prep(4, 0);
-        $this->putFloat($x);
-    }
-
-    /**
-     * Add a `double` to the buffer, properly aligned, and grows the buffer (if necessary).
-     * @param $x The `double` to add to the buffer.
-     */
-    public function addDouble($x)
-    {
-        $this->prep(8, 0);
-        $this->putDouble($x);
-    }
-
-    /// @cond FLATBUFFERS_INTERNAL
-    /**
-     * @param $o
-     * @param $x
-     * @param $d
-     */
-    public function addBoolX($o, $x, $d)
-    {
-        if ($this->force_defaults || $x != $d) {
-            $this->addBool($x);
-            $this->slot($o);
-        }
-    }
-
-    /**
-     * @param $o
-     * @param $x
-     * @param $d
-     */
-    public function addByteX($o, $x, $d)
-    {
-        if ($this->force_defaults || $x != $d) {
-            $this->addByte($x);
-            $this->slot($o);
-        }
-    }
-
-    /**
-     * @param $o
-     * @param $x
-     * @param $d
-     */
-    public function addSbyteX($o, $x, $d)
-    {
-        if ($this->force_defaults || $x != $d) {
-            $this->addSbyte($x);
-            $this->slot($o);
-        }
-    }
-
-    /**
-     * @param $o
-     * @param $x
-     * @param $d
-     */
-    public function addShortX($o, $x, $d)
-    {
-        if ($this->force_defaults || $x != $d) {
-            $this->addShort($x);
-            $this->slot($o);
-        }
-    }
-
-    /**
-     * @param $o
-     * @param $x
-     * @param $d
-     */
-    public function addUshortX($o, $x, $d)
-    {
-        if ($this->force_defaults || $x != $d) {
-            $this->addUshort($x);
-            $this->slot($o);
-        }
-    }
-
-    /**
-     * @param $o
-     * @param $x
-     * @param $d
-     */
-    public function addIntX($o, $x, $d)
-    {
-        if ($this->force_defaults || $x != $d) {
-            $this->addInt($x);
-            $this->slot($o);
-        }
-    }
-
-    /**
-     * @param $o
-     * @param $x
-     * @param $d
-     */
-    public function addUintX($o, $x, $d)
-    {
-        if ($this->force_defaults || $x != $d) {
-            $this->addUint($x);
-            $this->slot($o);
-        }
-    }
-
-    /**
-     * @param $o
-     * @param $x
-     * @param $d
-     */
-    public function addLongX($o, $x, $d)
-    {
-        if ($this->force_defaults || $x != $d) {
-            $this->addLong($x);
-            $this->slot($o);
-        }
-    }
-
-    /**
-     * @param $o
-     * @param $x
-     * @param $d
-     */
-    public function addUlongX($o, $x, $d)
-    {
-        if ($this->force_defaults || $x != $d) {
-            $this->addUlong($x);
-            $this->slot($o);
-        }
-    }
-
-
-    /**
-     * @param $o
-     * @param $x
-     * @param $d
-     */
-    public function addFloatX($o, $x, $d)
-    {
-        if ($this->force_defaults || $x != $d) {
-            $this->addFloat($x);
-            $this->slot($o);
-        }
-    }
-
-    /**
-     * @param $o
-     * @param $x
-     * @param $d
-     */
-    public function addDoubleX($o, $x, $d)
-    {
-        if ($this->force_defaults || $x != $d) {
-            $this->addDouble($x);
-            $this->slot($o);
-        }
-    }
-
-    /**
-     * @param $o
-     * @param $x
-     * @param $d
-     * @throws \Exception
-     */
-    public function addOffsetX($o, $x, $d)
-    {
-        if ($this->force_defaults || $x != $d) {
-            $this->addOffset($x);
-            $this->slot($o);
-        }
-    }
-    /// @endcond
-
-    /**
-     * Adds on offset, relative to where it will be written.
-     * @param $off The offset to add to the buffer.
-     * @throws \Exception Throws an exception if `$off` is greater than the underlying ByteBuffer's
-     * offest.
-     */
-    public function addOffset($off)
-    {
-        $this->prep(Constants::SIZEOF_INT, 0); // Ensure alignment is already done
-        if ($off > $this->offset()) {
-            throw new \Exception("");
-        }
-
-        $off = $this->offset() - $off + Constants::SIZEOF_INT;
-        $this->putInt($off);
-    }
-
-    /// @cond FLATBUFFERS_INTERNAL
-    /**
-     * @param $elem_size
-     * @param $num_elems
-     * @param $alignment
-     * @throws \Exception
-     */
-    public function startVector($elem_size, $num_elems, $alignment)
-    {
-        $this->notNested();
-        $this->vector_num_elems = $num_elems;
-        $this->prep(Constants::SIZEOF_INT, $elem_size * $num_elems);
-        $this->prep($alignment, $elem_size * $num_elems); // Just in case alignemnt > int;
-    }
-
-    /**
-     * @return int
-     */
-    public function endVector()
-    {
-        $this->putUint($this->vector_num_elems);
-        return $this->offset();
-    }
-
-    protected function is_utf8($bytes)
-    {
-        if (function_exists('mb_detect_encoding')) {
-            return (bool) mb_detect_encoding($bytes, 'UTF-8', true);
-        }
-    
-        $len = strlen($bytes);
-        if ($len < 1) {
-            /* NOTE: always return 1 when passed string is null */
-            return true;
-        }
-
-        for ($j = 0, $i = 0; $i < $len; $i++) {
-            // check ACII
-            if ($bytes[$j] == "\x09" ||
-                $bytes[$j] == "\x0A" ||
-                $bytes[$j] == "\x0D" ||
-                ($bytes[$j] >= "\x20" && $bytes[$j] <= "\x7E")) {
-                $j++;
-                continue;
-            }
-
-            /* non-overlong 2-byte */
-            if ((($i+1) <= $len) &&
-                ($bytes[$j] >= "\xC2" && $bytes[$j] <= "\xDF" &&
-                    ($bytes[$j+1] >= "\x80" && $bytes[$j+1] <= "\xBF"))) {
-                $j += 2;
-                $i++;
-                continue;
-            }
-
-            /* excluding overlongs */
-            if ((($i + 2) <= $len) &&
-                $bytes[$j] == "\xE0" &&
-                ($bytes[$j+1] >= "\xA0" && $bytes[$j+1] <= "\xBF" &&
-                    ($bytes[$j+2] >= "\x80" && $bytes[$j+2] <= "\xBF"))) {
-                $bytes += 3;
-                $i +=2;
-                continue;
-            }
-
-            /* straight 3-byte */
-            if ((($i+2) <= $len) &&
-                (($bytes[$j] >= "\xE1" && $bytes[$j] <= "\xEC") ||
-                    $bytes[$j] == "\xEE" ||
-                    $bytes[$j] = "\xEF") &&
-                ($bytes[$j+1] >= "\x80" && $bytes[$j+1] <= "\xBF") &&
-                ($bytes[$j+2] >= "\x80" && $bytes[$j+2] <= "\xBF")) {
-                $j += 3;
-                $i += 2;
-                continue;
-            }
-
-            /* excluding surrogates */
-            if ((($i+2) <= $len) &&
-                $bytes[$j] == "\xED" &&
-                ($bytes[$j+1] >= "\x80" && $bytes[$j+1] <= "\x9f" &&
-                    ($bytes[$j+2] >= "\x80" && $bytes[$j+2] <= "\xBF"))) {
-                $j += 3;
-                $i += 2;
-                continue;
-            }
-
-            /* planes 1-3 */
-            if ((($i + 3) <= $len) &&
-                $bytes[$j] == "\xF0" &&
-                ($bytes[$j+1] >= "\x90" && $bytes[$j+1] <= "\xBF") &&
-                ($bytes[$j+2] >= "\x80" && $bytes[$j+2] <= "\xBF") &&
-                ($bytes[$j+3] >= "\x80" && $bytes[$j+3] <= "\xBF")) {
-                $j += 4;
-                $i += 3;
-                continue;
-            }
-
-
-            /* planes 4-15 */
-            if ((($i+3) <= $len) &&
-                $bytes[$j] >= "\xF1" && $bytes[$j] <= "\xF3" &&
-                $bytes[$j+1] >= "\x80" && $bytes[$j+1] <= "\xBF" &&
-                $bytes[$j+2] >= "\x80" && $bytes[$j+2] <= "\xBF" &&
-                $bytes[$j+3] >= "\x80" && $bytes[$j+3] <= "\xBF"
-            ) {
-                $j += 4;
-                $i += 3;
-                continue;
-            }
-
-            /* plane 16 */
-            if ((($i+3) <= $len) &&
-                $bytes[$j] == "\xF4" &&
-                ($bytes[$j+1] >= "\x80" && $bytes[$j+1] <= "\x8F") &&
-                ($bytes[$j+2] >= "\x80" && $bytes[$j+2] <= "\xBF") &&
-                ($bytes[$j+3] >= "\x80" && $bytes[$j+3] <= "\xBF")
-            ) {
-                $bytes += 4;
-                $i += 3;
-                continue;
-            }
-
-
-            return false;
-        }
-
-        return true;
-    }
-    /// @endcond
-
-    /**
-     * Encode the string `$s` in the buffer using UTF-8.
-     * @param string $s The string to encode.
-     * @return int The offset in the buffer where the encoded string starts.
-     * @throws InvalidArgumentException Thrown if the input string `$s` is not
-     *     UTF-8.
-     */
-    public function createString($s)
-    {
-        if (!$this->is_utf8($s)) {
-            throw new \InvalidArgumentException("string must be utf-8 encoded value.");
-        }
-
-        $this->notNested();
-        $this->addByte(0); // null terminated
-        $this->startVector(1, strlen($s), 1);
-        $this->space -= strlen($s);
-        for ($i =  $this->space, $j = 0 ; $j < strlen($s) ; $i++, $j++) {
-            $this->bb->_buffer[$i] = $s[$j];
-        }
-        return $this->endVector();
-    }
-
-    /// @cond FLATBUFFERS_INTERNAL
-    /**
-     * @throws \Exception
-     */
-    public function notNested()
-    {
-        if ($this->nested) {
-            throw new \Exception("FlatBuffers; object serialization must not be nested");
-        }
-    }
-
-    /**
-     * @param $obj
-     * @throws \Exception
-     */
-    public function nested($obj)
-    {
-        if ($obj != $this->offset()) {
-            throw new \Exception("FlatBuffers: struct must be serialized inline");
-        }
-    }
-
-    /**
-     * @param $numfields
-     * @throws \Exception
-     */
-    public function startObject($numfields)
-    {
-        $this->notNested();
-        if ($this->vtable == null || count($this->vtable) < $numfields) {
-            $this->vtable = array();
-        }
-
-        $this->vtable_in_use = $numfields;
-        for ($i = 0; $i < $numfields; $i++) {
-            $this->vtable[$i] = 0;
-        }
-
-        $this->nested = true;
-        $this->object_start = $this->offset();
-    }
-
-    /**
-     * @param $voffset
-     * @param $x
-     * @param $d
-     * @throws \Exception
-     */
-    public function addStructX($voffset, $x, $d)
-    {
-        if ($x != $d) {
-            $this->nested($x);
-            $this->slot($voffset);
-        }
-    }
-
-    /**
-     * @param $voffset
-     * @param $x
-     * @param $d
-     * @throws \Exception
-     */
-    public function addStruct($voffset, $x, $d)
-    {
-        if ($x != $d) {
-            $this->nested($x);
-            $this->slot($voffset);
-        }
-    }
-
-    /**
-     * @param $voffset
-     */
-    public function slot($voffset)
-    {
-        $this->vtable[$voffset] = $this->offset();
-    }
-
-    /**
-     * @return int
-     * @throws \Exception
-     */
-    public function endObject()
-    {
-        if ($this->vtable == null || !$this->nested) {
-            throw new \Exception("FlatBuffers: endObject called without startObject");
-        }
-
-        $this->addInt(0);
-        $vtableloc = $this->offset();
-
-        for ($i = $this->vtable_in_use -1; $i >= 0; $i--) {
-            $off = ($this->vtable[$i] != 0) ? $vtableloc - $this->vtable[$i] : 0;
-            $this->addShort($off);
-        }
-
-        $standard_fields = 2; // the fields below
-        $this->addShort($vtableloc - $this->object_start);
-        $this->addShort(($this->vtable_in_use + $standard_fields) * Constants::SIZEOF_SHORT);
-
-        // search for an existing vtable that matches the current one.
-        $existing_vtable = 0;
-
-        for ($i = 0; $i < $this->num_vtables; $i++) {
-            $vt1 = $this->bb->capacity() - $this->vtables[$i];
-            $vt2 = $this->space;
-
-            $len = $this->bb->getShort($vt1);
-
-            if ($len == $this->bb->getShort($vt2)) {
-                for ($j = Constants::SIZEOF_SHORT; $j < $len; $j += Constants::SIZEOF_SHORT) {
-                    if ($this->bb->getShort($vt1 + $j) != $this->bb->getShort($vt2 + $j)) {
-                        continue 2;
-                    }
-                }
-                $existing_vtable = $this->vtables[$i];
-                break;
-            }
-        }
-
-        if ($existing_vtable != 0) {
-            // Found a match:
-            // Remove the current vtable
-            $this->space = $this->bb->capacity() - $vtableloc;
-            $this->bb->putInt($this->space, $existing_vtable - $vtableloc);
-        } else {
-            // No Match:
-            // Add the location of the current vtable to the list of vtables
-            if ($this->num_vtables == count($this->vtables)) {
-                $vtables = $this->vtables;
-                $this->vtables = array();
-                // copy of
-                for ($i = 0; $i < count($vtables) * 2; $i++) {
-                    $this->vtables[$i] = ($i < count($vtables)) ? $vtables[$i] : 0;
-                }
-            }
-            $this->vtables[$this->num_vtables++] = $this->offset();
-            $this->bb->putInt($this->bb->capacity() - $vtableloc, $this->offset() - $vtableloc);
-        }
-
-        $this->nested = false;
-        $this->vtable = null;
-        return $vtableloc;
-    }
-
-    /**
-     * @param $table
-     * @param $field
-     * @throws \Exception
-     */
-    public function required($table, $field)
-    {
-        $table_start = $this->bb->capacity() - $table;
-        $vtable_start = $table_start - $this->bb->getInt($table_start);
-        $ok = $this->bb->getShort($vtable_start + $field) != 0;
-
-        if (!$ok) {
-            throw new \Exception("FlatBuffers: field "  . $field  .  " must be set");
-        }
-    }
-    /// @endcond
-
-    /**
-     * Finalize a buffer, pointing to the given `$root_table`.
-     * @param $root_table An offest to be added to the buffer.
-     * @param $file_identifier A FlatBuffer file identifier to be added to the
-     *     buffer before `$root_table`. This defaults to `null`.
-     * @throws InvalidArgumentException Thrown if an invalid `$identifier` is
-     *     given, where its length is not equal to
-     *    `Constants::FILE_IDENTIFIER_LENGTH`.
-     */
-    public function finish($root_table, $identifier = null)
-    {
-        if ($identifier == null) {
-            $this->prep($this->minalign, Constants::SIZEOF_INT);
-            $this->addOffset($root_table);
-            $this->bb->setPosition($this->space);
-        } else {
-            $this->prep($this->minalign, Constants::SIZEOF_INT + Constants::FILE_IDENTIFIER_LENGTH);
-            if (strlen($identifier) != Constants::FILE_IDENTIFIER_LENGTH) {
-                throw new \InvalidArgumentException(
-                    sprintf("FlatBuffers: file identifier must be length %d",
-                        Constants::FILE_IDENTIFIER_LENGTH));
-            }
-
-            for ($i = Constants::FILE_IDENTIFIER_LENGTH - 1; $i >= 0;
-                  $i--) {
-                $this->addByte(ord($identifier[$i]));
-            }
-            $this->finish($root_table);
-        }
-    }
-
-    /**
-     * In order to save space, fields that are set to their default value don't
-     * get serialized into the buffer.
-     * @param bool $forceDefaults When set to `true`, always serializes default
-     *     values.
-     */
-    public function forceDefaults($forceDefaults)
-    {
-        $this->force_defaults = $forceDefaults;
-    }
-
-    /**
-     * Get the ByteBuffer representing the FlatBuffer.
-     * @return ByteBuffer The ByteBuffer containing the FlatBuffer data.
-     */
-    public function dataBuffer()
-    {
-        return $this->bb;
-    }
-
-    /// @cond FLATBUFFERS_INTERNAL
-    /**
-     * @return int
-     */
-    public function dataStart()
-    {
-        return $this->space;
-    }
-    /// @endcond
-
-    /**
-     * Utility function to copy and return the FlatBuffer data from the
-     * underlying ByteBuffer.
-     * @return string A string (representing a byte[]) that contains a copy
-     * of the FlatBuffer data.
-     */
-    public function sizedByteArray()
-    {
-        $start = $this->space;
-        $length = $this->bb->capacity() - $this->space;
-
-        $result = str_repeat("\0", $length);
-        $this->bb->setPosition($start);
-        $this->bb->getX($result);
-
-        return $result;
-    }
-}
-
-/// @}
diff --git a/third_party/flatbuffers/php/Struct.php b/third_party/flatbuffers/php/Struct.php
deleted file mode 100644
index 94e712b..0000000
--- a/third_party/flatbuffers/php/Struct.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-/*
- * Copyright 2015 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Google\FlatBuffers;
-
-abstract class Struct
-{
-    /**
-     * @var int $bb_pos
-     */
-    protected $bb_pos;
-
-    /**
-     * @var ByteBuffer $bb
-     */
-    protected $bb;
-}
diff --git a/third_party/flatbuffers/php/Table.php b/third_party/flatbuffers/php/Table.php
deleted file mode 100644
index 6f917c1..0000000
--- a/third_party/flatbuffers/php/Table.php
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-/*
- * Copyright 2015 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Google\FlatBuffers;
-
-abstract class Table
-{
-    /**
-     * @var int $bb_pos
-     */
-    protected $bb_pos;
-    /**
-     * @var ByteBuffer $bb
-     */
-    protected $bb;
-
-    public function __construct()
-    {
-    }
-
-    /**
-     * returns actual vtable offset
-     *
-     * @param $vtable_offset
-     * @return int offset > 0 means exist value. 0 means not exist
-     */
-    protected function __offset($vtable_offset)
-    {
-        $vtable = $this->bb_pos - $this->bb->getInt($this->bb_pos);
-        return $vtable_offset < $this->bb->getShort($vtable) ? $this->bb->getShort($vtable + $vtable_offset) : 0;
-    }
-
-    /**
-     * @param $offset
-     * @return mixed
-     */
-    protected function __indirect($offset)
-    {
-        return $offset + $this->bb->getInt($offset);
-    }
-
-    /**
-     * fetch utf8 encoded string.
-     *
-     * @param $offset
-     * @return string
-     */
-    protected function __string($offset)
-    {
-        $offset += $this->bb->getInt($offset);
-        $len = $this->bb->getInt($offset);
-        $startPos = $offset + Constants::SIZEOF_INT;
-        return substr($this->bb->_buffer, $startPos, $len);
-    }
-
-    /**
-     * @param $offset
-     * @return int
-     */
-    protected function __vector_len($offset)
-    {
-        $offset += $this->bb_pos;
-        $offset += $this->bb->getInt($offset);
-        return $this->bb->getInt($offset);
-    }
-
-    /**
-     * @param $offset
-     * @return int
-     */
-    protected function __vector($offset)
-    {
-        $offset += $this->bb_pos;
-        // data starts after the length
-        return $offset + $this->bb->getInt($offset) + Constants::SIZEOF_INT;
-    }
-
-    protected function __vector_as_bytes($vector_offset, $elem_size=1)
-    {
-        $o = $this->__offset($vector_offset);
-        if ($o == 0) {
-            return null;
-        }
-
-        return substr($this->bb->_buffer, $this->__vector($o), $this->__vector_len($o) * $elem_size);
-    }
-
-    /**
-     * @param Table $table
-     * @param int $offset
-     * @return Table
-     */
-    protected function __union($table, $offset)
-    {
-        $offset += $this->bb_pos;
-        $table->bb_pos = $offset + $this->bb->getInt($offset);
-        $table->bb = $this->bb;
-        return $table;
-    }
-
-    /**
-     * @param ByteBuffer $bb
-     * @param string $ident
-     * @return bool
-     * @throws \ArgumentException
-     */
-    protected static function __has_identifier($bb, $ident)
-    {
-        if (strlen($ident) != Constants::FILE_IDENTIFIER_LENGTH) {
-            throw new \ArgumentException("FlatBuffers: file identifier must be length "  . Constants::FILE_IDENTIFIER_LENGTH);
-        }
-
-        for ($i = 0; $i < 4; $i++) {
-            if ($ident[$i] != $bb->get($bb->getPosition() + Constants::SIZEOF_INT + $i)) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
diff --git a/third_party/flatbuffers/pom.xml b/third_party/flatbuffers/pom.xml
deleted file mode 100644
index a4f74bf..0000000
--- a/third_party/flatbuffers/pom.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>com.google.flatbuffers</groupId>
-  <artifactId>flatbuffers-java</artifactId>
-  <version>1.6.0-SNAPSHOT</version>
-  <packaging>bundle</packaging>
-  <name>FlatBuffers Java API</name>
-  <description>
-    Memory Efficient Serialization Library
-  </description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <url>https://github.com/google/flatbuffers</url>
-  <licenses>
-    <license>
-      <name>Apache License V2.0</name>
-      <url>https://raw.githubusercontent.com/google/flatbuffers/master/LICENSE.txt</url>
-      <distribution>repo</distribution>
-    </license>
-  </licenses>
-  <scm>
-    <url>https://github.com/google/flatbuffers</url>
-    <connection>
-      scm:git:https://github.com/google/flatbuffers.git
-    </connection>
-  </scm>
-  <dependencies>
-  </dependencies>
-  <build>
-    <sourceDirectory>java</sourceDirectory>
-    <plugins>
-      <plugin>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <configuration>
-          <source>1.6</source>
-          <target>1.6</target>
-        </configuration>
-        <version>3.2</version>
-      </plugin>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <includes>
-            <include>**/*Test.java</include>
-          </includes>
-        </configuration>
-        <version>2.18.1</version>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-source-plugin</artifactId>
-        <version>2.3</version>
-        <executions>
-          <execution>
-            <id>attach-sources</id>
-            <goals>
-              <goal>jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-javadoc-plugin</artifactId>
-        <version>2.9.1</version>
-        <executions>
-          <execution>
-            <id>attach-javadocs</id>
-            <goals>
-              <goal>jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-bundle-plugin</artifactId>
-        <version>3.0.1</version>
-        <extensions>true</extensions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
-
diff --git a/third_party/flatbuffers/python/__init__.py b/third_party/flatbuffers/python/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/third_party/flatbuffers/python/__init__.py
+++ /dev/null
diff --git a/third_party/flatbuffers/python/flatbuffers/__init__.py b/third_party/flatbuffers/python/flatbuffers/__init__.py
deleted file mode 100644
index d14872a..0000000
--- a/third_party/flatbuffers/python/flatbuffers/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2014 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from .builder import Builder
-from .table import Table
-from .compat import range_func as compat_range
diff --git a/third_party/flatbuffers/python/flatbuffers/builder.py b/third_party/flatbuffers/python/flatbuffers/builder.py
deleted file mode 100644
index 552d0e2..0000000
--- a/third_party/flatbuffers/python/flatbuffers/builder.py
+++ /dev/null
@@ -1,677 +0,0 @@
-# Copyright 2014 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from . import number_types as N
-from .number_types import (UOffsetTFlags, SOffsetTFlags, VOffsetTFlags)
-
-from . import encode
-from . import packer
-
-from . import compat
-from .compat import range_func
-from .compat import memoryview_type
-
-
-## @file
-## @addtogroup flatbuffers_python_api
-## @{
-
-## @cond FLATBUFFERS_INTERNAL
-class OffsetArithmeticError(RuntimeError):
-    """
-    Error caused by an Offset arithmetic error. Probably caused by bad
-    writing of fields. This is considered an unreachable situation in
-    normal circumstances.
-    """
-    pass
-
-
-class IsNotNestedError(RuntimeError):
-    """
-    Error caused by using a Builder to write Object data when not inside
-    an Object.
-    """
-    pass
-
-
-class IsNestedError(RuntimeError):
-    """
-    Error caused by using a Builder to begin an Object when an Object is
-    already being built.
-    """
-    pass
-
-
-class StructIsNotInlineError(RuntimeError):
-    """
-    Error caused by using a Builder to write a Struct at a location that
-    is not the current Offset.
-    """
-    pass
-
-
-class BuilderSizeError(RuntimeError):
-    """
-    Error caused by causing a Builder to exceed the hardcoded limit of 2
-    gigabytes.
-    """
-    pass
-
-class BuilderNotFinishedError(RuntimeError):
-    """
-    Error caused by not calling `Finish` before calling `Output`.
-    """
-    pass
-
-
-# VtableMetadataFields is the count of metadata fields in each vtable.
-VtableMetadataFields = 2
-## @endcond
-
-class Builder(object):
-    """ A Builder is used to construct one or more FlatBuffers.
-
-    Typically, Builder objects will be used from code generated by the `flatc`
-    compiler.
-
-    A Builder constructs byte buffers in a last-first manner for simplicity and
-    performance during reading.
-
-    Internally, a Builder is a state machine for creating FlatBuffer objects.
-
-    It holds the following internal state:
-        - Bytes: an array of bytes.
-        - current_vtable: a list of integers.
-        - vtables: a list of vtable entries (i.e. a list of list of integers).
-
-    Attributes:
-      Bytes: The internal `bytearray` for the Builder.
-      finished: A boolean determining if the Builder has been finalized.
-    """
-
-    ## @cond FLATBUFFERS_INTENRAL
-    __slots__ = ("Bytes", "current_vtable", "head", "minalign", "objectEnd",
-                 "vtables", "nested", "finished")
-
-    """Maximum buffer size constant, in bytes.
-
-    Builder will never allow it's buffer grow over this size.
-    Currently equals 2Gb.
-    """
-    MAX_BUFFER_SIZE = 2**31
-    ## @endcond
-
-    def __init__(self, initialSize):
-        """Initializes a Builder of size `initial_size`.
-
-        The internal buffer is grown as needed.
-        """
-
-        if not (0 <= initialSize <= Builder.MAX_BUFFER_SIZE):
-            msg = "flatbuffers: Cannot create Builder larger than 2 gigabytes."
-            raise BuilderSizeError(msg)
-
-        self.Bytes = bytearray(initialSize)
-        ## @cond FLATBUFFERS_INTERNAL
-        self.current_vtable = None
-        self.head = UOffsetTFlags.py_type(initialSize)
-        self.minalign = 1
-        self.objectEnd = None
-        self.vtables = []
-        self.nested = False
-        ## @endcond
-        self.finished = False
-
-
-    def Output(self):
-        """Return the portion of the buffer that has been used for writing data.
-
-        This is the typical way to access the FlatBuffer data inside the
-        builder. If you try to access `Builder.Bytes` directly, you would need
-        to manually index it with `Head()`, since the buffer is constructed
-        backwards.
-
-        It raises BuilderNotFinishedError if the buffer has not been finished
-        with `Finish`.
-        """
-
-        if not self.finished:
-            raise BuilderNotFinishedError()
-
-        return self.Bytes[self.Head():]
-
-    ## @cond FLATBUFFERS_INTERNAL
-    def StartObject(self, numfields):
-        """StartObject initializes bookkeeping for writing a new object."""
-
-        self.assertNotNested()
-
-        # use 32-bit offsets so that arithmetic doesn't overflow.
-        self.current_vtable = [0 for _ in range_func(numfields)]
-        self.objectEnd = self.Offset()
-        self.minalign = 1
-        self.nested = True
-
-    def WriteVtable(self):
-        """
-        WriteVtable serializes the vtable for the current object, if needed.
-
-        Before writing out the vtable, this checks pre-existing vtables for
-        equality to this one. If an equal vtable is found, point the object to
-        the existing vtable and return.
-
-        Because vtable values are sensitive to alignment of object data, not
-        all logically-equal vtables will be deduplicated.
-
-        A vtable has the following format:
-          <VOffsetT: size of the vtable in bytes, including this value>
-          <VOffsetT: size of the object in bytes, including the vtable offset>
-          <VOffsetT: offset for a field> * N, where N is the number of fields
-                     in the schema for this type. Includes deprecated fields.
-        Thus, a vtable is made of 2 + N elements, each VOffsetT bytes wide.
-
-        An object has the following format:
-          <SOffsetT: offset to this object's vtable (may be negative)>
-          <byte: data>+
-        """
-
-        # Prepend a zero scalar to the object. Later in this function we'll
-        # write an offset here that points to the object's vtable:
-        self.PrependSOffsetTRelative(0)
-
-        objectOffset = self.Offset()
-        existingVtable = None
-
-        # Search backwards through existing vtables, because similar vtables
-        # are likely to have been recently appended. See
-        # BenchmarkVtableDeduplication for a case in which this heuristic
-        # saves about 30% of the time used in writing objects with duplicate
-        # tables.
-
-        i = len(self.vtables) - 1
-        while i >= 0:
-            # Find the other vtable, which is associated with `i`:
-            vt2Offset = self.vtables[i]
-            vt2Start = len(self.Bytes) - vt2Offset
-            vt2Len = encode.Get(packer.voffset, self.Bytes, vt2Start)
-
-            metadata = VtableMetadataFields * N.VOffsetTFlags.bytewidth
-            vt2End = vt2Start + vt2Len
-            vt2 = self.Bytes[vt2Start+metadata:vt2End]
-
-            # Compare the other vtable to the one under consideration.
-            # If they are equal, store the offset and break:
-            if vtableEqual(self.current_vtable, objectOffset, vt2):
-                existingVtable = vt2Offset
-                break
-
-            i -= 1
-
-        if existingVtable is None:
-            # Did not find a vtable, so write this one to the buffer.
-
-            # Write out the current vtable in reverse , because
-            # serialization occurs in last-first order:
-            i = len(self.current_vtable) - 1
-            while i >= 0:
-                off = 0
-                if self.current_vtable[i] != 0:
-                    # Forward reference to field;
-                    # use 32bit number to ensure no overflow:
-                    off = objectOffset - self.current_vtable[i]
-
-                self.PrependVOffsetT(off)
-                i -= 1
-
-            # The two metadata fields are written last.
-
-            # First, store the object bytesize:
-            objectSize = UOffsetTFlags.py_type(objectOffset - self.objectEnd)
-            self.PrependVOffsetT(VOffsetTFlags.py_type(objectSize))
-
-            # Second, store the vtable bytesize:
-            vBytes = len(self.current_vtable) + VtableMetadataFields
-            vBytes *= N.VOffsetTFlags.bytewidth
-            self.PrependVOffsetT(VOffsetTFlags.py_type(vBytes))
-
-            # Next, write the offset to the new vtable in the
-            # already-allocated SOffsetT at the beginning of this object:
-            objectStart = SOffsetTFlags.py_type(len(self.Bytes) - objectOffset)
-            encode.Write(packer.soffset, self.Bytes, objectStart,
-                         SOffsetTFlags.py_type(self.Offset() - objectOffset))
-
-            # Finally, store this vtable in memory for future
-            # deduplication:
-            self.vtables.append(self.Offset())
-        else:
-            # Found a duplicate vtable.
-
-            objectStart = SOffsetTFlags.py_type(len(self.Bytes) - objectOffset)
-            self.head = UOffsetTFlags.py_type(objectStart)
-
-            # Write the offset to the found vtable in the
-            # already-allocated SOffsetT at the beginning of this object:
-            encode.Write(packer.soffset, self.Bytes, self.Head(),
-                         SOffsetTFlags.py_type(existingVtable - objectOffset))
-
-        self.current_vtable = None
-        return objectOffset
-
-    def EndObject(self):
-        """EndObject writes data necessary to finish object construction."""
-        self.assertNested()
-        self.nested = False
-        return self.WriteVtable()
-
-    def growByteBuffer(self):
-        """Doubles the size of the byteslice, and copies the old data towards
-           the end of the new buffer (since we build the buffer backwards)."""
-        if len(self.Bytes) == Builder.MAX_BUFFER_SIZE:
-            msg = "flatbuffers: cannot grow buffer beyond 2 gigabytes"
-            raise BuilderSizeError(msg)
-
-        newSize = min(len(self.Bytes) * 2, Builder.MAX_BUFFER_SIZE)
-        if newSize == 0:
-            newSize = 1
-        bytes2 = bytearray(newSize)
-        bytes2[newSize-len(self.Bytes):] = self.Bytes
-        self.Bytes = bytes2
-    ## @endcond
-
-    def Head(self):
-        """Get the start of useful data in the underlying byte buffer.
-
-        Note: unlike other functions, this value is interpreted as from the
-        left.
-        """
-        ## @cond FLATBUFFERS_INTERNAL
-        return self.head
-        ## @endcond
-
-    ## @cond FLATBUFFERS_INTERNAL
-    def Offset(self):
-        """Offset relative to the end of the buffer."""
-        return UOffsetTFlags.py_type(len(self.Bytes) - self.Head())
-
-    def Pad(self, n):
-        """Pad places zeros at the current offset."""
-        for i in range_func(n):
-            self.Place(0, N.Uint8Flags)
-
-    def Prep(self, size, additionalBytes):
-        """
-        Prep prepares to write an element of `size` after `additional_bytes`
-        have been written, e.g. if you write a string, you need to align
-        such the int length field is aligned to SizeInt32, and the string
-        data follows it directly.
-        If all you need to do is align, `additionalBytes` will be 0.
-        """
-
-        # Track the biggest thing we've ever aligned to.
-        if size > self.minalign:
-            self.minalign = size
-
-        # Find the amount of alignment needed such that `size` is properly
-        # aligned after `additionalBytes`:
-        alignSize = (~(len(self.Bytes) - self.Head() + additionalBytes)) + 1
-        alignSize &= (size - 1)
-
-        # Reallocate the buffer if needed:
-        while self.Head() < alignSize+size+additionalBytes:
-            oldBufSize = len(self.Bytes)
-            self.growByteBuffer()
-            updated_head = self.head + len(self.Bytes) - oldBufSize
-            self.head = UOffsetTFlags.py_type(updated_head)
-        self.Pad(alignSize)
-
-    def PrependSOffsetTRelative(self, off):
-        """
-        PrependSOffsetTRelative prepends an SOffsetT, relative to where it
-        will be written.
-        """
-
-        # Ensure alignment is already done:
-        self.Prep(N.SOffsetTFlags.bytewidth, 0)
-        if not (off <= self.Offset()):
-            msg = "flatbuffers: Offset arithmetic error."
-            raise OffsetArithmeticError(msg)
-        off2 = self.Offset() - off + N.SOffsetTFlags.bytewidth
-        self.PlaceSOffsetT(off2)
-    ## @endcond
-
-    def PrependUOffsetTRelative(self, off):
-        """Prepends an unsigned offset into vector data, relative to where it
-        will be written.
-        """
-
-        # Ensure alignment is already done:
-        self.Prep(N.UOffsetTFlags.bytewidth, 0)
-        if not (off <= self.Offset()):
-            msg = "flatbuffers: Offset arithmetic error."
-            raise OffsetArithmeticError(msg)
-        off2 = self.Offset() - off + N.UOffsetTFlags.bytewidth
-        self.PlaceUOffsetT(off2)
-
-    ## @cond FLATBUFFERS_INTERNAL
-    def StartVector(self, elemSize, numElems, alignment):
-        """
-        StartVector initializes bookkeeping for writing a new vector.
-
-        A vector has the following format:
-          - <UOffsetT: number of elements in this vector>
-          - <T: data>+, where T is the type of elements of this vector.
-        """
-
-        self.assertNotNested()
-        self.nested = True
-        self.Prep(N.Uint32Flags.bytewidth, elemSize*numElems)
-        self.Prep(alignment, elemSize*numElems)  # In case alignment > int.
-        return self.Offset()
-    ## @endcond
-
-    def EndVector(self, vectorNumElems):
-        """EndVector writes data necessary to finish vector construction."""
-
-        self.assertNested()
-        ## @cond FLATBUFFERS_INTERNAL
-        self.nested = False
-        ## @endcond
-        # we already made space for this, so write without PrependUint32
-        self.PlaceUOffsetT(vectorNumElems)
-        return self.Offset()
-
-    def CreateString(self, s, encoding='utf-8', errors='strict'):
-        """CreateString writes a null-terminated byte string as a vector."""
-
-        self.assertNotNested()
-        ## @cond FLATBUFFERS_INTERNAL
-        self.nested = True
-        ## @endcond
-
-        if isinstance(s, compat.string_types):
-            x = s.encode(encoding, errors)
-        elif isinstance(s, compat.binary_types):
-            x = s
-        else:
-            raise TypeError("non-string passed to CreateString")
-
-        self.Prep(N.UOffsetTFlags.bytewidth, (len(x)+1)*N.Uint8Flags.bytewidth)
-        self.Place(0, N.Uint8Flags)
-
-        l = UOffsetTFlags.py_type(len(s))
-        ## @cond FLATBUFFERS_INTERNAL
-        self.head = UOffsetTFlags.py_type(self.Head() - l)
-        ## @endcond
-        self.Bytes[self.Head():self.Head()+l] = x
-
-        return self.EndVector(len(x))
-
-    ## @cond FLATBUFFERS_INTERNAL
-    def assertNested(self):
-        """
-        Check that we are in the process of building an object.
-        """
-
-        if not self.nested:
-            raise IsNotNestedError()
-
-    def assertNotNested(self):
-        """
-        Check that no other objects are being built while making this
-        object. If not, raise an exception.
-        """
-
-        if self.nested:
-            raise IsNestedError()
-
-    def assertStructIsInline(self, obj):
-        """
-        Structs are always stored inline, so need to be created right
-        where they are used. You'll get this error if you created it
-        elsewhere.
-        """
-
-        N.enforce_number(obj, N.UOffsetTFlags)
-        if obj != self.Offset():
-            msg = ("flatbuffers: Tried to write a Struct at an Offset that "
-                   "is different from the current Offset of the Builder.")
-            raise StructIsNotInlineError(msg)
-
-    def Slot(self, slotnum):
-        """
-        Slot sets the vtable key `voffset` to the current location in the
-        buffer.
-
-        """
-        self.assertNested()
-        self.current_vtable[slotnum] = self.Offset()
-    ## @endcond
-
-    def Finish(self, rootTable):
-        """Finish finalizes a buffer, pointing to the given `rootTable`."""
-        N.enforce_number(rootTable, N.UOffsetTFlags)
-        self.Prep(self.minalign, N.UOffsetTFlags.bytewidth)
-        self.PrependUOffsetTRelative(rootTable)
-        self.finished = True
-        return self.Head()
-
-    ## @cond FLATBUFFERS_INTERNAL
-    def Prepend(self, flags, off):
-        self.Prep(flags.bytewidth, 0)
-        self.Place(off, flags)
-
-    def PrependSlot(self, flags, o, x, d):
-        N.enforce_number(x, flags)
-        N.enforce_number(d, flags)
-        if x != d:
-            self.Prepend(flags, x)
-            self.Slot(o)
-
-    def PrependBoolSlot(self, *args): self.PrependSlot(N.BoolFlags, *args)
-
-    def PrependByteSlot(self, *args): self.PrependSlot(N.Uint8Flags, *args)
-
-    def PrependUint8Slot(self, *args): self.PrependSlot(N.Uint8Flags, *args)
-
-    def PrependUint16Slot(self, *args): self.PrependSlot(N.Uint16Flags, *args)
-
-    def PrependUint32Slot(self, *args): self.PrependSlot(N.Uint32Flags, *args)
-
-    def PrependUint64Slot(self, *args): self.PrependSlot(N.Uint64Flags, *args)
-
-    def PrependInt8Slot(self, *args): self.PrependSlot(N.Int8Flags, *args)
-
-    def PrependInt16Slot(self, *args): self.PrependSlot(N.Int16Flags, *args)
-
-    def PrependInt32Slot(self, *args): self.PrependSlot(N.Int32Flags, *args)
-
-    def PrependInt64Slot(self, *args): self.PrependSlot(N.Int64Flags, *args)
-
-    def PrependFloat32Slot(self, *args): self.PrependSlot(N.Float32Flags,
-                                                          *args)
-
-    def PrependFloat64Slot(self, *args): self.PrependSlot(N.Float64Flags,
-                                                          *args)
-
-    def PrependUOffsetTRelativeSlot(self, o, x, d):
-        """
-        PrependUOffsetTRelativeSlot prepends an UOffsetT onto the object at
-        vtable slot `o`. If value `x` equals default `d`, then the slot will
-        be set to zero and no other data will be written.
-        """
-
-        if x != d:
-            self.PrependUOffsetTRelative(x)
-            self.Slot(o)
-
-    def PrependStructSlot(self, v, x, d):
-        """
-        PrependStructSlot prepends a struct onto the object at vtable slot `o`.
-        Structs are stored inline, so nothing additional is being added.
-        In generated code, `d` is always 0.
-        """
-
-        N.enforce_number(d, N.UOffsetTFlags)
-        if x != d:
-            self.assertStructIsInline(x)
-            self.Slot(v)
-
-    ## @endcond
-
-    def PrependBool(self, x):
-        """Prepend a `bool` to the Builder buffer.
-
-        Note: aligns and checks for space.
-        """
-        self.Prepend(N.BoolFlags, x)
-
-    def PrependByte(self, x):
-        """Prepend a `byte` to the Builder buffer.
-
-        Note: aligns and checks for space.
-        """
-        self.Prepend(N.Uint8Flags, x)
-
-    def PrependUint8(self, x):
-        """Prepend an `uint8` to the Builder buffer.
-
-        Note: aligns and checks for space.
-        """
-        self.Prepend(N.Uint8Flags, x)
-
-    def PrependUint16(self, x):
-        """Prepend an `uint16` to the Builder buffer.
-
-        Note: aligns and checks for space.
-        """
-        self.Prepend(N.Uint16Flags, x)
-
-    def PrependUint32(self, x):
-        """Prepend an `uint32` to the Builder buffer.
-
-        Note: aligns and checks for space.
-        """
-        self.Prepend(N.Uint32Flags, x)
-
-    def PrependUint64(self, x):
-        """Prepend an `uint64` to the Builder buffer.
-
-        Note: aligns and checks for space.
-        """
-        self.Prepend(N.Uint64Flags, x)
-
-    def PrependInt8(self, x):
-        """Prepend an `int8` to the Builder buffer.
-
-        Note: aligns and checks for space.
-        """
-        self.Prepend(N.Int8Flags, x)
-
-    def PrependInt16(self, x):
-        """Prepend an `int16` to the Builder buffer.
-
-        Note: aligns and checks for space.
-        """
-        self.Prepend(N.Int16Flags, x)
-
-    def PrependInt32(self, x):
-        """Prepend an `int32` to the Builder buffer.
-
-        Note: aligns and checks for space.
-        """
-        self.Prepend(N.Int32Flags, x)
-
-    def PrependInt64(self, x):
-        """Prepend an `int64` to the Builder buffer.
-
-        Note: aligns and checks for space.
-        """
-        self.Prepend(N.Int64Flags, x)
-
-    def PrependFloat32(self, x):
-        """Prepend a `float32` to the Builder buffer.
-
-        Note: aligns and checks for space.
-        """
-        self.Prepend(N.Float32Flags, x)
-
-    def PrependFloat64(self, x):
-        """Prepend a `float64` to the Builder buffer.
-
-        Note: aligns and checks for space.
-        """
-        self.Prepend(N.Float64Flags, x)
-
-##############################################################
-
-    ## @cond FLATBUFFERS_INTERNAL
-    def PrependVOffsetT(self, x): self.Prepend(N.VOffsetTFlags, x)
-
-    def Place(self, x, flags):
-        """
-        Place prepends a value specified by `flags` to the Builder,
-        without checking for available space.
-        """
-
-        N.enforce_number(x, flags)
-        self.head = self.head - flags.bytewidth
-        encode.Write(flags.packer_type, self.Bytes, self.Head(), x)
-
-    def PlaceVOffsetT(self, x):
-        """PlaceVOffsetT prepends a VOffsetT to the Builder, without checking
-        for space.
-        """
-        N.enforce_number(x, N.VOffsetTFlags)
-        self.head = self.head - N.VOffsetTFlags.bytewidth
-        encode.Write(packer.voffset, self.Bytes, self.Head(), x)
-
-    def PlaceSOffsetT(self, x):
-        """PlaceSOffsetT prepends a SOffsetT to the Builder, without checking
-        for space.
-        """
-        N.enforce_number(x, N.SOffsetTFlags)
-        self.head = self.head - N.SOffsetTFlags.bytewidth
-        encode.Write(packer.soffset, self.Bytes, self.Head(), x)
-
-    def PlaceUOffsetT(self, x):
-        """PlaceUOffsetT prepends a UOffsetT to the Builder, without checking
-        for space.
-        """
-        N.enforce_number(x, N.UOffsetTFlags)
-        self.head = self.head - N.UOffsetTFlags.bytewidth
-        encode.Write(packer.uoffset, self.Bytes, self.Head(), x)
-    ## @endcond
-
-## @cond FLATBUFFERS_INTERNAL
-def vtableEqual(a, objectStart, b):
-    """vtableEqual compares an unwritten vtable to a written vtable."""
-
-    N.enforce_number(objectStart, N.UOffsetTFlags)
-
-    if len(a) * N.VOffsetTFlags.bytewidth != len(b):
-        return False
-
-    for i, elem in enumerate(a):
-        x = encode.Get(packer.voffset, b, i * N.VOffsetTFlags.bytewidth)
-
-        # Skip vtable entries that indicate a default value.
-        if x == 0 and elem == 0:
-            pass
-        else:
-            y = objectStart - elem
-            if x != y:
-                return False
-    return True
-## @endcond
-## @}
diff --git a/third_party/flatbuffers/python/flatbuffers/compat.py b/third_party/flatbuffers/python/flatbuffers/compat.py
deleted file mode 100644
index e031535..0000000
--- a/third_party/flatbuffers/python/flatbuffers/compat.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright 2016 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-""" A tiny version of `six` to help with backwards compability. """
-
-import sys
-
-PY2 = sys.version_info[0] == 2
-PY26 = sys.version_info[0:2] == (2, 6)
-PY27 = sys.version_info[0:2] == (2, 7)
-PY275 = sys.version_info[0:3] >= (2, 7, 5)
-PY3 = sys.version_info[0] == 3
-PY34 = sys.version_info[0:2] >= (3, 4)
-
-if PY3:
-    string_types = (str,)
-    binary_types = (bytes,bytearray)
-    range_func = range
-    memoryview_type = memoryview
-    struct_bool_decl = "?"
-else:
-    string_types = (unicode,)
-    if PY26 or PY27:
-        binary_types = (str,bytearray)
-    else:
-        binary_types = (str,)
-    range_func = xrange
-    if PY26 or (PY27 and not PY275):
-        memoryview_type = buffer
-        struct_bool_decl = "<b"
-    else:
-        memoryview_type = memoryview
-        struct_bool_decl = "?"
-
-# NOTE: Future Jython support may require code here (look at `six`).
diff --git a/third_party/flatbuffers/python/flatbuffers/encode.py b/third_party/flatbuffers/python/flatbuffers/encode.py
deleted file mode 100644
index 1aa9230..0000000
--- a/third_party/flatbuffers/python/flatbuffers/encode.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2014 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from . import number_types as N
-from . import packer
-from .compat import memoryview_type
-
-
-def Get(packer_type, buf, head):
-    """ Get decodes a value at buf[head:] using `packer_type`. """
-    return packer_type.unpack_from(memoryview_type(buf), head)[0]
-
-
-def Write(packer_type, buf, head, n):
-    """ Write encodes `n` at buf[head:] using `packer_type`. """
-    packer_type.pack_into(buf, head, n)
diff --git a/third_party/flatbuffers/python/flatbuffers/number_types.py b/third_party/flatbuffers/python/flatbuffers/number_types.py
deleted file mode 100644
index a9605de..0000000
--- a/third_party/flatbuffers/python/flatbuffers/number_types.py
+++ /dev/null
@@ -1,172 +0,0 @@
-# Copyright 2014 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import collections
-import struct
-
-from . import packer
-
-
-# For reference, see:
-# https://docs.python.org/2/library/ctypes.html#ctypes-fundamental-data-types-2
-
-# These classes could be collections.namedtuple instances, but those are new
-# in 2.6 and we want to work towards 2.5 compatability.
-
-class BoolFlags(object):
-    bytewidth = 1
-    min_val = False
-    max_val = True
-    py_type = bool
-    name = "bool"
-    packer_type = packer.boolean
-
-
-class Uint8Flags(object):
-    bytewidth = 1
-    min_val = 0
-    max_val = (2**8) - 1
-    py_type = int
-    name = "uint8"
-    packer_type = packer.uint8
-
-
-class Uint16Flags(object):
-    bytewidth = 2
-    min_val = 0
-    max_val = (2**16) - 1
-    py_type = int
-    name = "uint16"
-    packer_type = packer.uint16
-
-
-class Uint32Flags(object):
-    bytewidth = 4
-    min_val = 0
-    max_val = (2**32) - 1
-    py_type = int
-    name = "uint32"
-    packer_type = packer.uint32
-
-
-class Uint64Flags(object):
-    bytewidth = 8
-    min_val = 0
-    max_val = (2**64) - 1
-    py_type = int
-    name = "uint64"
-    packer_type = packer.uint64
-
-
-class Int8Flags(object):
-    bytewidth = 1
-    min_val = -(2**7)
-    max_val = (2**7) - 1
-    py_type = int
-    name = "int8"
-    packer_type = packer.int8
-
-
-class Int16Flags(object):
-    bytewidth = 2
-    min_val = -(2**15)
-    max_val = (2**15) - 1
-    py_type = int
-    name = "int16"
-    packer_type = packer.int16
-
-
-class Int32Flags(object):
-    bytewidth = 4
-    min_val = -(2**31)
-    max_val = (2**31) - 1
-    py_type = int
-    name = "int32"
-    packer_type = packer.int32
-
-
-class Int64Flags(object):
-    bytewidth = 8
-    min_val = -(2**63)
-    max_val = (2**63) - 1
-    py_type = int
-    name = "int64"
-    packer_type = packer.int64
-
-
-class Float32Flags(object):
-    bytewidth = 4
-    min_val = None
-    max_val = None
-    py_type = float
-    name = "float32"
-    packer_type = packer.float32
-
-
-class Float64Flags(object):
-    bytewidth = 8
-    min_val = None
-    max_val = None
-    py_type = float
-    name = "float64"
-    packer_type = packer.float64
-
-
-class SOffsetTFlags(Int32Flags):
-    pass
-
-
-class UOffsetTFlags(Uint32Flags):
-    pass
-
-
-class VOffsetTFlags(Uint16Flags):
-    pass
-
-
-def valid_number(n, flags):
-    if flags.min_val is None and flags.max_val is None:
-        return True
-    return flags.min_val <= n <= flags.max_val
-
-
-def enforce_number(n, flags):
-    if flags.min_val is None and flags.max_val is None:
-        return
-    if not flags.min_val <= n <= flags.max_val:
-        raise TypeError("bad number %s for type %s" % (str(n), flags.name))
-
-
-def float32_to_uint32(n):
-    packed = struct.pack("<1f", n)
-    (converted,) = struct.unpack("<1L", packed)
-    return converted
-
-
-def uint32_to_float32(n):
-    packed = struct.pack("<1L", n)
-    (unpacked,) = struct.unpack("<1f", packed)
-    return unpacked
-
-
-def float64_to_uint64(n):
-    packed = struct.pack("<1d", n)
-    (converted,) = struct.unpack("<1Q", packed)
-    return converted
-
-
-def uint64_to_float64(n):
-    packed = struct.pack("<1Q", n)
-    (unpacked,) = struct.unpack("<1d", packed)
-    return unpacked
diff --git a/third_party/flatbuffers/python/flatbuffers/packer.py b/third_party/flatbuffers/python/flatbuffers/packer.py
deleted file mode 100644
index 20ee9f1..0000000
--- a/third_party/flatbuffers/python/flatbuffers/packer.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright 2016 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""
-Provide pre-compiled struct packers for encoding and decoding.
-
-See: https://docs.python.org/2/library/struct.html#format-characters
-"""
-
-import struct
-from . import compat
-
-
-boolean = struct.Struct(compat.struct_bool_decl)
-
-uint8 = struct.Struct("<B")
-uint16 = struct.Struct("<H")
-uint32 = struct.Struct("<I")
-uint64 = struct.Struct("<Q")
-
-int8 = struct.Struct("<b")
-int16 = struct.Struct("<h")
-int32 = struct.Struct("<i")
-int64 = struct.Struct("<q")
-
-float32 = struct.Struct("<f")
-float64 = struct.Struct("<d")
-
-uoffset = uint32
-soffset = int32
-voffset = uint16
diff --git a/third_party/flatbuffers/python/flatbuffers/table.py b/third_party/flatbuffers/python/flatbuffers/table.py
deleted file mode 100644
index 6cffe4c..0000000
--- a/third_party/flatbuffers/python/flatbuffers/table.py
+++ /dev/null
@@ -1,117 +0,0 @@
-# Copyright 2014 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from . import encode
-from . import number_types as N
-
-
-class Table(object):
-    """Table wraps a byte slice and provides read access to its data.
-
-    The variable `Pos` indicates the root of the FlatBuffers object therein."""
-
-    __slots__ = ("Bytes", "Pos")
-
-    def __init__(self, buf, pos):
-        N.enforce_number(pos, N.UOffsetTFlags)
-
-        self.Bytes = buf
-        self.Pos = pos
-
-    def Offset(self, vtableOffset):
-        """Offset provides access into the Table's vtable.
-
-        Deprecated fields are ignored by checking the vtable's length."""
-
-        vtable = self.Pos - self.Get(N.SOffsetTFlags, self.Pos)
-        vtableEnd = self.Get(N.VOffsetTFlags, vtable)
-        if vtableOffset < vtableEnd:
-            return self.Get(N.VOffsetTFlags, vtable + vtableOffset)
-        return 0
-
-    def Indirect(self, off):
-        """Indirect retrieves the relative offset stored at `offset`."""
-        N.enforce_number(off, N.UOffsetTFlags)
-        return off + encode.Get(N.UOffsetTFlags.packer_type, self.Bytes, off)
-
-    def String(self, off):
-        """String gets a string from data stored inside the flatbuffer."""
-        N.enforce_number(off, N.UOffsetTFlags)
-        off += encode.Get(N.UOffsetTFlags.packer_type, self.Bytes, off)
-        start = off + N.UOffsetTFlags.bytewidth
-        length = encode.Get(N.UOffsetTFlags.packer_type, self.Bytes, off)
-        return bytes(self.Bytes[start:start+length])
-
-    def VectorLen(self, off):
-        """VectorLen retrieves the length of the vector whose offset is stored
-           at "off" in this object."""
-        N.enforce_number(off, N.UOffsetTFlags)
-
-        off += self.Pos
-        off += encode.Get(N.UOffsetTFlags.packer_type, self.Bytes, off)
-        ret = encode.Get(N.UOffsetTFlags.packer_type, self.Bytes, off)
-        return ret
-
-    def Vector(self, off):
-        """Vector retrieves the start of data of the vector whose offset is
-           stored at "off" in this object."""
-        N.enforce_number(off, N.UOffsetTFlags)
-
-        off += self.Pos
-        x = off + self.Get(N.UOffsetTFlags, off)
-        # data starts after metadata containing the vector length
-        x += N.UOffsetTFlags.bytewidth
-        return x
-
-    def Union(self, t2, off):
-        """Union initializes any Table-derived type to point to the union at
-           the given offset."""
-        assert type(t2) is Table
-        N.enforce_number(off, N.UOffsetTFlags)
-
-        off += self.Pos
-        t2.Pos = off + self.Get(N.UOffsetTFlags, off)
-        t2.Bytes = self.Bytes
-
-    def Get(self, flags, off):
-        """
-        Get retrieves a value of the type specified by `flags`  at the
-        given offset.
-        """
-        N.enforce_number(off, N.UOffsetTFlags)
-        return flags.py_type(encode.Get(flags.packer_type, self.Bytes, off))
-
-    def GetSlot(self, slot, d, validator_flags):
-        N.enforce_number(slot, N.VOffsetTFlags)
-        if validator_flags is not None:
-            N.enforce_number(d, validator_flags)
-        off = self.Offset(slot)
-        if off == 0:
-            return d
-        return self.Get(validator_flags, self.Pos + off)
-
-    def GetVOffsetTSlot(self, slot, d):
-        """
-        GetVOffsetTSlot retrieves the VOffsetT that the given vtable location
-        points to. If the vtable value is zero, the default value `d`
-        will be returned.
-        """
-
-        N.enforce_number(slot, N.VOffsetTFlags)
-        N.enforce_number(d, N.VOffsetTFlags)
-
-        off = self.Offset(slot)
-        if off == 0:
-                return d
-        return off
diff --git a/third_party/flatbuffers/python/setup.py b/third_party/flatbuffers/python/setup.py
deleted file mode 100644
index 39afef3..0000000
--- a/third_party/flatbuffers/python/setup.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 2016 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from setuptools import setup
-
-setup(
-    name='flatbuffers',
-    version='2015.05.14.0',
-    license='Apache 2.0',
-    author='FlatBuffers Contributors',
-    author_email='me@rwinslow.com',
-    url='https://github.com/google/flatbuffers',
-    long_description=('Python runtime library for use with the Flatbuffers'
-                      'serialization format.'),
-    packages=['flatbuffers'],
-    include_package_data=True,
-    requires=[],
-    description='The FlatBuffers serialization format for Python',
-)
diff --git a/third_party/flatbuffers/readme.md b/third_party/flatbuffers/readme.md
deleted file mode 100755
index a7c0e93..0000000
--- a/third_party/flatbuffers/readme.md
+++ /dev/null
@@ -1,59 +0,0 @@
-![logo](http://google.github.io/flatbuffers/fpl_logo_small.png) FlatBuffers
-===========
-
-[![Join the chat at https://gitter.im/google/flatbuffers](https://badges.gitter.im/google/flatbuffers.svg)](https://gitter.im/google/flatbuffers?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-[![Build Status](https://travis-ci.org/google/flatbuffers.svg?branch=master)](https://travis-ci.org/google/flatbuffers) [![Build status](https://ci.appveyor.com/api/projects/status/yg5idd2fnusv1n10?svg=true)](https://ci.appveyor.com/project/gwvo/flatbuffers)
-
-**FlatBuffers** is an efficient cross platform serialization library for games and
-other memory constrained apps. It allows you to directly access serialized data without
-unpacking/parsing it first, while still having great forwards/backwards compatibility.
-
-**Go to our [landing page][] to browse our documentation.**
-
-## Supported operating systems
-* Android
-* Windows
-* MacOS X
-* Linux
-
-## Supported programming languages
-* C++
-* C#
-* C
-* Go
-* Java
-* JavaScript
-* PHP
-* Python
-
-*and many more in progress...*
-
-## Contribution
-* [FlatBuffers Google Group][] to discuss FlatBuffers with other developers and users.
-* [FlatBuffers Issues Tracker][] to submit an issue.
-* [stackoverflow.com][] with [`flatbuffers` tag][] for any questions regarding FlatBuffers.
-
-*To contribute to this project,* see [CONTRIBUTING][].
-
-## Integration
-For applications on Google Play that integrate this tool, usage is tracked.
-This tracking is done automatically using the embedded version string
-(**`flatbuffer_version_string`**), and helps us continue to optimize it. Aside from
-consuming a few extra bytes in your application binary, it shouldn't affect
-your application at all.  We use this information to let us know if FlatBuffers
-is useful and if we should continue to invest in it. Since this is open
-source, you are free to remove the version string but we would appreciate if
-you would leave it in.
-
-## Licensing
-*Flatbuffers* is licensed under the Apache License, Version 2.0. See [LICENSE][] for the full license text.
-
-<br>
-
-   [CONTRIBUTING]: http://github.com/google/flatbuffers/blob/master/CONTRIBUTING.md
-   [`flatbuffers` tag]: https://stackoverflow.com/questions/tagged/flatbuffers
-   [FlatBuffers Google Group]: https://groups.google.com/forum/#!forum/flatbuffers
-   [FlatBuffers Issues Tracker]: http://github.com/google/flatbuffers/issues
-   [stackoverflow.com]: http://stackoverflow.com/search?q=flatbuffers
-   [landing page]: http://google.github.io/flatbuffers
-   [LICENSE]: https://github.com/google/flatbuffers/blob/master/LICENSE.txt
diff --git a/third_party/flatbuffers/reflection/generate_code.sh b/third_party/flatbuffers/reflection/generate_code.sh
deleted file mode 100644
index da8a181..0000000
--- a/third_party/flatbuffers/reflection/generate_code.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2016 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-../flatc -c --no-prefix -o ../include/flatbuffers reflection.fbs
diff --git a/third_party/flatbuffers/reflection/reflection.fbs b/third_party/flatbuffers/reflection/reflection.fbs
deleted file mode 100644
index ea41891..0000000
--- a/third_party/flatbuffers/reflection/reflection.fbs
+++ /dev/null
@@ -1,93 +0,0 @@
-// This schema defines objects that represent a parsed schema, like
-// the binary version of a .fbs file.
-// This could be used to operate on unknown FlatBuffers at runtime.
-// It can even ... represent itself (!)
-
-namespace reflection;
-
-// These must correspond to the enum in idl.h.
-enum BaseType : byte {
-    None,
-    UType,
-    Bool,
-    Byte,
-    UByte,
-    Short,
-    UShort,
-    Int,
-    UInt,
-    Long,
-    ULong,
-    Float,
-    Double,
-    String,
-    Vector,
-    Obj,     // Used for tables & structs.
-    Union
-}
-
-table Type {
-    base_type:BaseType;
-    element:BaseType = None;  // Only if base_type == Vector.
-    index:int = -1;  // If base_type == Object, index into "objects" below.
-                     // If base_type == Union, UnionType, or integral derived
-                     // from an enum, index into "enums" below.
-}
-
-table KeyValue {
-    key:string (required, key);
-    value:string;
-}
-
-table EnumVal {
-    name:string (required);
-    value:long (key);
-    object:Object;  // Will be deprecated in favor of union_type in the future.
-    union_type:Type;
-}
-
-table Enum {
-    name:string (required, key);
-    values:[EnumVal] (required);  // In order of their values.
-    is_union:bool = false;
-    underlying_type:Type (required);
-    attributes:[KeyValue];
-    documentation:[string];
-}
-
-table Field {
-    name:string (required, key);
-    type:Type (required);
-    id:ushort;
-    offset:ushort;  // Offset into the vtable for tables, or into the struct.
-    default_integer:long = 0;
-    default_real:double = 0.0;
-    deprecated:bool = false;
-    required:bool = false;
-    key:bool = false;
-    attributes:[KeyValue];
-    documentation:[string];
-}
-
-table Object {  // Used for both tables and structs.
-    name:string (required, key);
-    fields:[Field] (required);  // Sorted.
-    is_struct:bool = false;
-    minalign:int;
-    bytesize:int;  // For structs.
-    attributes:[KeyValue];
-    documentation:[string];
-}
-
-table Schema {
-    objects:[Object] (required);  // Sorted.
-    enums:[Enum] (required);      // Sorted.
-    file_ident:string;
-    file_ext:string;
-    root_table:Object;
-}
-
-root_type Schema;
-
-file_identifier "BFBS";
-file_extension "bfbs";
diff --git a/third_party/flatbuffers/samples/SampleBinary.cs b/third_party/flatbuffers/samples/SampleBinary.cs
deleted file mode 100644
index 16128c4..0000000
--- a/third_party/flatbuffers/samples/SampleBinary.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright 2015 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// To run, use the `csharp_sample.sh` script.
-
-using System;
-using FlatBuffers;
-using MyGame.Sample;
-
-class SampleBinary
-{
-  // Example how to use FlatBuffers to create and read binary buffers.
-  static void Main()
-  {
-    var builder = new FlatBufferBuilder(1);
-
-    // Create some weapons for our Monster ('Sword' and 'Axe').
-    var weapon1Name = builder.CreateString("Sword");
-    var weapon1Damage = 3;
-    var weapon2Name = builder.CreateString("Axe");
-    var weapon2Damage = 5;
-
-    // Use the `CreateWeapon()` helper function to create the weapons, since we set every field.
-    var weaps = new Offset<Weapon>[2];
-    weaps[0] = Weapon.CreateWeapon(builder, weapon1Name, (short)weapon1Damage);
-    weaps[1] = Weapon.CreateWeapon(builder, weapon2Name, (short)weapon2Damage);
-
-    // Serialize the FlatBuffer data.
-    var name = builder.CreateString("Orc");
-    var treasure =  new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-    var inv = Monster.CreateInventoryVector(builder, treasure);
-    var weapons = Monster.CreateWeaponsVector(builder, weaps);
-    var pos = Vec3.CreateVec3(builder, 1.0f, 2.0f, 3.0f);
-
-    Monster.StartMonster(builder);
-    Monster.AddPos(builder, pos);
-    Monster.AddHp(builder, (short)300);
-    Monster.AddName(builder, name);
-    Monster.AddInventory(builder, inv);
-    Monster.AddColor(builder, Color.Red);
-    Monster.AddWeapons(builder, weapons);
-    Monster.AddEquippedType(builder, Equipment.Weapon);
-    Monster.AddEquipped(builder, weaps[1].Value);
-    var orc = Monster.EndMonster(builder);
-
-    builder.Finish(orc.Value); // You could also call `Monster.FinishMonsterBuffer(builder, orc);`.
-
-    // We now have a FlatBuffer that we could store on disk or send over a network.
-
-    // ...Code to store to disk or send over a network goes here...
-
-    // Instead, we are going to access it right away, as if we just received it.
-
-    var buf = builder.DataBuffer;
-
-    // Get access to the root:
-    var monster = Monster.GetRootAsMonster(buf);
-
-    // For C#, unlike other languages, most values (except for vectors and unions) are available as
-    // properties instead of accessor methods.
-
-    // Note: We did not set the `Mana` field explicitly, so we get back the default value.
-    Assert(monster.Mana == 150, "monster.Mana", Convert.ToString(monster.Mana),
-           Convert.ToString(150));
-    Assert(monster.Hp == 300, "monster.Hp", Convert.ToString(monster.Hp), Convert.ToString(30));
-    Assert(monster.Name.Equals("Orc", StringComparison.Ordinal), "monster.Name", monster.Name,
-           "Orc");
-    Assert(monster.Color == Color.Red, "monster.Color", Convert.ToString(monster.Color),
-           Convert.ToString(Color.Red));
-
-    // C# also allows you to use performance-enhanced methods to fill an object that has already
-    // been created. These functions are prefixed with "Get". For example: `monster.GetPos()`.
-    var myAlreadyCreatedVector = new Vec3();
-    monster.GetPos(myAlreadyCreatedVector); // Instead of `var myNewVec3 = monster.Pos`.
-    Assert(myAlreadyCreatedVector.X == 1.0f, "myAlreadyCreatedVector.X",
-           Convert.ToString(myAlreadyCreatedVector.X), Convert.ToString(1.0f));
-    Assert(myAlreadyCreatedVector.Y == 2.0f, "myAlreadyCreatedVector.Y",
-           Convert.ToString(myAlreadyCreatedVector.Y), Convert.ToString(2.0f));
-    Assert(myAlreadyCreatedVector.Z == 3.0f, "myAlreadyCreatedVector.Z",
-           Convert.ToString(myAlreadyCreatedVector.Z), Convert.ToString(3.0f));
-
-    // Get and test the `Inventory` FlatBuffer `vector`.
-    for (int i = 0; i < monster.InventoryLength; i++)
-    {
-      Assert(monster.GetInventory(i) == i, "monster.GetInventory",
-             Convert.ToString(monster.GetInventory(i)), Convert.ToString(i));
-    }
-
-    // Get and test the `Weapons` FlatBuffer `vector` of `table`s.
-    var expectedWeaponNames = new string[] {"Sword", "Axe"};
-    var expectedWeaponDamages = new short[] {3, 5};
-    for (int i = 0; i < monster.WeaponsLength; i++)
-    {
-      Assert(monster.GetWeapons(i).Name.Equals(expectedWeaponNames[i], StringComparison.Ordinal),
-             "monster.GetWeapons", monster.GetWeapons(i).Name, expectedWeaponNames[i]);
-      Assert(monster.GetWeapons(i).Damage == expectedWeaponDamages[i], "monster.GetWeapons",
-             Convert.ToString(monster.GetWeapons(i).Damage),
-             Convert.ToString(expectedWeaponDamages[i]));
-    }
-
-    // Get and test the `Equipped` FlatBuffer `union`.
-    Assert(monster.EquippedType == Equipment.Weapon, "monster.EquippedType",
-           Convert.ToString(monster.EquippedType), Convert.ToString(Equipment.Weapon));
-    var equipped = (Weapon)monster.GetEquipped(new Weapon());
-    Assert(equipped.Name.Equals("Axe", StringComparison.Ordinal), "equipped.Name", equipped.Name,
-           "Axe");
-    Assert(equipped.Damage == 5, "equipped.Damage", Convert.ToString(equipped.Damage),
-           Convert.ToString(5));
-
-    Console.WriteLine("The FlatBuffer was successfully created and verified!");
-  }
-
-  // A helper function to handle assertions.
-  static void Assert(bool assertPassed, string codeExecuted, string actualValue,
-                     string expectedValue)
-  {
-    if (assertPassed == false)
-    {
-      Console.WriteLine("Assert failed! " + codeExecuted + " (" + actualValue +
-          ") was not equal to " + expectedValue + ".");
-      System.Environment.Exit(1);
-    }
-  }
-}
diff --git a/third_party/flatbuffers/samples/SampleBinary.java b/third_party/flatbuffers/samples/SampleBinary.java
deleted file mode 100644
index 555194f..0000000
--- a/third_party/flatbuffers/samples/SampleBinary.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2015 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Run this file with the `java_sample.sh` script.
-
-import MyGame.Sample.Color;
-import MyGame.Sample.Equipment;
-import MyGame.Sample.Monster;
-import MyGame.Sample.Vec3;
-import MyGame.Sample.Weapon;
-
-import com.google.flatbuffers.FlatBufferBuilder;
-
-import java.nio.ByteBuffer;
-
-class SampleBinary {
-  // Example how to use FlatBuffers to create and read binary buffers.
-  public static void main(String[] args) {
-    FlatBufferBuilder builder = new FlatBufferBuilder(0);
-
-    // Create some weapons for our Monster ('Sword' and 'Axe').
-    int weaponOneName = builder.createString("Sword");
-    short weaponOneDamage = 3;
-    int weaponTwoName = builder.createString("Axe");
-    short weaponTwoDamage = 5;
-
-    // Use the `createWeapon()` helper function to create the weapons, since we set every field.
-    int[] weaps = new int[2];
-    weaps[0] = Weapon.createWeapon(builder, weaponOneName, weaponOneDamage);
-    weaps[1] = Weapon.createWeapon(builder, weaponTwoName, weaponTwoDamage);
-
-    // Serialize the FlatBuffer data.
-    int name = builder.createString("Orc");
-    byte[] treasure = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-    int inv = Monster.createInventoryVector(builder, treasure);
-    int weapons = Monster.createWeaponsVector(builder, weaps);
-    int pos = Vec3.createVec3(builder, 1.0f, 2.0f, 3.0f);
-
-    Monster.startMonster(builder);
-    Monster.addPos(builder, pos);
-    Monster.addName(builder, name);
-    Monster.addColor(builder, Color.Red);
-    Monster.addHp(builder, (short)300);
-    Monster.addInventory(builder, inv);
-    Monster.addWeapons(builder, weapons);
-    Monster.addEquippedType(builder, Equipment.Weapon);
-    Monster.addEquipped(builder, weaps[1]);
-    int orc = Monster.endMonster(builder);
-
-    builder.finish(orc); // You could also call `Monster.finishMonsterBuffer(builder, orc);`.
-
-    // We now have a FlatBuffer that can be stored on disk or sent over a network.
-
-    // ...Code to store to disk or send over a network goes here...
-
-    // Instead, we are going to access it right away, as if we just received it.
-
-    ByteBuffer buf = builder.dataBuffer();
-
-    // Get access to the root:
-    Monster monster = Monster.getRootAsMonster(buf);
-
-    // Note: We did not set the `mana` field explicitly, so we get back the default value.
-    assert monster.mana() == (short)150;
-    assert monster.hp() == (short)300;
-    assert monster.name().equals("Orc");
-    assert monster.color() == Color.Red;
-    assert monster.pos().x() == 1.0f;
-    assert monster.pos().y() == 2.0f;
-    assert monster.pos().z() == 3.0f;
-
-    // Get and test the `inventory` FlatBuffer `vector`.
-    for (int i = 0; i < monster.inventoryLength(); i++) {
-      assert monster.inventory(i) == (byte)i;
-    }
-
-    // Get and test the `weapons` FlatBuffer `vector` of `table`s.
-    String[] expectedWeaponNames = {"Sword", "Axe"};
-    int[] expectedWeaponDamages = {3, 5};
-    for (int i = 0; i < monster.weaponsLength(); i++) {
-      assert monster.weapons(i).name().equals(expectedWeaponNames[i]);
-      assert monster.weapons(i).damage() == expectedWeaponDamages[i];
-    }
-
-    // Get and test the `equipped` FlatBuffer `union`.
-    assert monster.equippedType() == Equipment.Weapon;
-    Weapon equipped = (Weapon)monster.equipped(new Weapon());
-    assert equipped.name().equals("Axe");
-    assert equipped.damage() == 5;
-
-    System.out.println("The FlatBuffer was successfully created and verified!");
-  }
-}
diff --git a/third_party/flatbuffers/samples/SampleBinary.php b/third_party/flatbuffers/samples/SampleBinary.php
deleted file mode 100644
index d28ffa3..0000000
--- a/third_party/flatbuffers/samples/SampleBinary.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/*
- * Copyright 2015 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// To run, use the `php_sample.sh` script.
-
-// It is recommended that you use PSR autoload when using FlatBuffers.
-function __autoload($class_name) {
-  $class = substr($class_name, strrpos($class_name, "\\") + 1);
-  $root_dir = join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)))); // `flatbuffers` root.
-  $paths = array(join(DIRECTORY_SEPARATOR, array($root_dir, "php")),
-                 join(DIRECTORY_SEPARATOR, array($root_dir, "samples", "MyGame", "Sample")));
-  foreach ($paths as $path) {
-    $file = join(DIRECTORY_SEPARATOR, array($path, $class . ".php"));
-    if (file_exists($file)) {
-      require($file);
-      break;
-    }
-  }
-}
-
-// Example how to use FlatBuffers to create and read binary buffers.
-function main() {
-  $builder = new Google\FlatBuffers\FlatbufferBuilder(0);
-
-  // Create some weapons for our Monster using the `createWeapon()` helper function.
-  $weapon_one = $builder->createString("Sword");
-  $sword = \MyGame\Sample\Weapon::CreateWeapon($builder, $weapon_one, 3);
-  $weapon_two = $builder->createString("Axe");
-  $axe = \MyGame\Sample\Weapon::CreateWeapon($builder, $weapon_two, 5);
-
-  // Serialize the FlatBuffer data.
-  $name = $builder->createString("Orc");
-
-  $treasure = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
-  $inv = \MyGame\Sample\Monster::CreateInventoryVector($builder, $treasure);
-
-  $weaps = array($sword, $axe);
-  $weapons = \MyGame\Sample\Monster::CreateWeaponsVector($builder, $weaps);
-
-  $pos = \MyGame\Sample\Vec3::CreateVec3($builder, 1.0, 2.0, 3.0);
-
-  \MyGame\Sample\Monster::StartMonster($builder);
-  \MyGame\Sample\Monster::AddPos($builder, $pos);
-  \MyGame\Sample\Monster::AddHp($builder, 300);
-  \MyGame\Sample\Monster::AddName($builder, $name);
-  \MyGame\Sample\Monster::AddInventory($builder, $inv);
-  \MyGame\Sample\Monster::AddColor($builder, \MyGame\Sample\Color::Red);
-  \MyGame\Sample\Monster::AddWeapons($builder, $weapons);
-  \MyGame\Sample\Monster::AddEquippedType($builder, \MyGame\Sample\Equipment::Weapon);
-  \MyGame\Sample\Monster::AddEquipped($builder, $weaps[1]);
-  $orc = \MyGame\Sample\Monster::EndMonster($builder);
-
-  $builder->finish($orc); // You may also call `\MyGame\Sample\Monster::FinishMonsterBuffer($builder, $orc);`.
-
-  // We now have a FlatBuffer that can be stored on disk or sent over a network.
-
-  // ...Code to store to disk or send over a network goes here...
-
-  // Instead, we are going to access it right away, as if we just received it.
-
-  $buf = $builder->dataBuffer();
-
-  // Get access to the root:
-  $monster = \MyGame\Sample\Monster::GetRootAsMonster($buf);
-
-  $success = true; // Tracks if an assert occurred.
-
-  // Note: We did not set the `mana` field explicitly, so we get back the default value.
-  $success &= assert($monster->getMana() == 150);
-  $success &= assert($monster->getHp() == 300);
-  $success &= assert($monster->getName() == "Orc");
-  $success &= assert($monster->getColor() == \MyGame\Sample\Color::Red);
-  $success &= assert($monster->getPos()->getX() == 1.0);
-  $success &= assert($monster->getPos()->getY() == 2.0);
-  $success &= assert($monster->getPos()->getZ() == 3.0);
-
-  // Get and test the `inventory` FlatBuffer `vector`.
-  for ($i = 0; $i < $monster->getInventoryLength(); $i++) {
-    $success &= assert($monster->getInventory($i) == $i);
-  }
-
-  // Get and test the `weapons` FlatBuffer `vector` of `table`s.
-  $expected_weapon_names = array("Sword", "Axe");
-  $expected_weapon_damages = array(3, 5);
-  for ($i = 0; $i < $monster->getWeaponsLength(); $i++) {
-    $success &= assert($monster->getWeapons($i)->getName() == $expected_weapon_names[$i]);
-    $success &= assert($monster->getWeapons($i)->getDamage() == $expected_weapon_damages[$i]);
-  }
-
-  // Get and test the `equipped` FlatBuffer `union`.
-  $success &= assert($monster->getEquippedType() == \MyGame\Sample\Equipment::Weapon);
-  $success &= assert($monster->getEquipped(new \MyGame\Sample\Weapon())->getName() == "Axe");
-  $success &= assert($monster->getEquipped(new \MyGame\Sample\Weapon())->getDamage() == 5);
-
-  if ($success) {
-    print("The FlatBuffer was successfully created and verified!\n");
-  }
-}
-
-main();
-?>
diff --git a/third_party/flatbuffers/samples/android/AndroidManifest.xml b/third_party/flatbuffers/samples/android/AndroidManifest.xml
deleted file mode 100755
index 0fa3dcf..0000000
--- a/third_party/flatbuffers/samples/android/AndroidManifest.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (c) 2015 Google, Inc.
-
-     This software is provided 'as-is', without any express or implied
-     warranty.  In no event will the authors be held liable for any damages
-     arising from the use of this software.
-     Permission is granted to anyone to use this software for any purpose,
-     including commercial applications, and to alter it and redistribute it
-     freely, subject to the following restrictions:
-     1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-     2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-     3. This notice may not be removed or altered from any source distribution.
- -->
-<!-- BEGIN_INCLUDE(manifest) -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.samples.FlatBufferSample"
-        android:versionCode="1"
-        android:versionName="1.0">
-
-    <uses-feature android:glEsVersion="0x00020000"></uses-feature>
-    <!-- This is the platform API where NativeActivity was introduced. -->
-    <uses-sdk android:minSdkVersion="9" />
-
-    <!-- This .apk has no Java code itself, so set hasCode to false. -->
-    <application android:label="@string/app_name" android:hasCode="false">
-
-        <!-- Our activity is the built-in NativeActivity framework class.
-             This will take care of integrating with our NDK code. -->
-        <activity android:name="android.app.NativeActivity"
-                android:label="@string/app_name"
-                android:configChanges="orientation|keyboardHidden"
-                android:screenOrientation="landscape">
-            <!-- Tell NativeActivity the name of or .so -->
-            <meta-data android:name="android.app.lib_name"
-                    android:value="FlatBufferSample" />
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-    </application>
-
-</manifest>
-<!-- END_INCLUDE(manifest) -->
diff --git a/third_party/flatbuffers/samples/android/build_apk.sh b/third_party/flatbuffers/samples/android/build_apk.sh
deleted file mode 100755
index 1b9f4a4..0000000
--- a/third_party/flatbuffers/samples/android/build_apk.sh
+++ /dev/null
@@ -1,511 +0,0 @@
-#!/bin/bash -eu
-#
-# Copyright (c) 2013 Google, Inc.
-#
-# This software is provided 'as-is', without any express or implied
-# warranty.  In no event will the authors be held liable for any damages
-# arising from the use of this software.
-# Permission is granted to anyone to use this software for any purpose,
-# including commercial applications, and to alter it and redistribute it
-# freely, subject to the following restrictions:
-# 1. The origin of this software must not be misrepresented; you must not
-# claim that you wrote the original software. If you use this software
-# in a product, an acknowledgment in the product documentation would be
-# appreciated but is not required.
-# 2. Altered source versions must be plainly marked as such, and must not be
-# misrepresented as being the original software.
-# 3. This notice may not be removed or altered from any source distribution.
-#
-# Build, deploy, debug / execute a native Android package based upon
-# NativeActivity.
-
-declare -r script_directory=$(dirname $0)
-declare -r android_root=${script_directory}/../../../../../../
-declare -r script_name=$(basename $0)
-declare -r android_manifest=AndroidManifest.xml
-declare -r os_name=$(uname -s)
-
-# Minimum Android target version supported by this project.
-: ${BUILDAPK_ANDROID_TARGET_MINVERSION:=10}
-# Directory containing the Android SDK
-# (http://developer.android.com/sdk/index.html).
-: ${ANDROID_SDK_HOME:=}
-# Directory containing the Android NDK
-# (http://developer.android.com/tools/sdk/ndk/index.html).
-: ${NDK_HOME:=}
-
-# Display script help and exit.
-usage() {
-  echo "
-Build the Android package in the current directory and deploy it to a
-connected device.
-
-Usage: ${script_name} \\
-         [ADB_DEVICE=serial_number] [BUILD=0] [DEPLOY=0] [RUN_DEBUGGER=1] \
-         [LAUNCH=0] [SWIG_BIN=swig_binary_directory] [SWIG_LIB=swig_include_directory] [ndk-build arguments ...]
-
-ADB_DEVICE=serial_number:
-  serial_number specifies the device to deploy the built apk to if multiple
-  Android devices are connected to the host.
-BUILD=0:
-  Disables the build of the package.
-DEPLOY=0:
-  Disables the deployment of the built apk to the Android device.
-RUN_DEBUGGER=1:
-  Launches the application in gdb after it has been deployed.  To debug in
-  gdb, NDK_DEBUG=1 must also be specified on the command line to build a
-  debug apk.
-LAUNCH=0:
-  Disable the launch of the apk on the Android device.
-SWIG_BIN=swig_binary_directory:
-  The directory where the SWIG binary lives. No need to set this if SWIG is
-  installed and point to from your PATH variable.
-SWIG_LIB=swig_include_directory:
-  The directory where SWIG shared include files are, usually obtainable from
-  commandline with \"swig -swiglib\". No need to set this if SWIG is installed
-  and point to from your PATH variable.
-ndk-build arguments...:
-  Additional arguments for ndk-build.  See ndk-build -h for more information.
-" >&2
-  exit 1
-}
-
-# Get the number of CPU cores present on the host.
-get_number_of_cores() {
-  case ${os_name} in
-    Darwin)
-      sysctl hw.ncpu | awk '{ print $2 }'
-      ;;
-    CYGWIN*|Linux)
-      awk '/^processor/ { n=$3 } END { print n + 1 }' /proc/cpuinfo
-      ;;
-    *)
-      echo 1
-      ;;
-  esac
-}
-
-# Get the package name from an AndroidManifest.xml file.
-get_package_name_from_manifest() {
-  xmllint --xpath 'string(/manifest/@package)' "${1}"
-}
-
-# Get the library name from an AndroidManifest.xml file.
-get_library_name_from_manifest() {
-  echo "\
-setns android=http://schemas.android.com/apk/res/android
-xpath string(/manifest/application/activity\
-[@android:name=\"android.app.NativeActivity\"]/meta-data\
-[@android:name=\"android.app.lib_name\"]/@android:value)" |
-  xmllint --shell "${1}" | awk '/Object is a string/ { print $NF }'
-}
-
-# Get the number of Android devices connected to the system.
-get_number_of_devices_connected() {
-  adb devices -l | \
-    awk '/^..*$/ { if (p) { print $0 } }
-         /List of devices attached/ { p = 1 }' | \
-    wc -l
-  return ${PIPESTATUS[0]}
-}
-
-# Kill a process and its' children.  This is provided for cygwin which
-# doesn't ship with pkill.
-kill_process_group() {
-  local parent_pid="${1}"
-  local child_pid=
-  for child_pid in $(ps -f | \
-                     awk '{ if ($3 == '"${parent_pid}"') { print $2 } }'); do
-    kill_process_group "${child_pid}"
-  done
-  kill "${parent_pid}" 2>/dev/null
-}
-
-# Find and run "adb".
-adb() {
-  local adb_path=
-  for path in "$(which adb 2>/dev/null)" \
-              "${ANDROID_SDK_HOME}/sdk/platform-tools/adb" \
-              "${android_root}/prebuilts/sdk/platform-tools/adb"; do
-    if [[ -e "${path}" ]]; then
-      adb_path="${path}"
-      break
-    fi
-  done
-  if [[ "${adb_path}" == "" ]]; then
-    echo -e "Unable to find adb." \
-           "\nAdd the Android ADT sdk/platform-tools directory to the" \
-           "PATH." >&2
-    exit 1
-  fi
-  "${adb_path}" "$@"
-}
-
-# Find and run "android".
-android() {
-  local android_executable=android
-  if echo "${os_name}" | grep -q CYGWIN; then
-    android_executable=android.bat
-  fi
-  local android_path=
-  for path in "$(which ${android_executable})" \
-              "${ANDROID_SDK_HOME}/sdk/tools/${android_executable}" \
-              "${android_root}/prebuilts/sdk/tools/${android_executable}"; do
-    if [[ -e "${path}" ]]; then
-      android_path="${path}"
-      break
-    fi
-  done
-  if [[ "${android_path}" == "" ]]; then
-    echo -e "Unable to find android tool." \
-           "\nAdd the Android ADT sdk/tools directory to the PATH." >&2
-    exit 1
-  fi
-  # Make sure ant is installed.
-  if [[ "$(which ant)" == "" ]]; then
-    echo -e "Unable to find ant." \
-            "\nPlease install ant and add to the PATH." >&2
-    exit 1
-  fi
-
-  "${android_path}" "$@"
-}
-
-# Find and run "ndk-build"
-ndkbuild() {
-  local ndkbuild_path=
-  for path in "$(which ndk-build 2>/dev/null)" \
-              "${NDK_HOME}/ndk-build" \
-              "${android_root}/prebuilts/ndk/current/ndk-build"; do
-    if [[ -e "${path}" ]]; then
-      ndkbuild_path="${path}"
-      break
-    fi
-  done
-  if [[ "${ndkbuild_path}" == "" ]]; then
-    echo -e "Unable to find ndk-build." \
-            "\nAdd the Android NDK directory to the PATH." >&2
-    exit 1
-  fi
-  "${ndkbuild_path}" "$@"
-}
-
-# Get file modification time of $1 in seconds since the epoch.
-stat_mtime() {
-  local filename="${1}"
-  case ${os_name} in
-    Darwin) stat -f%m "${filename}" 2>/dev/null || echo 0 ;;
-    *) stat -c%Y "${filename}" 2>/dev/null || echo 0 ;;
-  esac
-}
-
-# Build the native (C/C++) build targets in the current directory.
-build_native_targets() {
-  # Save the list of output modules in the install directory so that it's
-  # possible to restore their timestamps after the build is complete.  This
-  # works around a bug in ndk/build/core/setup-app.mk which results in the
-  # unconditional execution of the clean-installed-binaries rule.
-  restore_libraries="$(find libs -type f 2>/dev/null | \
-                       sed -E 's@^libs/(.*)@\1@')"
-
-  # Build native code.
-  ndkbuild -j$(get_number_of_cores) "$@"
-
-  # Restore installed libraries.
-  # Obviously this is a nasty hack (along with ${restore_libraries} above) as
-  # it assumes it knows where the NDK will be placing output files.
-  (
-    IFS=$'\n'
-    for libpath in ${restore_libraries}; do
-      source_library="obj/local/${libpath}"
-      target_library="libs/${libpath}"
-      if [[ -e "${source_library}" ]]; then
-        cp -a "${source_library}" "${target_library}"
-      fi
-    done
-  )
-}
-
-# Select the oldest installed android build target that is at least as new as
-# BUILDAPK_ANDROID_TARGET_MINVERSION.  If a suitable build target isn't found,
-# this function prints an error message and exits with an error.
-select_android_build_target() {
-  local -r android_targets_installed=$( \
-    android list targets | \
-    awk -F'"' '/^id:.*android/ { print $2 }')
-  local android_build_target=
-  for android_target in $(echo "${android_targets_installed}" | \
-                          awk -F- '{ print $2 }' | sort -n); do
-    local isNumber='^[0-9]+$'
-    # skip preview API releases e.g. 'android-L'
-    if [[ $android_target =~ $isNumber ]]; then
-      if [[ $((android_target)) -ge \
-          $((BUILDAPK_ANDROID_TARGET_MINVERSION)) ]]; then
-        android_build_target="android-${android_target}"
-        break
-      fi
-    # else
-      # The API version is a letter, so skip it.
-    fi
-  done
-  if [[ "${android_build_target}" == "" ]]; then
-    echo -e \
-      "Found installed Android targets:" \
-      "$(echo ${android_targets_installed} | sed 's/ /\n  /g;s/^/\n  /;')" \
-      "\nAndroid SDK platform" \
-      "android-$((BUILDAPK_ANDROID_TARGET_MINVERSION))" \
-      "must be installed to build this project." \
-      "\nUse the \"android\" application to install API" \
-      "$((BUILDAPK_ANDROID_TARGET_MINVERSION)) or newer." >&2
-    exit 1
-  fi
-  echo "${android_build_target}"
-}
-
-# Sign unsigned apk $1 and write the result to $2 with key store file $3 and
-# password $4.
-# If a key store file $3 and password $4 aren't specified, a temporary
-# (60 day) key is generated and used to sign the package.
-sign_apk() {
-  local unsigned_apk="${1}"
-  local signed_apk="${2}"
-  if [[ $(stat_mtime "${unsigned_apk}") -gt \
-          $(stat_mtime "${signed_apk}") ]]; then
-    local -r key_alias=$(basename ${signed_apk} .apk)
-    local keystore="${3}"
-    local key_password="${4}"
-    [[ "${keystore}" == "" ]] && keystore="${unsigned_apk}.keystore"
-    [[ "${key_password}" == "" ]] && \
-      key_password="${key_alias}123456"
-    if [[ ! -e ${keystore} ]]; then
-      keytool -genkey -v -dname "cn=, ou=${key_alias}, o=fpl" \
-        -storepass ${key_password} \
-        -keypass ${key_password} -keystore ${keystore} \
-        -alias ${key_alias} -keyalg RSA -keysize 2048 -validity 60
-    fi
-    cp "${unsigned_apk}" "${signed_apk}"
-    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 \
-      -keystore ${keystore} -storepass ${key_password} \
-      -keypass ${key_password} "${signed_apk}" ${key_alias}
-  fi
-}
-
-# Build the apk $1 for package filename $2 in the current directory using the
-# ant build target $3.
-build_apk() {
-  local -r output_apk="${1}"
-  local -r package_filename="${2}"
-  local -r ant_target="${3}"
-  # Get the list of installed android targets and select the oldest target
-  # that is at least as new as BUILDAPK_ANDROID_TARGET_MINVERSION.
-  local -r android_build_target=$(select_android_build_target)
-  [[ "${android_build_target}" == "" ]] && exit 1
-  echo "Building ${output_apk} for target ${android_build_target}" >&2
-
-  # Create / update build.xml and local.properties files.
-  if [[ $(stat_mtime "${android_manifest}") -gt \
-          $(stat_mtime build.xml) ]]; then
-    android update project --target "${android_build_target}" \
-                           -n ${package_filename} --path .
-  fi
-
-  # Use ant to build the apk.
-  ant -quiet ${ant_target}
-
-  # Sign release apks with a temporary key as these packages will not be
-  # redistributed.
-  local unsigned_apk="bin/${package_filename}-${ant_target}-unsigned.apk"
-  if [[ "${ant_target}" == "release" ]]; then
-    sign_apk "${unsigned_apk}" "${output_apk}" "" ""
-  fi
-}
-
-# Uninstall package $1 and install apk $2 on device $3 where $3 is "-s device"
-# or an empty string.  If $3 is an empty string adb will fail when multiple
-# devices are connected to the host system.
-install_apk() {
-  local -r uninstall_package_name="${1}"
-  local -r install_apk="${2}"
-  local -r adb_device="${3}"
-  # Uninstall the package if it's already installed.
-  adb ${adb_device} uninstall "${uninstall_package_name}" 1>&2 > /dev/null || \
-    true # no error check
-
-  # Install the apk.
-  # NOTE: The following works around adb not returning an error code when
-  # it fails to install an apk.
-  echo "Install ${install_apk}" >&2
-  local -r adb_install_result=$(adb ${adb_device} install "${install_apk}")
-  echo "${adb_install_result}"
-  if echo "${adb_install_result}" | grep -qF 'Failure ['; then
-    exit 1
-  fi
-}
-
-# Launch previously installed package $1 on device $2.
-# If $2 is an empty string adb will fail when multiple devices are connected
-# to the host system.
-launch_package() {
-  (
-    # Determine the SDK version of Android on the device.
-    local -r android_sdk_version=$(
-      adb ${adb_device} shell cat system/build.prop | \
-      awk -F= '/ro.build.version.sdk/ {
-                 v=$2; sub(/[ \r\n]/, "", v); print v
-               }')
-
-    # Clear logs from previous runs.
-    # Note that logcat does not just 'tail' the logs, it dumps the entire log
-    # history.
-    adb ${adb_device} logcat -c
-
-    local finished_msg='Displayed '"${package_name}"
-    local timeout_msg='Activity destroy timeout.*'"${package_name}"
-    # Maximum time to wait before stopping log monitoring.  0 = infinity.
-    local launch_timeout=0
-    # If this is a Gingerbread device, kill log monitoring after 10 seconds.
-    if [[ $((android_sdk_version)) -le 10 ]]; then
-      launch_timeout=10
-    fi
-    # Display logcat in the background.
-    # Stop displaying the log when the app launch / execution completes or the
-    # logcat
-    (
-      adb ${adb_device} logcat | \
-        awk "
-          {
-            print \$0
-          }
-
-          /ActivityManager.*: ${finished_msg}/ {
-            exit 0
-          }
-
-          /ActivityManager.*: ${timeout_msg}/ {
-            exit 0
-          }" &
-      adb_logcat_pid=$!;
-      if [[ $((launch_timeout)) -gt 0 ]]; then
-        sleep $((launch_timeout));
-        kill ${adb_logcat_pid};
-      else
-        wait ${adb_logcat_pid};
-      fi
-    ) &
-    logcat_pid=$!
-    # Kill adb logcat if this shell exits.
-    trap "kill_process_group ${logcat_pid}" SIGINT SIGTERM EXIT
-
-    # If the SDK is newer than 10, "am" supports stopping an activity.
-    adb_stop_activity=
-    if [[ $((android_sdk_version)) -gt 10 ]]; then
-      adb_stop_activity=-S
-    fi
-
-    # Launch the activity and wait for it to complete.
-    adb ${adb_device} shell am start ${adb_stop_activity} -n \
-      ${package_name}/android.app.NativeActivity
-
-    wait "${logcat_pid}"
-  )
-}
-
-# See usage().
-main() {
-  # Parse arguments for this script.
-  local adb_device=
-  local ant_target=release
-  local disable_deploy=0
-  local disable_build=0
-  local run_debugger=0
-  local launch=1
-  local build_package=1
-  for opt; do
-    case ${opt} in
-      # NDK_DEBUG=0 tells ndk-build to build this as debuggable but to not
-      # modify the underlying code whereas NDK_DEBUG=1 also builds as debuggable
-      # but does modify the code
-      NDK_DEBUG=1) ant_target=debug ;;
-      NDK_DEBUG=0) ant_target=debug ;;
-      ADB_DEVICE*) adb_device="$(\
-        echo "${opt}" | sed -E 's/^ADB_DEVICE=([^ ]+)$/-s \1/;t;s/.*//')" ;;
-      BUILD=0) disable_build=1 ;;
-      DEPLOY=0) disable_deploy=1 ;;
-      RUN_DEBUGGER=1) run_debugger=1 ;;
-      LAUNCH=0) launch=0 ;;
-      clean) build_package=0 disable_deploy=1 launch=0 ;;
-      -h|--help|help) usage ;;
-    esac
-  done
-
-  # If a target device hasn't been specified and multiple devices are connected
-  # to the host machine, display an error.
-  local -r devices_connected=$(get_number_of_devices_connected)
-  if [[ "${adb_device}" == "" && $((devices_connected)) -gt 1 && \
-        ($((disable_deploy)) -eq 0 || $((launch)) -ne 0 || \
-         $((run_debugger)) -ne 0) ]]; then
-    if [[ $((disable_deploy)) -ne 0 ]]; then
-      echo "Deployment enabled, disable using DEPLOY=0" >&2
-    fi
-    if [[ $((launch)) -ne 0 ]]; then
-     echo "Launch enabled." >&2
-    fi
-    if [[ $((disable_deploy)) -eq 0 ]]; then
-      echo "Deployment enabled." >&2
-    fi
-    if [[ $((run_debugger)) -ne 0 ]]; then
-      echo "Debugger launch enabled." >&2
-    fi
-    echo "
-Multiple Android devices are connected to this host.  Either disable deployment
-and execution of the built .apk using:
-  \"${script_name} DEPLOY=0 LAUNCH=0\"
-
-or specify a device to deploy to using:
-  \"${script_name} ADB_DEVICE=\${device_serial}\".
-
-The Android devices connected to this machine are:
-$(adb devices -l)
-" >&2
-    exit 1
-  fi
-
-  if [[ $((disable_build)) -eq 0 ]]; then
-    # Build the native target.
-    build_native_targets "$@"
-  fi
-
-  # Get the package name from the manifest.
-  local -r package_name=$(get_package_name_from_manifest "${android_manifest}")
-  if [[ "${package_name}" == "" ]]; then
-    echo -e "No package name specified in ${android_manifest},"\
-            "skipping apk build, deploy"
-            "\nand launch steps." >&2
-    exit 0
-  fi
-  local -r package_basename=${package_name/*./}
-  local package_filename=$(get_library_name_from_manifest ${android_manifest})
-  [[ "${package_filename}" == "" ]] && package_filename="${package_basename}"
-
-  # Output apk name.
-  local -r output_apk="bin/${package_filename}-${ant_target}.apk"
-
-  if [[ $((disable_build)) -eq 0 && $((build_package)) -eq 1 ]]; then
-    # Build the apk.
-    build_apk "${output_apk}" "${package_filename}" "${ant_target}"
-  fi
-
-  # Deploy to the device.
-  if [[ $((disable_deploy)) -eq 0 ]]; then
-    install_apk "${package_name}" "${output_apk}" "${adb_device}"
-  fi
-
-  if [[ "${ant_target}" == "debug" && $((run_debugger)) -eq 1 ]]; then
-    # Start debugging.
-    ndk-gdb ${adb_device} --start
-  elif [[ $((launch)) -eq 1 ]]; then
-    launch_package "${package_name}" "${adb_device}"
-  fi
-}
-
-main "$@"
diff --git a/third_party/flatbuffers/samples/android/jni/Android.mk b/third_party/flatbuffers/samples/android/jni/Android.mk
deleted file mode 100755
index 6f22d28..0000000
--- a/third_party/flatbuffers/samples/android/jni/Android.mk
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright (c) 2013 Google, Inc.
-#
-# This software is provided 'as-is', without any express or implied
-# warranty.  In no event will the authors be held liable for any damages
-# arising from the use of this software.
-# Permission is granted to anyone to use this software for any purpose,
-# including commercial applications, and to alter it and redistribute it
-# freely, subject to the following restrictions:
-# 1. The origin of this software must not be misrepresented; you must not
-# claim that you wrote the original software. If you use this software
-# in a product, an acknowledgment in the product documentation would be
-# appreciated but is not required.
-# 2. Altered source versions must be plainly marked as such, and must not be
-# misrepresented as being the original software.
-# 3. This notice may not be removed or altered from any source distribution.
-
-LOCAL_PATH := $(call my-dir)
-FLATBUFFERS_ROOT_DIR := $(LOCAL_PATH)/../../..
-
-# FlatBuffers test
-include $(CLEAR_VARS)
-
-# Include the FlatBuffer utility function to generate header files from schemas.
-include $(FLATBUFFERS_ROOT_DIR)/android/jni/include.mk
-
-LOCAL_MODULE := FlatBufferSample
-
-# Set up some useful variables to identify schema and output directories and
-# schema files.
-ANDROID_SAMPLE_GENERATED_OUTPUT_DIR := $(LOCAL_PATH)/gen/include
-ANDROID_SAMPLE_SCHEMA_DIR := $(LOCAL_PATH)/schemas
-ANDROID_SAMPLE_SCHEMA_FILES := $(ANDROID_SAMPLE_SCHEMA_DIR)/animal.fbs
-
-LOCAL_C_INCLUDES := $(ANDROID_SAMPLE_GENERATED_OUTPUT_DIR)
-
-$(info $(LOCAL_C_INCLUDES))
-
-LOCAL_SRC_FILES := main.cpp
-
-LOCAL_CPPFLAGS := -std=c++11 -fexceptions -Wall -Wno-literal-suffix
-LOCAL_LDLIBS := -llog -landroid
-LOCAL_ARM_MODE := arm
-LOCAL_STATIC_LIBRARIES := android_native_app_glue flatbuffers
-
-ifeq (,$(ANDROID_SAMPLE_RUN_ONCE))
-ANDROID_SAMPLE_RUN_ONCE := 1
-$(call flatbuffers_header_build_rules,$(ANDROID_SAMPLE_SCHEMA_FILES),$(ANDROID_SAMPLE_SCHEMA_DIR),$(ANDROID_SAMPLE_GENERATED_OUTPUT_DIR),,$(LOCAL_SRC_FILES))
-endif
-
-include $(BUILD_SHARED_LIBRARY)
-
-# Path to Flatbuffers root directory.
-$(call import-add-path,$(FLATBUFFERS_ROOT_DIR)/..)
-
-$(call import-module,flatbuffers/android/jni)
-$(call import-module,android/native_app_glue)
diff --git a/third_party/flatbuffers/samples/android/jni/Application.mk b/third_party/flatbuffers/samples/android/jni/Application.mk
deleted file mode 100755
index 2fc9c73..0000000
--- a/third_party/flatbuffers/samples/android/jni/Application.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2014 Google, Inc.
-#
-# This software is provided 'as-is', without any express or implied
-# warranty.  In no event will the authors be held liable for any damages
-# arising from the use of this software.
-# Permission is granted to anyone to use this software for any purpose,
-# including commercial applications, and to alter it and redistribute it
-# freely, subject to the following restrictions:
-# 1. The origin of this software must not be misrepresented; you must not
-# claim that you wrote the original software. If you use this software
-# in a product, an acknowledgment in the product documentation would be
-# appreciated but is not required.
-# 2. Altered source versions must be plainly marked as such, and must not be
-# misrepresented as being the original software.
-# 3. This notice may not be removed or altered from any source distribution.
-APP_PLATFORM := android-10
-APP_PROJECT_PATH := $(call my-dir)/..
-APP_STL := gnustl_static
-
-APP_ABI := armeabi-v7a
-
-APP_CPPFLAGS += -std=c++11
diff --git a/third_party/flatbuffers/samples/android/jni/main.cpp b/third_party/flatbuffers/samples/android/jni/main.cpp
deleted file mode 100644
index 8758027..0000000
--- a/third_party/flatbuffers/samples/android/jni/main.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2015 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include <android/log.h>
-
-#include "android_native_app_glue.h"
-#include "animal_generated.h" // Includes "flatbuffers/flatbuffers.h".
-
-void android_main(android_app *app) {
-  app_dummy();
-
-  flatbuffers::FlatBufferBuilder builder;
-  auto name = builder.CreateString("Dog");
-  auto sound = builder.CreateString("Bark");
-  auto animal_buffer = sample::CreateAnimal(builder, name, sound);
-  builder.Finish(animal_buffer);
-
-  // We now have a FlatBuffer that can be stored on disk or sent over a network.
-
-  // ...Code to store on disk or send over a network goes here...
-
-  // Instead, we're going to access it immediately, as if we just recieved this.
-
-  auto animal = sample::GetAnimal(builder.GetBufferPointer());
-
-  assert(animal->name()->str() == "Dog");
-  assert(animal->sound()->str() == "Bark");
-  (void)animal; // To silence "Unused Variable" warnings.
-
-  __android_log_print(ANDROID_LOG_INFO, "FlatBufferSample",
-      "FlatBuffer successfully created and verified.");
-}
diff --git a/third_party/flatbuffers/samples/android/jni/schemas/animal.fbs b/third_party/flatbuffers/samples/android/jni/schemas/animal.fbs
deleted file mode 100644
index d1bd38d..0000000
--- a/third_party/flatbuffers/samples/android/jni/schemas/animal.fbs
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2015 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-namespace sample;
-
-table Animal {
-  name:string;
-  sound:string;
-}
-
-root_type Animal;
diff --git a/third_party/flatbuffers/samples/android/res/values/strings.xml b/third_party/flatbuffers/samples/android/res/values/strings.xml
deleted file mode 100755
index 57ddaf4..0000000
--- a/third_party/flatbuffers/samples/android/res/values/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (c) 2015 Google, Inc.
-
-     This software is provided 'as-is', without any express or implied
-     warranty.  In no event will the authors be held liable for any damages
-     arising from the use of this software.
-     Permission is granted to anyone to use this software for any purpose,
-     including commercial applications, and to alter it and redistribute it
-     freely, subject to the following restrictions:
-     1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-     2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-     3. This notice may not be removed or altered from any source distribution.
- -->
-<resources>
-    <string name="app_name">FlatBufferSample</string>
-</resources>
diff --git a/third_party/flatbuffers/samples/android_sample.sh b/third_party/flatbuffers/samples/android_sample.sh
deleted file mode 100755
index ead8fd8..0000000
--- a/third_party/flatbuffers/samples/android_sample.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Note: This script requires the Android NDK and Android SDK to be installed.
-#       It also requires an Android device to be connected for installing and
-#       running the applicaton.
-
-sampledir=$(readlink -fn `dirname $0`)
-currentdir=$(readlink -fn `pwd`)
-
-if [[ "$sampledir" != "$currentdir" ]]; then
-  echo Error: This script must be run from inside the $sampledir directory.
-  echo You executed it from the $currentdir directory.
-  exit 1
-fi
-
-# Execute `build_apk.sh` to build and run the android app.
-cd android
-./build_apk.sh
-
-# Cleanup the temporary files.
-rm build.xml local.properties proguard-project.txt project.properties
-rm -rf bin libs obj
diff --git a/third_party/flatbuffers/samples/csharp_sample.sh b/third_party/flatbuffers/samples/csharp_sample.sh
deleted file mode 100755
index ea472ed..0000000
--- a/third_party/flatbuffers/samples/csharp_sample.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Note: This script runs on Mac and Linux. It requires `mono` to be installed
-# and `flatc` to be built (using `cmake` in the root directory).
-
-sampledir=$(cd $(dirname $BASH_SOURCE) && pwd)
-rootidr=$(cd $sampledir/.. && pwd)
-currentdir=$(pwd)
-
-if [[ "$sampledir" != "$currentdir" ]]; then
-  echo Error: This script must be run from inside the $sampledir directory.
-  echo You executed it from the $currentdir directory.
-  exit 1
-fi
-
-# Run `flatc`. Note: This requires you to compile using `cmake` from the
-# root `/flatbuffers` directory.
-if [ -e ../flatc ]; then
-  ../flatc --csharp --gen-mutable monster.fbs
-elif [ -e ../Debug/flatc ]; then
-  ../Debug/flatc --csharp --gen-mutable monster.fbs
-else
-  echo 'flatc' could not be found. Make sure to build FlatBuffers from the \
-       $rootdir directory.
-  exit 1
-fi
-
-echo Compiling and running the C# sample.
-
-# Compile and execute the sample.
-mcs SampleBinary.cs MyGame/Sample/*.cs ../net/FlatBuffers/*.cs
-mono SampleBinary.exe
-
-# Cleanup temporary files.
-rm SampleBinary.exe
-rm -rf MyGame/
diff --git a/third_party/flatbuffers/samples/go_sample.sh b/third_party/flatbuffers/samples/go_sample.sh
deleted file mode 100755
index 13a96c1..0000000
--- a/third_party/flatbuffers/samples/go_sample.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Note: This script runs on Mac and Linux. It requires `go` to be installed
-# and 'flatc' to be built (using `cmake` in the root directory).
-
-sampledir=$(cd $(dirname $BASH_SOURCE) && pwd)
-rootdir=$(cd $sampledir/.. && pwd)
-currentdir=$(pwd)
-
-if [[ "$sampledir" != "$currentdir" ]]; then
-  echo Error: This script must be run from inside the $sampledir directory.
-  echo You executed it from the $currentdir directory.
-  exit 1
-fi
-
-# Run `flatc`. Note: This requires you to compile using `cmake` from the
-# root `/flatbuffers` directory.
-if [ -e ../flatc ]; then
-  ../flatc --go monster.fbs
-elif [ -e ../Debug/flatc ]; then
-  ../Debug/flatc --go monster.fbs
-else
-  echo 'flatc' could not be found. Make sure to build FlatBuffers from the \
-       $rootdir directory.
- exit 1
-fi
-
-echo Compiling and running the Go sample.
-
-# Go requires a particular layout of files in order to link the necessary
-# packages. Copy these files to the respective directores to compile the
-# sample.
-mkdir -p ${sampledir}/go_gen/src/MyGame/Sample
-mkdir -p ${sampledir}/go_gen/src/github.com/google/flatbuffers/go
-cp MyGame/Sample/*.go ${sampledir}/go_gen/src/MyGame/Sample/
-cp ${sampledir}/../go/* ${sampledir}/go_gen/src/github.com/google/flatbuffers/go
-
-# Export the `GOPATH`, so that `go` will know which directories to search for
-# the libraries.
-export GOPATH=${sampledir}/go_gen/
-
-# Compile and execute the sample.
-go build -o go_sample sample_binary.go
-./go_sample
-
-# Clean up the temporary files.
-rm -rf MyGame/
-rm -rf ${sampledir}/go_gen/
-rm go_sample
diff --git a/third_party/flatbuffers/samples/java_sample.sh b/third_party/flatbuffers/samples/java_sample.sh
deleted file mode 100755
index bd1315f..0000000
--- a/third_party/flatbuffers/samples/java_sample.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Note: This script runs on Mac and Linux. It requires `java` to be installed
-# and `flatc` to be built (using `cmake` in the root directory).
-
-sampledir=$(cd $(dirname $BASH_SOURCE) && pwd)
-rootdir=$(cd $sampledir/.. && pwd)
-currentdir=$(pwd)
-
-if [[ "$sampledir" != "$currentdir" ]]; then
-  echo Error: This script must be run from inside the $sampledir directory.
-  echo You executed it from the $currentdir directory.
-  exit 1
-fi
-
-# Run `flatc`. Note: This requires you to compile using `cmake` from the
-# root `/flatbuffers` directory.
-if [ -e ../flatc ]; then
-  ../flatc --java --gen-mutable monster.fbs
-elif [ -e ../Debug/flatc ]; then
-  ../Debug/flatc --java --gen-mutable monster.fbs
-else
-  echo 'flatc' could not be found. Make sure to build FlatBuffers from the \
-       $rootdir directory.
-  exit 1
-fi
-
-echo Compiling and running the Java sample.
-
-# Compile and execute the sample.
-javac -classpath ${sampledir}/../java:${sampledir} SampleBinary.java
-java -classpath ${sampledir}/../java:${sampledir} SampleBinary
-
-# Cleanup temporary files.
-rm -rf MyGame/
-rm ${sampledir}/../java/com/google/flatbuffers/*.class
-rm *.class
diff --git a/third_party/flatbuffers/samples/javascript_sample.sh b/third_party/flatbuffers/samples/javascript_sample.sh
deleted file mode 100755
index 4bbc478..0000000
--- a/third_party/flatbuffers/samples/javascript_sample.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Note: This script runs on Mac and Linux. It requires `Node.js` to be installed
-# and `flatc` to be built (using `cmake` in the root directory).
-
-sampledir=$(cd $(dirname $BASH_SOURCE) && pwd)
-rootdir=$(cd $sampledir/.. && pwd)
-currentdir=$(pwd)
-
-if [[ "$sampledir" != "$currentdir" ]]; then
-  echo Error: This script must be run from inside the $sampledir directory.
-  echo You executed it from the $currentdir directory.
-  exit 1
-fi
-
-# Run `flatc`. Note: This requires you to compile using `cmake` from the
-# root `/flatbuffers` directory.
-if [ -e ../flatc ]; then
-  ../flatc --js monster.fbs
-elif [ -e ../Debug/flatc ]; then
-  ../Debug/flatc --js monster.fbs
-else
-  echo 'flatc' could not be found. Make sure to build FlatBuffers from the \
-       $rootdir directory.
-  exit 1
-fi
-
-echo Running the JavaScript sample.
-
-# Execute the sample.
-node samplebinary.js
-
-# Cleanup temporary files.
-rm monster_generated.js
diff --git a/third_party/flatbuffers/samples/monster.fbs b/third_party/flatbuffers/samples/monster.fbs
deleted file mode 100755
index 247b817..0000000
--- a/third_party/flatbuffers/samples/monster.fbs
+++ /dev/null
@@ -1,32 +0,0 @@
-// Example IDL file for our monster's schema.
-
-namespace MyGame.Sample;
-
-enum Color:byte { Red = 0, Green, Blue = 2 }
-
-union Equipment { Weapon } // Optionally add more tables.
-
-struct Vec3 {
-  x:float;
-  y:float;
-  z:float;
-}
-
-table Monster {
-  pos:Vec3;
-  mana:short = 150;
-  hp:short = 100;
-  name:string;
-  friendly:bool = false (deprecated);
-  inventory:[ubyte];
-  color:Color = Blue;
-  weapons:[Weapon];
-  equipped:Equipment;
-}
-
-table Weapon {
-  name:string;
-  damage:short;
-}
-
-root_type Monster;
diff --git a/third_party/flatbuffers/samples/monsterdata.json b/third_party/flatbuffers/samples/monsterdata.json
deleted file mode 100755
index 0db1d29..0000000
--- a/third_party/flatbuffers/samples/monsterdata.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  pos: {
-    x: 1,
-    y: 2,
-    z: 3
-  },
-  hp: 300,
-  name: "Orc",
-  weapons:[
-    {
-      name: "axe",
-      damage:100
-    },
-    {
-      name: "bow",
-      damage:90
-    }
-  ],
-  equipped_type: "Weapon",
-  equipped:
-    {
-      name: "bow",
-      damage:90
-    }
-}
diff --git a/third_party/flatbuffers/samples/php_sample.sh b/third_party/flatbuffers/samples/php_sample.sh
deleted file mode 100755
index c23edc3..0000000
--- a/third_party/flatbuffers/samples/php_sample.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Note: This script runs on Mac and Linux. It requires `php` to be installed
-# and `flatc` to be built (using `cmake` in the root directory).
-
-sampledir=$(cd $(dirname $BASH_SOURCE) && pwd)
-rootdir=$(cd $sampledir/.. && pwd)
-currentdir=$(pwd)
-
-if [[ "$sampledir" != "$currentdir" ]]; then
-  echo Error: This script must be run from inside the $sampledir directory.
-  echo You executed it from the $currentdir directory.
-  exit 1
-fi
-
-# Run `flatc`. Note: This requires you to compile using `cmake` from the
-# root `/flatbuffers` directory.
-if [ -e ../flatc ]; then
-  ../flatc --php monster.fbs
-elif [ -e ../Debug/flatc ]; then
-  ../Debug/flatc --php monster.fbs
-else
-  echo 'flatc' could not be found. Make sure to build FlatBuffers from the \
-        $rootdir directory.
-  exit 1
-fi
-
-echo Running the PHP sample.
-
-# Execute the sample.
-php SampleBinary.php
-
-# Clean up temporary files.
-rm -rf MyGame/
diff --git a/third_party/flatbuffers/samples/python_sample.sh b/third_party/flatbuffers/samples/python_sample.sh
deleted file mode 100755
index ca5de2b..0000000
--- a/third_party/flatbuffers/samples/python_sample.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Note: This script runs on Mac and Linux. It requires `python` to be installed
-# and `flatc` to be built (using `cmake` in the root directory).
-
-sampledir=$(cd $(dirname $BASH_SOURCE) && pwd)
-rootdir=$(cd $sampledir/.. && pwd)
-currentdir=$(pwd)
-
-if [[ "$sampledir" != "$currentdir" ]]; then
-  echo Error: This script must be run from inside the $sampledir directory.
-  echo You executed it from the $currentdir directory.
-  exit 1
-fi
-
-# Run `flatc`. Note: This requires you to compile using `cmake` from the
-# root `/flatbuffers` directory.
-if [ -e ../flatc ]; then
-  ../flatc --python monster.fbs
-elif [ -e ../Debug/flatc ]; then
-  ../Debug/flatc --python monster.fbs
-else
-  echo 'flatc' could not be found. Make sure to build FlatBuffers from the \
-       $rootdir directory.
-  exit 1
-fi
-
-echo Running the Python sample.
-
-# Execute the sample.
-python sample_binary.py
-
-# Clean up the temporary files.
-rm -rf MyGame
diff --git a/third_party/flatbuffers/samples/sample_binary.cpp b/third_party/flatbuffers/samples/sample_binary.cpp
deleted file mode 100644
index 4c5f017..0000000
--- a/third_party/flatbuffers/samples/sample_binary.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2015 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "monster_generated.h" // Already includes "flatbuffers/flatbuffers.h".
-
-using namespace MyGame::Sample;
-
-// Example how to use FlatBuffers to create and read binary buffers.
-
-int main(int /*argc*/, const char * /*argv*/[]) {
-  // Build up a serialized buffer algorithmically:
-  flatbuffers::FlatBufferBuilder builder;
-
-  // First, lets serialize some weapons for the Monster: A 'sword' and an 'axe'.
-  auto weapon_one_name = builder.CreateString("Sword");
-  short weapon_one_damage = 3;
-
-  auto weapon_two_name = builder.CreateString("Axe");
-  short weapon_two_damage = 5;
-
-  // Use the `CreateWeapon` shortcut to create Weapons with all fields set.
-  auto sword = CreateWeapon(builder, weapon_one_name, weapon_one_damage);
-  auto axe = CreateWeapon(builder, weapon_two_name, weapon_two_damage);
-
-  // Create a FlatBuffer's `vector` from the `std::vector`.
-  std::vector<flatbuffers::Offset<Weapon>> weapons_vector;
-  weapons_vector.push_back(sword);
-  weapons_vector.push_back(axe);
-  auto weapons = builder.CreateVector(weapons_vector);
-
-  // Second, serialize the rest of the objects needed by the Monster.
-  auto position = Vec3(1.0f, 2.0f, 3.0f);
-
-  auto name = builder.CreateString("MyMonster");
-
-  unsigned char inv_data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
-  auto inventory = builder.CreateVector(inv_data, 10);
-
-  // Shortcut for creating monster with all fields set:
-  auto orc = CreateMonster(builder, &position, 150, 80, name, inventory,
-                           Color_Red, weapons, Equipment_Weapon, axe.Union());
-
-  builder.Finish(orc); // Serialize the root of the object.
-
-  // We now have a FlatBuffer we can store on disk or send over a network.
-
-  // ** file/network code goes here :) **
-  // access builder.GetBufferPointer() for builder.GetSize() bytes
-
-  // Instead, we're going to access it right away (as if we just received it).
-
-  // Get access to the root:
-  auto monster = GetMonster(builder.GetBufferPointer());
-
-  // Get and test some scalar types from the FlatBuffer.
-  assert(monster->hp() == 80);
-  assert(monster->mana() == 150);  // default
-  assert(monster->name()->str() == "MyMonster");
-
-  // Get and test a field of the FlatBuffer's `struct`.
-  auto pos = monster->pos();
-  assert(pos);
-  assert(pos->z() == 3.0f);
-  (void)pos;
-
-  // Get a test an element from the `inventory` FlatBuffer's `vector`.
-  auto inv = monster->inventory();
-  assert(inv);
-  assert(inv->Get(9) == 9);
-  (void)inv;
-
-  // Get and test the `weapons` FlatBuffers's `vector`.
-  std::string expected_weapon_names[] = {"Sword", "Axe"};
-  short expected_weapon_damages[] = {3, 5};
-  auto weps = monster->weapons();
-  for (unsigned int i = 0; i < weps->size(); i++) {
-    assert(weps->Get(i)->name()->str() == expected_weapon_names[i]);
-    assert(weps->Get(i)->damage() == expected_weapon_damages[i]);
-  }
-  (void)expected_weapon_names;
-  (void)expected_weapon_damages;
-
-  // Get and test the `Equipment` union (`equipped` field).
-  assert(monster->equipped_type() == Equipment_Weapon);
-  auto equipped = static_cast<const Weapon*>(monster->equipped());
-  assert(equipped->name()->str() == "Axe");
-  assert(equipped->damage() == 5);
-  (void)equipped;
-
-  printf("The FlatBuffer was successfully created and verified!\n");
-}
-
diff --git a/third_party/flatbuffers/samples/sample_binary.go b/third_party/flatbuffers/samples/sample_binary.go
deleted file mode 100644
index e04650b..0000000
--- a/third_party/flatbuffers/samples/sample_binary.go
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright 2015 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// To run, use the `go_sample.sh` script.
-
-package main
-
-import (
-	sample "MyGame/Sample"
-	"fmt"
-	flatbuffers "github.com/google/flatbuffers/go"
-	"strconv"
-)
-
-// Example how to use Flatbuffers to create and read binary buffers.
-func main() {
-	builder := flatbuffers.NewBuilder(0)
-
-	// Create some weapons for our Monster ("Sword" and "Axe").
-	weaponOne := builder.CreateString("Sword")
-	weaponTwo := builder.CreateString("Axe")
-
-	sample.WeaponStart(builder)
-	sample.WeaponAddName(builder, weaponOne)
-	sample.WeaponAddDamage(builder, 3)
-	sword := sample.WeaponEnd(builder)
-
-	sample.WeaponStart(builder)
-	sample.WeaponAddName(builder, weaponTwo)
-	sample.WeaponAddDamage(builder, 5)
-	axe := sample.WeaponEnd(builder)
-
-	// Serialize the FlatBuffer data.
-	name := builder.CreateString("Orc")
-
-	sample.MonsterStartInventoryVector(builder, 10)
-	// Note: Since we prepend the bytes, this loop iterates in reverse.
-	for i := 9; i >= 0; i-- {
-		builder.PrependByte(byte(i))
-	}
-	inv := builder.EndVector(10)
-
-	sample.MonsterStartWeaponsVector(builder, 2)
-	// Note: Since we prepend the weapons, prepend in reverse order.
-	builder.PrependUOffsetT(axe)
-	builder.PrependUOffsetT(sword)
-	weapons := builder.EndVector(2)
-
-	pos := sample.CreateVec3(builder, 1.0, 2.0, 3.0)
-
-	sample.MonsterStart(builder)
-	sample.MonsterAddPos(builder, pos)
-	sample.MonsterAddHp(builder, 300)
-	sample.MonsterAddName(builder, name)
-	sample.MonsterAddInventory(builder, inv)
-	sample.MonsterAddColor(builder, sample.ColorRed)
-	sample.MonsterAddWeapons(builder, weapons)
-	sample.MonsterAddEquippedType(builder, sample.EquipmentWeapon)
-	sample.MonsterAddEquipped(builder, axe)
-	orc := sample.MonsterEnd(builder)
-
-	builder.Finish(orc)
-
-	// We now have a FlatBuffer that we could store on disk or send over a network.
-
-	// ...Saving to file or sending over a network code goes here...
-
-	// Instead, we are going to access this buffer right away (as if we just received it).
-
-	buf := builder.FinishedBytes()
-
-	// Note: We use `0` for the offset here, since we got the data using the
-	// `builder.FinishedBytes()` method. This simulates the data you would store/receive in your
-	// FlatBuffer. If you wanted to read from the `builder.Bytes` directly, you would need to
-	// pass in the offset of `builder.Head()`, as the builder actually constructs the buffer
-	// backwards.
-	monster := sample.GetRootAsMonster(buf, 0)
-
-	// Note: We did not set the `mana` field explicitly, so we get the
-	// default value.
-	assert(monster.Mana() == 150, "`monster.Mana()`", strconv.Itoa(int(monster.Mana())), "150")
-	assert(monster.Hp() == 300, "`monster.Hp()`", strconv.Itoa(int(monster.Hp())), "300")
-	assert(string(monster.Name()) == "Orc", "`string(monster.Name())`", string(monster.Name()),
-		"\"Orc\"")
-	assert(monster.Color() == sample.ColorRed, "`monster.Color()`",
-		strconv.Itoa(int(monster.Color())), strconv.Itoa(int(sample.ColorRed)))
-
-	// Note: Whenever you access a new object, like in `Pos()`, a new temporary accessor object
-	// gets created. If your code is very performance sensitive, you can pass in a pointer to an
-	// existing `Vec3` instead of `nil`. This allows you to reuse it across many calls to reduce
-	// the amount of object allocation/garbage collection.
-	assert(monster.Pos(nil).X() == 1.0, "`monster.Pos(nil).X()`",
-		strconv.FormatFloat(float64(monster.Pos(nil).X()), 'f', 1, 32), "1.0")
-	assert(monster.Pos(nil).Y() == 2.0, "`monster.Pos(nil).Y()`",
-		strconv.FormatFloat(float64(monster.Pos(nil).Y()), 'f', 1, 32), "2.0")
-	assert(monster.Pos(nil).Z() == 3.0, "`monster.Pos(nil).Z()`",
-		strconv.FormatFloat(float64(monster.Pos(nil).Z()), 'f', 1, 32), "3.0")
-
-	// For vectors, like `Inventory`, they have a method suffixed with 'Length' that can be used
-	// to query the length of the vector. You can index the vector by passing an index value
-	// into the accessor.
-	for i := 0; i < monster.InventoryLength(); i++ {
-		assert(monster.Inventory(i) == byte(i), "`monster.Inventory(i)`",
-			strconv.Itoa(int(monster.Inventory(i))), strconv.Itoa(int(byte(i))))
-	}
-
-	expectedWeaponNames := []string{"Sword", "Axe"}
-	expectedWeaponDamages := []int{3, 5}
-	weapon := new(sample.Weapon) // We need a `sample.Weapon` to pass into `monster.Weapons()`
-	// to capture the output of that function.
-	for i := 0; i < monster.WeaponsLength(); i++ {
-		if monster.Weapons(weapon, i) {
-			assert(string(weapon.Name()) == expectedWeaponNames[i], "`weapon.Name()`",
-				string(weapon.Name()), expectedWeaponNames[i])
-			assert(int(weapon.Damage()) == expectedWeaponDamages[i],
-				"`weapon.Damage()`", strconv.Itoa(int(weapon.Damage())),
-				strconv.Itoa(expectedWeaponDamages[i]))
-		}
-	}
-
-	// For FlatBuffer `union`s, you can get the type of the union, as well as the union
-	// data itself.
-	assert(monster.EquippedType() == sample.EquipmentWeapon, "`monster.EquippedType()`",
-		strconv.Itoa(int(monster.EquippedType())), strconv.Itoa(int(sample.EquipmentWeapon)))
-
-	unionTable := new(flatbuffers.Table)
-	if monster.Equipped(unionTable) {
-		// An example of how you can appropriately convert the table depending on the
-		// FlatBuffer `union` type. You could add `else if` and `else` clauses to handle
-		// other FlatBuffer `union` types for this field. (Similarly, this could be
-		// done in a switch statement.)
-		if monster.EquippedType() == sample.EquipmentWeapon {
-			unionWeapon := new(sample.Weapon)
-			unionWeapon.Init(unionTable.Bytes, unionTable.Pos)
-
-			assert(string(unionWeapon.Name()) == "Axe", "`unionWeapon.Name()`",
-				string(unionWeapon.Name()), "Axe")
-			assert(int(unionWeapon.Damage()) == 5, "`unionWeapon.Damage()`",
-				strconv.Itoa(int(unionWeapon.Damage())), strconv.Itoa(5))
-		}
-	}
-
-	fmt.Printf("The FlatBuffer was successfully created and verified!\n")
-}
-
-// A helper function to print out if an assertion failed.
-func assert(assertPassed bool, codeExecuted string, actualValue string, expectedValue string) {
-	if assertPassed == false {
-		panic("Assert failed! " + codeExecuted + " (" + actualValue +
-			") was not equal to " + expectedValue + ".")
-	}
-}
diff --git a/third_party/flatbuffers/samples/sample_binary.py b/third_party/flatbuffers/samples/sample_binary.py
deleted file mode 100644
index 96711fb..0000000
--- a/third_party/flatbuffers/samples/sample_binary.py
+++ /dev/null
@@ -1,137 +0,0 @@
-#!/usr/bin/python
-# Copyright 2015 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# To run this file, use `python_sample.sh`.
-
-# Append paths to the `flatbuffers` and `MyGame` modules. This is necessary
-# to facilitate executing this script in the `samples` folder, and to root
-# folder (where it gets placed when using `cmake`).
-import os
-import sys
-sys.path.append(os.path.join(os.path.dirname(__file__), '../python'))
-
-import flatbuffers
-import MyGame.Sample.Color
-import MyGame.Sample.Equipment
-import MyGame.Sample.Monster
-import MyGame.Sample.Vec3
-import MyGame.Sample.Weapon
-
-# Example of how to use FlatBuffers to create and read binary buffers.
-
-def main():
-  builder = flatbuffers.Builder(0)
-
-  # Create some weapons for our Monster ('Sword' and 'Axe').
-  weapon_one = builder.CreateString('Sword')
-  weapon_two = builder.CreateString('Axe')
-
-  MyGame.Sample.Weapon.WeaponStart(builder)
-  MyGame.Sample.Weapon.WeaponAddName(builder, weapon_one)
-  MyGame.Sample.Weapon.WeaponAddDamage(builder, 3)
-  sword = MyGame.Sample.Weapon.WeaponEnd(builder)
-
-  MyGame.Sample.Weapon.WeaponStart(builder)
-  MyGame.Sample.Weapon.WeaponAddName(builder, weapon_two)
-  MyGame.Sample.Weapon.WeaponAddDamage(builder, 5)
-  axe = MyGame.Sample.Weapon.WeaponEnd(builder)
-
-  # Serialize the FlatBuffer data.
-  name = builder.CreateString('Orc')
-
-  MyGame.Sample.Monster.MonsterStartInventoryVector(builder, 10)
-  # Note: Since we prepend the bytes, this loop iterates in reverse order.
-  for i in reversed(range(0, 10)):
-    builder.PrependByte(i)
-  inv = builder.EndVector(10)
-
-  MyGame.Sample.Monster.MonsterStartWeaponsVector(builder, 2)
-  # Note: Since we prepend the data, prepend the weapons in reverse order.
-  builder.PrependUOffsetTRelative(axe)
-  builder.PrependUOffsetTRelative(sword)
-  weapons = builder.EndVector(2)
-
-  pos = MyGame.Sample.Vec3.CreateVec3(builder, 1.0, 2.0, 3.0)
-
-  MyGame.Sample.Monster.MonsterStart(builder)
-  MyGame.Sample.Monster.MonsterAddPos(builder, pos)
-  MyGame.Sample.Monster.MonsterAddHp(builder, 300)
-  MyGame.Sample.Monster.MonsterAddName(builder, name)
-  MyGame.Sample.Monster.MonsterAddInventory(builder, inv)
-  MyGame.Sample.Monster.MonsterAddColor(builder,
-                                        MyGame.Sample.Color.Color().Red)
-  MyGame.Sample.Monster.MonsterAddWeapons(builder, weapons)
-  MyGame.Sample.Monster.MonsterAddEquippedType(
-      builder, MyGame.Sample.Equipment.Equipment().Weapon)
-  MyGame.Sample.Monster.MonsterAddEquipped(builder, axe)
-  orc = MyGame.Sample.Monster.MonsterEnd(builder)
-
-  builder.Finish(orc)
-
-  # We now have a FlatBuffer that we could store on disk or send over a network.
-
-  # ...Saving to file or sending over a network code goes here...
-
-  # Instead, we are going to access this buffer right away (as if we just
-  # received it).
-
-  buf = builder.Output()
-
-  # Note: We use `0` for the offset here, since we got the data using the
-  # `builder.Output()` method. This simulates the data you would store/receive
-  # in your FlatBuffer. If you wanted to read from the `builder.Bytes` directly,
-  # you would need to pass in the offset of `builder.Head()`, as the builder
-  # actually constructs the buffer backwards.
-  monster = MyGame.Sample.Monster.Monster.GetRootAsMonster(buf, 0)
-
-  # Note: We did not set the `Mana` field explicitly, so we get a default value.
-  assert monster.Mana() == 150
-  assert monster.Hp() == 300
-  assert monster.Name() == 'Orc'
-  assert monster.Color() == MyGame.Sample.Color.Color().Red
-  assert monster.Pos().X() == 1.0
-  assert monster.Pos().Y() == 2.0
-  assert monster.Pos().Z() == 3.0
-
-  # Get and test the `inventory` FlatBuffer `vector`.
-  for i in xrange(monster.InventoryLength()):
-    assert monster.Inventory(i) == i
-
-  # Get and test the `weapons` FlatBuffer `vector` of `table`s.
-  expected_weapon_names = ['Sword', 'Axe']
-  expected_weapon_damages = [3, 5]
-  for i in xrange(monster.WeaponsLength()):
-    assert monster.Weapons(i).Name() == expected_weapon_names[i]
-    assert monster.Weapons(i).Damage() == expected_weapon_damages[i]
-
-  # Get and test the `equipped` FlatBuffer `union`.
-  assert monster.EquippedType() == MyGame.Sample.Equipment.Equipment().Weapon
-
-  # An example of how you can appropriately convert the table depending on the
-  # FlatBuffer `union` type. You could add `elif` and `else` clauses to handle
-  # the other FlatBuffer `union` types for this field.
-  if monster.EquippedType() == MyGame.Sample.Equipment.Equipment().Weapon:
-    # `monster.Equipped()` returns a `flatbuffers.Table`, which can be used
-    # to initialize a `MyGame.Sample.Weapon.Weapon()`, in this case.
-    union_weapon = MyGame.Sample.Weapon.Weapon()
-    union_weapon.Init(monster.Equipped().Bytes, monster.Equipped().Pos)
-
-    assert union_weapon.Name() == "Axe"
-    assert union_weapon.Damage() == 5
-
-  print 'The FlatBuffer was successfully created and verified!'
-
-if __name__ == '__main__':
-  main()
diff --git a/third_party/flatbuffers/samples/sample_text.cpp b/third_party/flatbuffers/samples/sample_text.cpp
deleted file mode 100644
index d851120..0000000
--- a/third_party/flatbuffers/samples/sample_text.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "flatbuffers/idl.h"
-#include "flatbuffers/util.h"
-
-#include "monster_generated.h" // Already includes "flatbuffers/flatbuffers.h".
-
-using namespace MyGame::Sample;
-
-// This is an example of parsing text straight into a buffer and then
-// generating flatbuffer (JSON) text from the buffer.
-int main(int /*argc*/, const char * /*argv*/[]) {
-  // load FlatBuffer schema (.fbs) and JSON from disk
-  std::string schemafile;
-  std::string jsonfile;
-  bool ok = flatbuffers::LoadFile("samples/monster.fbs", false, &schemafile) &&
-            flatbuffers::LoadFile("samples/monsterdata.json", false, &jsonfile);
-  if (!ok) {
-    printf("couldn't load files!\n");
-    return 1;
-  }
-
-  // parse schema first, so we can use it to parse the data after
-  flatbuffers::Parser parser;
-  const char *include_directories[] = { "samples", nullptr };
-  ok = parser.Parse(schemafile.c_str(), include_directories) &&
-       parser.Parse(jsonfile.c_str(), include_directories);
-  assert(ok);
-
-  // here, parser.builder_ contains a binary buffer that is the parsed data.
-
-  // to ensure it is correct, we now generate text back from the binary,
-  // and compare the two:
-  std::string jsongen;
-  if (!GenerateText(parser, parser.builder_.GetBufferPointer(), &jsongen)) {
-    printf("Couldn't serialize parsed data to JSON!\n");
-    return 1;
-  }
-
-  if (jsongen != jsonfile) {
-    printf("%s----------------\n%s", jsongen.c_str(), jsonfile.c_str());
-  }
-
-  printf("The FlatBuffer has been parsed from JSON successfully.\n");
-}
diff --git a/third_party/flatbuffers/samples/samplebinary.js b/third_party/flatbuffers/samples/samplebinary.js
deleted file mode 100644
index 9c8c908..0000000
--- a/third_party/flatbuffers/samples/samplebinary.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2015 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// To run, use the `javascript_sample.sh` script.
-
-var assert = require('assert');
-var flatbuffers = require('../js/flatbuffers').flatbuffers;
-var MyGame = require('./monster_generated').MyGame;
-
-// Example how to use FlatBuffers to create and read binary buffers.
-function main() {
-  var builder = new flatbuffers.Builder(0);
-
-  // Create some weapons for our Monster ('Sword' and 'Axe').
-  var weaponOne = builder.createString('Sword');
-  var weaponTwo = builder.createString('Axe');
-
-  MyGame.Sample.Weapon.startWeapon(builder);
-  MyGame.Sample.Weapon.addName(builder, weaponOne);
-  MyGame.Sample.Weapon.addDamage(builder, 3);
-  var sword = MyGame.Sample.Weapon.endWeapon(builder);
-
-  MyGame.Sample.Weapon.startWeapon(builder);
-  MyGame.Sample.Weapon.addName(builder, weaponTwo);
-  MyGame.Sample.Weapon.addDamage(builder, 5);
-  var axe = MyGame.Sample.Weapon.endWeapon(builder);
-
-  // Serialize the FlatBuffer data.
-  var name = builder.createString('Orc');
-
-  var treasure = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
-  var inv = MyGame.Sample.Monster.createInventoryVector(builder, treasure);
-
-  var weaps = [sword, axe];
-  var weapons = MyGame.Sample.Monster.createWeaponsVector(builder, weaps);
-
-  var pos = MyGame.Sample.Vec3.createVec3(builder, 1.0, 2.0, 3.0);
-
-  MyGame.Sample.Monster.startMonster(builder);
-  MyGame.Sample.Monster.addPos(builder, pos);
-  MyGame.Sample.Monster.addHp(builder, 300);
-  MyGame.Sample.Monster.addColor(builder, MyGame.Sample.Color.Red)
-  MyGame.Sample.Monster.addName(builder, name);
-  MyGame.Sample.Monster.addInventory(builder, inv);
-  MyGame.Sample.Monster.addWeapons(builder, weapons);
-  MyGame.Sample.Monster.addEquippedType(builder, MyGame.Sample.Equipment.Weapon);
-  MyGame.Sample.Monster.addEquipped(builder, weaps[1]);
-  var orc = MyGame.Sample.Monster.endMonster(builder);
-
-  builder.finish(orc); // You may also call 'MyGame.Example.Monster.finishMonsterBuffer(builder, orc);'.
-
-  // We now have a FlatBuffer that can be stored on disk or sent over a network.
-
-  // ...Code to store to disk or send over a network goes here...
-
-  // Instead, we are going to access it right away, as if we just received it.
-
-  var buf = builder.dataBuffer();
-
-  // Get access to the root:
-  var monster = MyGame.Sample.Monster.getRootAsMonster(buf);
-
-  // Note: We did not set the `mana` field explicitly, so we get back the default value.
-  assert.equal(monster.mana(), 150);
-  assert.equal(monster.hp(), 300);
-  assert.equal(monster.name(), 'Orc');
-  assert.equal(monster.color(), MyGame.Sample.Color.Red);
-  assert.equal(monster.pos().x(), 1.0);
-  assert.equal(monster.pos().y(), 2.0);
-  assert.equal(monster.pos().z(), 3.0);
-
-  // Get and test the `inventory` FlatBuffer `vector`.
-  for (var i = 0; i < monster.inventoryLength(); i++) {
-    assert.equal(monster.inventory(i), i);
-  }
-
-  // Get and test the `weapons` FlatBuffer `vector` of `table`s.
-  var expectedWeaponNames = ['Sword', 'Axe'];
-  var expectedWeaponDamages = [3, 5];
-  for (var i = 0; i < monster.weaponsLength(); i++) {
-    assert.equal(monster.weapons(i).name(), expectedWeaponNames[i]);
-    assert.equal(monster.weapons(i).damage(), expectedWeaponDamages[i]);
-  }
-
-  // Get and test the `equipped` FlatBuffer `union`.
-  assert.equal(monster.equippedType(), MyGame.Sample.Equipment.Weapon);
-  assert.equal(monster.equipped(new MyGame.Sample.Weapon()).name(), 'Axe');
-  assert.equal(monster.equipped(new MyGame.Sample.Weapon()).damage(), 5);
-
-  console.log('The FlatBuffer was successfully created and verified!');
-}
-
-main();
diff --git a/third_party/flatbuffers/src/code_generators.cpp b/third_party/flatbuffers/src/code_generators.cpp
deleted file mode 100644
index b9e73c6..0000000
--- a/third_party/flatbuffers/src/code_generators.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "flatbuffers/code_generators.h"
-#include <assert.h>
-#include "flatbuffers/util.h"
-
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable: 4127) // C4127: conditional expression is constant
-#endif
-
-namespace flatbuffers {
-
-void CodeWriter::operator+=(std::string text) {
-
-  while (true) {
-    auto begin = text.find("{{");
-    if (begin == std::string::npos) {
-      break;
-    }
-
-    auto end = text.find("}}");
-    if (end == std::string::npos || end < begin) {
-      break;
-    }
-
-    // Write all the text before the first {{ into the stream.
-    stream_.write(text.c_str(), begin);
-
-    // The key is between the {{ and }}.
-    const std::string key = text.substr(begin + 2, end - begin - 2);
-
-    // Find the value associated with the key.  If it exists, write the
-    // value into the stream, otherwise write the key itself into the stream.
-    auto iter = value_map_.find(key);
-    if (iter != value_map_.end()) {
-      const std::string &value = iter->second;
-      stream_ << value;
-    } else {
-      assert(false && "could not find key");
-      stream_ << key;
-    }
-
-    // Update the text to everything after the }}.
-    text = text.substr(end + 2);
-  }
-  if (!text.empty() && text.back() == '\\') {
-    text.pop_back();
-    stream_ << text;
-  } else {
-    stream_ << text << std::endl;
-  }
-}
-
-const char *BaseGenerator::FlatBuffersGeneratedWarning() {
-  return "automatically generated by the FlatBuffers compiler,"
-         " do not modify\n\n";
-}
-
-std::string BaseGenerator::NamespaceDir(const Parser &parser,
-                                        const std::string &path,
-                                        const Namespace &ns) {
-  EnsureDirExists(path.c_str());
-  if (parser.opts.one_file) return path;
-  std::string namespace_dir = path;  // Either empty or ends in separator.
-  auto &namespaces = ns.components;
-  for (auto it = namespaces.begin(); it != namespaces.end(); ++it) {
-    namespace_dir += *it + kPathSeparator;
-    EnsureDirExists(namespace_dir.c_str());
-  }
-  return namespace_dir;
-}
-
-std::string BaseGenerator::NamespaceDir(const Namespace &ns) const {
-  return BaseGenerator::NamespaceDir(parser_, path_, ns);
-}
-
-bool BaseGenerator::IsEverythingGenerated() const {
-    for (auto it = parser_.enums_.vec.begin(); it != parser_.enums_.vec.end();
-         ++it) {
-      if (!(*it)->generated) return false;
-    }
-    for (auto it = parser_.structs_.vec.begin();
-         it != parser_.structs_.vec.end(); ++it) {
-      if (!(*it)->generated) return false;
-    }
-    return true;
-  }
-
-std::string BaseGenerator::FullNamespace(const char *separator,
-                                         const Namespace &ns) {
-  std::string namespace_name;
-  auto &namespaces = ns.components;
-  for (auto it = namespaces.begin(); it != namespaces.end(); ++it) {
-    if (namespace_name.length()) namespace_name += separator;
-    namespace_name += *it;
-  }
-  return namespace_name;
-}
-
-std::string BaseGenerator::LastNamespacePart(const Namespace &ns) {
-  if (!ns.components.empty())
-    return ns.components.back();
-  else
-    return std::string("");
-}
-
-// Ensure that a type is prefixed with its namespace whenever it is used
-// outside of its namespace.
-std::string BaseGenerator::WrapInNameSpace(const Namespace *ns,
-                                           const std::string &name) const {
-  if (CurrentNameSpace() == ns) return name;
-  std::string qualified_name = qualifying_start_;
-  for (auto it = ns->components.begin(); it != ns->components.end(); ++it)
-    qualified_name += *it + qualifying_separator_;
-  return qualified_name + name;
-}
-
-
-std::string BaseGenerator::WrapInNameSpace(const Definition &def) const {
-  return WrapInNameSpace(def.defined_namespace, def.name);
-}
-
-std::string BaseGenerator::GetNameSpace(const Definition &def) const {
-  const Namespace *ns = def.defined_namespace;
-  if (CurrentNameSpace() == ns) return "";
-  std::string qualified_name = qualifying_start_;
-  for (auto it = ns->components.begin(); it != ns->components.end(); ++it) {
-    qualified_name += *it;
-    if (std::next(it) != ns->components.end()) {
-        qualified_name += qualifying_separator_;
-    }
-  }
-
-  return qualified_name;
-}
-
-// Generate a documentation comment, if available.
-void GenComment(const std::vector<std::string> &dc, std::string *code_ptr,
-                const CommentConfig *config, const char *prefix) {
-  if (dc.begin() == dc.end()) {
-    // Don't output empty comment blocks with 0 lines of comment content.
-    return;
-  }
-
-  std::string &code = *code_ptr;
-  if (config != nullptr && config->first_line != nullptr) {
-    code += std::string(prefix) + std::string(config->first_line) + "\n";
-  }
-  std::string line_prefix = std::string(prefix) +
-      ((config != nullptr && config->content_line_prefix != nullptr) ?
-       config->content_line_prefix : "///");
-  for (auto it = dc.begin();
-       it != dc.end();
-       ++it) {
-    code += line_prefix + *it + "\n";
-  }
-  if (config != nullptr && config->last_line != nullptr) {
-    code += std::string(prefix) + std::string(config->last_line) + "\n";
-  }
-}
-
-}  // namespace flatbuffers
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
diff --git a/third_party/flatbuffers/src/flatc.cpp b/third_party/flatbuffers/src/flatc.cpp
deleted file mode 100644
index 7e324eb..0000000
--- a/third_party/flatbuffers/src/flatc.cpp
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "flatbuffers/flatc.h"
-
-#define FLATC_VERSION "1.6.0 (" __DATE__ ")"
-
-namespace flatbuffers {
-
-void FlatCompiler::ParseFile(
-    flatbuffers::Parser &parser,
-    const std::string &filename,
-    const std::string &contents,
-    std::vector<const char *> &include_directories) const {
-  auto local_include_directory = flatbuffers::StripFileName(filename);
-  include_directories.push_back(local_include_directory.c_str());
-  include_directories.push_back(nullptr);
-  if (!parser.Parse(contents.c_str(), &include_directories[0],
-                    filename.c_str()))
-    Error(parser.error_, false, false);
-  include_directories.pop_back();
-  include_directories.pop_back();
-}
-
-void FlatCompiler::Warn(const std::string &warn, bool show_exe_name) const {
-  params_.warn_fn(this, warn, show_exe_name);
-}
-
-void FlatCompiler::Error(const std::string &err, bool usage,
-                         bool show_exe_name) const {
-  params_.error_fn(this, err, usage, show_exe_name);
-}
-
-std::string FlatCompiler::GetUsageString(const char* program_name) const {
-  std::stringstream ss;
-  ss << "Usage: " << program_name << " [OPTION]... FILE... [-- FILE...]\n";
-  for (size_t i = 0; i < params_.num_generators; ++i) {
-    const Generator& g = params_.generators[i];
-
-    std::stringstream full_name;
-    full_name << std::setw(12) << std::left << g.generator_opt_long;
-    const char *name = g.generator_opt_short ? g.generator_opt_short : "  ";
-    const char *help = g.generator_help;
-
-    ss << "  " << full_name.str() << " " << name << "    " << help << ".\n";
-  }
-  ss <<
-      "  -o PATH            Prefix PATH to all generated files.\n"
-      "  -I PATH            Search for includes in the specified path.\n"
-      "  -M                 Print make rules for generated files.\n"
-      "  --version          Print the version number of flatc and exit.\n"
-      "  --strict-json      Strict JSON: field names must be / will be quoted,\n"
-      "                     no trailing commas in tables/vectors.\n"
-      "  --allow-non-utf8   Pass non-UTF-8 input through parser and emit nonstandard\n"
-      "                     \\x escapes in JSON. (Default is to raise parse error on\n"
-      "                     non-UTF-8 input.)\n"
-      "  --defaults-json    Output fields whose value is the default when\n"
-      "                     writing JSON\n"
-      "  --unknown-json     Allow fields in JSON that are not defined in the\n"
-      "                     schema. These fields will be discared when generating\n"
-      "                     binaries.\n"
-      "  --no-prefix        Don\'t prefix enum values with the enum type in C++.\n"
-      "  --scoped-enums     Use C++11 style scoped and strongly typed enums.\n"
-      "                     also implies --no-prefix.\n"
-      "  --gen-includes     (deprecated), this is the default behavior.\n"
-      "                     If the original behavior is required (no include\n"
-      "                     statements) use --no-includes.\n"
-      "  --no-includes      Don\'t generate include statements for included\n"
-      "                     schemas the generated file depends on (C++).\n"
-      "  --gen-mutable      Generate accessors that can mutate buffers in-place.\n"
-      "  --gen-onefile      Generate single output file for C#.\n"
-      "  --gen-name-strings Generate type name functions for C++.\n"
-      "  --escape-proto-ids Disable appending '_' in namespaces names.\n"
-      "  --gen-object-api   Generate an additional object-based API.\n"
-      "  --cpp-ptr-type T   Set object API pointer type (default std::unique_ptr)\n"
-      "  --cpp-str-type T   Set object API string type (default std::string)\n"
-      "                     T::c_str() and T::length() must be supported\n"
-      "  --no-js-exports    Removes Node.js style export lines in JS.\n"
-      "  --goog-js-export   Uses goog.exports* for closure compiler exporting in JS.\n"
-      "  --go-namespace     Generate the overrided namespace in Golang.\n"
-      "  --raw-binary       Allow binaries without file_indentifier to be read.\n"
-      "                     This may crash flatc given a mismatched schema.\n"
-      "  --proto            Input is a .proto, translate to .fbs.\n"
-      "  --grpc             Generate GRPC interfaces for the specified languages\n"
-      "  --schema           Serialize schemas instead of JSON (use with -b)\n"
-      "  --bfbs-comments    Add doc comments to the binary schema files.\n"
-      "  --conform FILE     Specify a schema the following schemas should be\n"
-      "                     an evolution of. Gives errors if not.\n"
-      "  --conform-includes Include path for the schema given with --conform\n"
-      "    PATH             \n"
-      "  --include-prefix   Prefix this path to any generated include statements.\n"
-      "    PATH\n"
-      "  --no-fb-import     Don't include flatbuffers import statement for TypeScript.\n"
-      "  --no-ts-reexport   Don't re-export imported dependencies for TypeScript.\n"
-      "FILEs may be schemas, or JSON files (conforming to preceding schema)\n"
-      "FILEs after the -- must be binary flatbuffer format files.\n"
-      "Output files are named using the base file name of the input,\n"
-      "and written to the current directory or the path given by -o.\n"
-      "example: " << program_name << " -c -b schema1.fbs schema2.fbs data.json\n";
-  return ss.str();
-}
-
-int FlatCompiler::Compile(int argc, const char** argv) {
-  if (params_.generators == nullptr || params_.num_generators == 0) {
-    return 0;
-  }
-
-  flatbuffers::IDLOptions opts;
-  std::string output_path;
-
-  bool any_generator = false;
-  bool print_make_rules = false;
-  bool raw_binary = false;
-  bool schema_binary = false;
-  bool grpc_enabled = false;
-  std::vector<std::string> filenames;
-  std::vector<const char *> include_directories;
-  std::vector<const char *> conform_include_directories;
-  std::vector<bool> generator_enabled(params_.num_generators, false);
-  size_t binary_files_from = std::numeric_limits<size_t>::max();
-  std::string conform_to_schema;
-
-  for (int argi = 0; argi < argc; argi++) {
-    std::string arg = argv[argi];
-    if (arg[0] == '-') {
-      if (filenames.size() && arg[1] != '-')
-        Error("invalid option location: " + arg, true);
-      if (arg == "-o") {
-        if (++argi >= argc) Error("missing path following: " + arg, true);
-        output_path = flatbuffers::ConCatPathFileName(argv[argi], "");
-      } else if(arg == "-I") {
-        if (++argi >= argc) Error("missing path following" + arg, true);
-        include_directories.push_back(argv[argi]);
-      } else if(arg == "--conform") {
-        if (++argi >= argc) Error("missing path following" + arg, true);
-        conform_to_schema = argv[argi];
-      } else if (arg == "--conform-includes") {
-        if (++argi >= argc) Error("missing path following" + arg, true);
-        conform_include_directories.push_back(argv[argi]);
-      } else if (arg == "--include-prefix") {
-        if (++argi >= argc) Error("missing path following" + arg, true);
-        opts.include_prefix = argv[argi];
-        if (opts.include_prefix.back() != '/' &&
-            opts.include_prefix.back() != '\\') opts.include_prefix += "/";
-      } else if(arg == "--strict-json") {
-        opts.strict_json = true;
-      } else if(arg == "--allow-non-utf8") {
-        opts.allow_non_utf8 = true;
-      } else if(arg == "--no-js-exports") {
-        opts.skip_js_exports = true;
-      } else if(arg == "--goog-js-export") {
-        opts.use_goog_js_export_format = true;
-      } else if(arg == "--go-namespace") {
-        if (++argi >= argc) Error("missing golang namespace" + arg, true);
-        opts.go_namespace = argv[argi];
-      } else if(arg == "--defaults-json") {
-        opts.output_default_scalars_in_json = true;
-      } else if (arg == "--unknown-json") {
-        opts.skip_unexpected_fields_in_json = true;
-      } else if(arg == "--no-prefix") {
-        opts.prefixed_enums = false;
-      } else if(arg == "--scoped-enums") {
-        opts.prefixed_enums = false;
-        opts.scoped_enums = true;
-      } else if (arg == "--no-union-value-namespacing") {
-        opts.union_value_namespacing = false;
-      } else if(arg == "--gen-mutable") {
-        opts.mutable_buffer = true;
-      } else if(arg == "--gen-name-strings") {
-        opts.generate_name_strings = true;
-      } else if(arg == "--gen-object-api") {
-        opts.generate_object_based_api = true;
-      } else if (arg == "--cpp-ptr-type") {
-        if (++argi >= argc) Error("missing type following" + arg, true);
-        opts.cpp_object_api_pointer_type = argv[argi];
-      } else if (arg == "--cpp-str-type") {
-        if (++argi >= argc) Error("missing type following" + arg, true);
-        opts.cpp_object_api_string_type = argv[argi];
-      } else if(arg == "--gen-all") {
-        opts.generate_all = true;
-        opts.include_dependence_headers = false;
-      } else if(arg == "--gen-includes") {
-        // Deprecated, remove this option some time in the future.
-        printf("warning: --gen-includes is deprecated (it is now default)\n");
-      } else if(arg == "--no-includes") {
-        opts.include_dependence_headers = false;
-      } else if (arg == "--gen-onefile") {
-        opts.one_file = true;
-      } else if (arg == "--raw-binary") {
-        raw_binary = true;
-      } else if(arg == "--") {  // Separator between text and binary inputs.
-        binary_files_from = filenames.size();
-      } else if(arg == "--proto") {
-        opts.proto_mode = true;
-      } else if(arg == "--escape-proto-ids") {
-        opts.escape_proto_identifiers = true;
-      } else if(arg == "--schema") {
-        schema_binary = true;
-      } else if(arg == "-M") {
-        print_make_rules = true;
-      } else if(arg == "--version") {
-        printf("flatc version %s\n", FLATC_VERSION);
-        exit(0);
-      } else if(arg == "--grpc") {
-        grpc_enabled = true;
-      } else if(arg == "--bfbs-comments") {
-        opts.binary_schema_comments = true;
-      } else if(arg == "--no-fb-import") {
-        opts.skip_flatbuffers_import = true;
-      } else if(arg == "--no-ts-reexport") {
-        opts.reexport_ts_modules = false;
-      } else {
-        for (size_t i = 0; i < params_.num_generators; ++i) {
-          if (arg == params_.generators[i].generator_opt_long ||
-              (params_.generators[i].generator_opt_short &&
-               arg == params_.generators[i].generator_opt_short)) {
-            generator_enabled[i] = true;
-            any_generator = true;
-            opts.lang_to_generate |= params_.generators[i].lang;
-            goto found;
-          }
-        }
-        Error("unknown commandline argument: " + arg, true);
-        found:;
-      }
-    } else {
-      filenames.push_back(argv[argi]);
-    }
-  }
-
-  if (!filenames.size()) Error("missing input files", false, true);
-
-  if (opts.proto_mode) {
-    if (any_generator)
-      Error("cannot generate code directly from .proto files", true);
-  } else if (!any_generator && conform_to_schema.empty()) {
-    Error("no options: specify at least one generator.", true);
-  }
-
-  flatbuffers::Parser conform_parser;
-  if (!conform_to_schema.empty()) {
-    std::string contents;
-    if (!flatbuffers::LoadFile(conform_to_schema.c_str(), true, &contents))
-      Error("unable to load schema: " + conform_to_schema);
-    ParseFile(conform_parser, conform_to_schema, contents,
-              conform_include_directories);
-  }
-
-  std::unique_ptr<flatbuffers::Parser> parser(new flatbuffers::Parser(opts));
-
-  for (auto file_it = filenames.begin();
-            file_it != filenames.end();
-          ++file_it) {
-      std::string contents;
-      if (!flatbuffers::LoadFile(file_it->c_str(), true, &contents))
-        Error("unable to load file: " + *file_it);
-
-      bool is_binary = static_cast<size_t>(file_it - filenames.begin()) >=
-                       binary_files_from;
-      if (is_binary) {
-        parser->builder_.Clear();
-        parser->builder_.PushFlatBuffer(
-          reinterpret_cast<const uint8_t *>(contents.c_str()),
-          contents.length());
-        if (!raw_binary) {
-          // Generally reading binaries that do not correspond to the schema
-          // will crash, and sadly there's no way around that when the binary
-          // does not contain a file identifier.
-          // We'd expect that typically any binary used as a file would have
-          // such an identifier, so by default we require them to match.
-          if (!parser->file_identifier_.length()) {
-            Error("current schema has no file_identifier: cannot test if \"" +
-                 *file_it +
-                 "\" matches the schema, use --raw-binary to read this file"
-                 " anyway.");
-          } else if (!flatbuffers::BufferHasIdentifier(contents.c_str(),
-                         parser->file_identifier_.c_str())) {
-            Error("binary \"" +
-                 *file_it +
-                 "\" does not have expected file_identifier \"" +
-                 parser->file_identifier_ +
-                 "\", use --raw-binary to read this file anyway.");
-          }
-        }
-      } else {
-        // Check if file contains 0 bytes.
-        if (contents.length() != strlen(contents.c_str())) {
-          Error("input file appears to be binary: " + *file_it, true);
-        }
-        auto is_schema = flatbuffers::GetExtension(*file_it) == "fbs";
-        if (is_schema) {
-          // If we're processing multiple schemas, make sure to start each
-          // one from scratch. If it depends on previous schemas it must do
-          // so explicitly using an include.
-          parser.reset(new flatbuffers::Parser(opts));
-        }
-        ParseFile(*parser.get(), *file_it, contents, include_directories);
-        if (is_schema && !conform_to_schema.empty()) {
-          auto err = parser->ConformTo(conform_parser);
-          if (!err.empty()) Error("schemas don\'t conform: " + err);
-        }
-        if (schema_binary) {
-          parser->Serialize();
-          parser->file_extension_ = reflection::SchemaExtension();
-        }
-      }
-
-      std::string filebase = flatbuffers::StripPath(
-                               flatbuffers::StripExtension(*file_it));
-
-      for (size_t i = 0; i < params_.num_generators; ++i) {
-        parser->opts.lang = params_.generators[i].lang;
-        if (generator_enabled[i]) {
-          if (!print_make_rules) {
-            flatbuffers::EnsureDirExists(output_path);
-            if (!params_.generators[i].generate(*parser.get(), output_path, filebase)) {
-              Error(std::string("Unable to generate ") +
-                    params_.generators[i].lang_name +
-                    " for " +
-                    filebase);
-            }
-          } else {
-            std::string make_rule = params_.generators[i].make_rule(
-                *parser.get(), output_path, *file_it);
-            if (!make_rule.empty())
-              printf("%s\n", flatbuffers::WordWrap(
-                  make_rule, 80, " ", " \\").c_str());
-          }
-          if (grpc_enabled) {
-            if (params_.generators[i].generateGRPC != nullptr) {
-              if (!params_.generators[i].generateGRPC(*parser.get(), output_path,
-                                              filebase)) {
-                Error(std::string("Unable to generate GRPC interface for") +
-                      params_.generators[i].lang_name);
-              }
-            } else {
-              Warn(std::string("GRPC interface generator not implemented for ")
-                   + params_.generators[i].lang_name);
-            }
-          }
-        }
-      }
-
-      if (opts.proto_mode) GenerateFBS(*parser.get(), output_path, filebase);
-
-      // We do not want to generate code for the definitions in this file
-      // in any files coming up next.
-      parser->MarkGenerated();
-  }
-  return 0;
-}
-
-}  // namespace flatbuffers
diff --git a/third_party/flatbuffers/src/flatc_main.cpp b/third_party/flatbuffers/src/flatc_main.cpp
deleted file mode 100644
index d838bac..0000000
--- a/third_party/flatbuffers/src/flatc_main.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright 2017 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "flatbuffers/flatc.h"
-
-static const char *g_program_name = nullptr;
-
-static void Warn(const flatbuffers::FlatCompiler *flatc,
-                 const std::string &warn,
-                 bool show_exe_name) {
-  (void)flatc;
-  if (show_exe_name) {
-    printf("%s: ", g_program_name);
-  }
-  printf("warning: %s\n", warn.c_str());
-}
-
-static void Error(const flatbuffers::FlatCompiler *flatc,
-                  const std::string &err,
-                  bool usage,
-                  bool show_exe_name) {
-  if (show_exe_name) {
-    printf("%s: ", g_program_name);
-  }
-  printf("error: %s\n", err.c_str());
-  if (usage) {
-    printf("%s", flatc->GetUsageString(g_program_name).c_str());
-  }
-  exit(1);
-}
-
-int main(int argc, const char *argv[]) {
-  g_program_name = argv[0];
-
-  const flatbuffers::FlatCompiler::Generator generators[] = {
-    { flatbuffers::GenerateBinary,   "-b", "--binary", "binary",
-      nullptr,
-      flatbuffers::IDLOptions::kBinary,
-      "Generate wire format binaries for any data definitions",
-      flatbuffers::BinaryMakeRule },
-    { flatbuffers::GenerateTextFile, "-t", "--json", "text",
-      nullptr,
-      flatbuffers::IDLOptions::kJson,
-      "Generate text output for any data definitions",
-      flatbuffers::TextMakeRule },
-    { flatbuffers::GenerateCPP,      "-c", "--cpp", "C++",
-      flatbuffers::GenerateCppGRPC,
-      flatbuffers::IDLOptions::kCpp,
-      "Generate C++ headers for tables/structs",
-      flatbuffers::CPPMakeRule },
-    { flatbuffers::GenerateGo,       "-g", "--go", "Go",
-      flatbuffers::GenerateGoGRPC,
-      flatbuffers::IDLOptions::kGo,
-      "Generate Go files for tables/structs",
-      flatbuffers::GeneralMakeRule },
-    { flatbuffers::GenerateGeneral,  "-j", "--java", "Java",
-      nullptr,
-      flatbuffers::IDLOptions::kJava,
-      "Generate Java classes for tables/structs",
-      flatbuffers::GeneralMakeRule },
-    { flatbuffers::GenerateJS,       "-s", "--js", "JavaScript",
-      nullptr,
-      flatbuffers::IDLOptions::kJs,
-      "Generate JavaScript code for tables/structs",
-      flatbuffers::JSMakeRule },
-    { flatbuffers::GenerateJS,       "-T", "--ts", "TypeScript",
-      nullptr,
-      flatbuffers::IDLOptions::kTs,
-      "Generate TypeScript code for tables/structs",
-      flatbuffers::JSMakeRule },
-    { flatbuffers::GenerateGeneral,  "-n", "--csharp", "C#",
-      nullptr,
-      flatbuffers::IDLOptions::kCSharp,
-      "Generate C# classes for tables/structs",
-      flatbuffers::GeneralMakeRule },
-    { flatbuffers::GeneratePython,   "-p", "--python", "Python",
-      nullptr,
-      flatbuffers::IDLOptions::kPython,
-      "Generate Python files for tables/structs",
-      flatbuffers::GeneralMakeRule },
-    { flatbuffers::GeneratePhp, nullptr, "--php", "PHP",
-      nullptr,
-      flatbuffers::IDLOptions::kPhp,
-      "Generate PHP files for tables/structs",
-      flatbuffers::GeneralMakeRule },
-    };
-
-  flatbuffers::FlatCompiler::InitParams params;
-  params.generators = generators;
-  params.num_generators = sizeof(generators) / sizeof(generators[0]);
-  params.warn_fn = Warn;
-  params.error_fn = Error;
-
-  flatbuffers::FlatCompiler flatc(params);
-  return flatc.Compile(argc - 1, argv + 1);
-}
diff --git a/third_party/flatbuffers/src/flathash.cpp b/third_party/flatbuffers/src/flathash.cpp
deleted file mode 100644
index 1a033f8..0000000
--- a/third_party/flatbuffers/src/flathash.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2015 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <iostream>
-#include <sstream>
-#include <string>
-#include "flatbuffers/hash.h"
-#include <stdio.h>
-
-enum OutputFormat {
-  kDecimal,
-  kHexadecimal,
-  kHexadecimal0x
-};
-
-int main(int argc, char* argv[]) {
-  const char* name = argv[0];
-  if (argc <= 1) {
-    printf("%s HASH [OPTION]... STRING... [-- STRING...]\n", name);
-    printf("Available hashing algorithms:\n  32 bit:\n");
-    size_t size = sizeof(flatbuffers::kHashFunctions32) /
-                  sizeof(flatbuffers::kHashFunctions32[0]);
-    for (size_t i = 0; i < size; ++i) {
-      printf("    * %s\n", flatbuffers::kHashFunctions32[i].name);
-    }
-    printf("  64 bit:\n");
-    size = sizeof(flatbuffers::kHashFunctions64) /
-           sizeof(flatbuffers::kHashFunctions64[0]);
-    for (size_t i = 0; i < size; ++i) {
-      printf("    * %s\n", flatbuffers::kHashFunctions64[i].name);
-    }
-    printf(
-        "  -d         Output hash in decimal.\n"
-        "  -x         Output hash in hexadecimal.\n"
-        "  -0x        Output hash in hexadecimal and prefix with 0x.\n"
-        "  -c         Append the string to the output in a c-style comment.\n");
-    return 0;
-  }
-
-  const char* hash_algorithm = argv[1];
-
-  flatbuffers::NamedHashFunction<uint32_t>::HashFunction hash_function32 =
-      flatbuffers::FindHashFunction32(hash_algorithm);
-  flatbuffers::NamedHashFunction<uint64_t>::HashFunction hash_function64 =
-      flatbuffers::FindHashFunction64(hash_algorithm);
-
-  if (!hash_function32 && !hash_function64) {
-    printf("\"%s\" is not a known hash algorithm.\n", hash_algorithm);
-    return 0;
-  }
-
-  OutputFormat output_format = kHexadecimal;
-  bool annotate = false;
-  bool escape_dash = false;
-  for (int i = 2; i < argc; i++) {
-    const char* arg = argv[i];
-    if (!escape_dash && arg[0] == '-') {
-      std::string opt = arg;
-      if (opt == "-d")       output_format = kDecimal;
-      else if (opt == "-x")  output_format = kHexadecimal;
-      else if (opt == "-0x") output_format = kHexadecimal0x;
-      else if (opt == "-c")  annotate = true;
-      else if (opt == "--")  escape_dash = true;
-      else printf("Unrecognized argument: \"%s\"\n", arg);
-    } else {
-      std::stringstream ss;
-      if (output_format == kDecimal) {
-        ss << std::dec;
-      } else if (output_format == kHexadecimal) {
-        ss << std::hex;
-      } else if (output_format == kHexadecimal0x) {
-        ss << std::hex;
-        ss << "0x";
-      }
-      if (hash_function32)
-        ss << hash_function32(arg);
-      else if (hash_function64)
-        ss << hash_function64(arg);
-
-      if (annotate)
-        ss << " /* \"" << arg << "\" */";
-
-      ss << "\n";
-
-      std::cout << ss.str();
-    }
-  }
-  return 0;
-}
-
diff --git a/third_party/flatbuffers/src/idl_gen_cpp.cpp b/third_party/flatbuffers/src/idl_gen_cpp.cpp
deleted file mode 100644
index b0fd11d..0000000
--- a/third_party/flatbuffers/src/idl_gen_cpp.cpp
+++ /dev/null
@@ -1,2201 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// independent from idl_parser, since this code is not needed for most clients
-
-#include "flatbuffers/flatbuffers.h"
-#include "flatbuffers/idl.h"
-#include "flatbuffers/util.h"
-#include "flatbuffers/code_generators.h"
-
-namespace flatbuffers {
-
-// Pedantic warning free version of toupper().
-inline char ToUpper(char c) {
-  return static_cast<char>(::toupper(c));
-}
-
-static std::string GeneratedFileName(const std::string &path,
-                                     const std::string &file_name) {
-  return path + file_name + "_generated.h";
-}
-
-namespace cpp {
-class CppGenerator : public BaseGenerator {
- public:
-  CppGenerator(const Parser &parser, const std::string &path,
-               const std::string &file_name)
-      : BaseGenerator(parser, path, file_name, "", "::"),
-        cur_name_space_(nullptr) {}
-
-  std::string GenIncludeGuard() const {
-    // Generate include guard.
-    std::string guard = file_name_;
-    // Remove any non-alpha-numeric characters that may appear in a filename.
-    struct IsAlnum {
-      bool operator()(char c) { return !isalnum(c); }
-    };
-    guard.erase(std::remove_if(guard.begin(), guard.end(), IsAlnum()),
-                guard.end());
-    guard = "FLATBUFFERS_GENERATED_" + guard;
-    guard += "_";
-    // For further uniqueness, also add the namespace.
-    auto name_space = parser_.namespaces_.back();
-    for (auto it = name_space->components.begin();
-         it != name_space->components.end(); ++it) {
-      guard += *it + "_";
-    }
-    guard += "H_";
-    std::transform(guard.begin(), guard.end(), guard.begin(), ToUpper);
-    return guard;
-  }
-
-  void GenIncludeDependencies() {
-    int num_includes = 0;
-    for (auto it = parser_.native_included_files_.begin();
-         it != parser_.native_included_files_.end(); ++it) {
-      code_ += "#include \"" + *it + "\"";
-      num_includes++;
-    }
-    for (auto it = parser_.included_files_.begin();
-         it != parser_.included_files_.end(); ++it) {
-      const auto basename =
-          flatbuffers::StripPath(flatbuffers::StripExtension(it->first));
-      if (basename != file_name_) {
-        code_ += "#include \"" + parser_.opts.include_prefix + basename +
-                 "_generated.h\"";
-        num_includes++;
-      }
-    }
-    if (num_includes) code_ += "";
-  }
-
-  // Iterate through all definitions we haven't generate code for (enums,
-  // structs, and tables) and output them to a single file.
-  bool generate() {
-    if (IsEverythingGenerated()) return true;
-
-    code_.Clear();
-    code_ += "// " + std::string(FlatBuffersGeneratedWarning());
-
-    const auto include_guard = GenIncludeGuard();
-    code_ += "#ifndef " + include_guard;
-    code_ += "#define " + include_guard;
-    code_ += "";
-
-    code_ += "#include \"flatbuffers/flatbuffers.h\"";
-    code_ += "";
-
-    if (parser_.opts.include_dependence_headers) {
-      GenIncludeDependencies();
-    }
-
-    assert(!cur_name_space_);
-
-    // Generate forward declarations for all structs/tables, since they may
-    // have circular references.
-    for (auto it = parser_.structs_.vec.begin();
-         it != parser_.structs_.vec.end(); ++it) {
-      const auto &struct_def = **it;
-      if (!struct_def.generated) {
-        SetNameSpace(struct_def.defined_namespace);
-        code_ += "struct " + struct_def.name + ";";
-        if (parser_.opts.generate_object_based_api && !struct_def.fixed) {
-          code_ += "struct " + NativeName(struct_def.name, &struct_def) + ";";
-        }
-        code_ += "";
-      }
-    }
-
-    // Generate code for all the enum declarations.
-    for (auto it = parser_.enums_.vec.begin(); it != parser_.enums_.vec.end();
-         ++it) {
-      const auto &enum_def = **it;
-      if (!enum_def.generated) {
-        SetNameSpace(enum_def.defined_namespace);
-        GenEnum(enum_def);
-      }
-    }
-
-    // Generate code for all structs, then all tables.
-    for (auto it = parser_.structs_.vec.begin();
-         it != parser_.structs_.vec.end(); ++it) {
-      const auto &struct_def = **it;
-      if (struct_def.fixed && !struct_def.generated) {
-        SetNameSpace(struct_def.defined_namespace);
-        GenStruct(struct_def);
-      }
-    }
-    for (auto it = parser_.structs_.vec.begin();
-         it != parser_.structs_.vec.end(); ++it) {
-      const auto &struct_def = **it;
-      if (!struct_def.fixed && !struct_def.generated) {
-        SetNameSpace(struct_def.defined_namespace);
-        GenTable(struct_def);
-      }
-    }
-    for (auto it = parser_.structs_.vec.begin();
-         it != parser_.structs_.vec.end(); ++it) {
-      const auto &struct_def = **it;
-      if (!struct_def.fixed && !struct_def.generated) {
-        SetNameSpace(struct_def.defined_namespace);
-        GenTablePost(struct_def);
-      }
-    }
-
-    // Generate code for union verifiers.
-    for (auto it = parser_.enums_.vec.begin(); it != parser_.enums_.vec.end();
-         ++it) {
-      const auto &enum_def = **it;
-      if (enum_def.is_union && !enum_def.generated) {
-        SetNameSpace(enum_def.defined_namespace);
-        GenUnionPost(enum_def);
-      }
-    }
-
-    // Generate convenient global helper functions:
-    if (parser_.root_struct_def_) {
-      auto &struct_def = *parser_.root_struct_def_;
-      SetNameSpace(struct_def.defined_namespace);
-      const auto &name = struct_def.name;
-      const auto qualified_name =
-          parser_.namespaces_.back()->GetFullyQualifiedName(name);
-      const auto cpp_name = TranslateNameSpace(qualified_name);
-
-      code_.SetValue("STRUCT_NAME", name);
-      code_.SetValue("CPP_NAME", cpp_name);
-
-      // The root datatype accessor:
-      code_ += "inline \\";
-      code_ += "const {{CPP_NAME}} *Get{{STRUCT_NAME}}(const void *buf) {";
-      code_ += "  return flatbuffers::GetRoot<{{CPP_NAME}}>(buf);";
-      code_ += "}";
-      code_ += "";
-
-      if (parser_.opts.mutable_buffer) {
-        code_ += "inline \\";
-        code_ += "{{STRUCT_NAME}} *GetMutable{{STRUCT_NAME}}(void *buf) {";
-        code_ += "  return flatbuffers::GetMutableRoot<{{STRUCT_NAME}}>(buf);";
-        code_ += "}";
-        code_ += "";
-      }
-
-      if (parser_.file_identifier_.length()) {
-        // Return the identifier
-        code_ += "inline const char *{{STRUCT_NAME}}Identifier() {";
-        code_ += "  return \"" + parser_.file_identifier_ + "\";";
-        code_ += "}";
-        code_ += "";
-
-        // Check if a buffer has the identifier.
-        code_ += "inline \\";
-        code_ += "bool {{STRUCT_NAME}}BufferHasIdentifier(const void *buf) {";
-        code_ += "  return flatbuffers::BufferHasIdentifier(";
-        code_ += "      buf, {{STRUCT_NAME}}Identifier());";
-        code_ += "}";
-        code_ += "";
-      }
-
-      // The root verifier.
-      if (parser_.file_identifier_.length()) {
-        code_.SetValue("ID", name + "Identifier()");
-      } else {
-        code_.SetValue("ID", "nullptr");
-      }
-
-      code_ += "inline bool Verify{{STRUCT_NAME}}Buffer(";
-      code_ += "    flatbuffers::Verifier &verifier) {";
-      code_ += "  return verifier.VerifyBuffer<{{CPP_NAME}}>({{ID}});";
-      code_ += "}";
-      code_ += "";
-
-      if (parser_.file_extension_.length()) {
-        // Return the extension
-        code_ += "inline const char *{{STRUCT_NAME}}Extension() {";
-        code_ += "  return \"" + parser_.file_extension_ + "\";";
-        code_ += "}";
-        code_ += "";
-      }
-
-      // Finish a buffer with a given root object:
-      code_ += "inline void Finish{{STRUCT_NAME}}Buffer(";
-      code_ += "    flatbuffers::FlatBufferBuilder &fbb,";
-      code_ += "    flatbuffers::Offset<{{CPP_NAME}}> root) {";
-      if (parser_.file_identifier_.length())
-        code_ += "  fbb.Finish(root, {{STRUCT_NAME}}Identifier());";
-      else
-        code_ += "  fbb.Finish(root);";
-      code_ += "}";
-      code_ += "";
-
-      if (parser_.opts.generate_object_based_api) {
-        // A convenient root unpack function.
-        auto native_name =
-            NativeName(WrapInNameSpace(struct_def), &struct_def);
-        code_.SetValue("UNPACK_RETURN",
-                       GenTypeNativePtr(native_name, nullptr, false));
-        code_.SetValue("UNPACK_TYPE",
-                       GenTypeNativePtr(native_name, nullptr, true));
-
-        code_ += "inline {{UNPACK_RETURN}} UnPack{{STRUCT_NAME}}(";
-        code_ += "    const void *buf,";
-        code_ += "    const flatbuffers::resolver_function_t *res = nullptr) {";
-        code_ += "  return {{UNPACK_TYPE}}\\";
-        code_ += "(Get{{STRUCT_NAME}}(buf)->UnPack(res));";
-        code_ += "}";
-        code_ += "";
-      }
-    }
-
-    assert(cur_name_space_);
-    SetNameSpace(nullptr);
-
-    // Close the include guard.
-    code_ += "#endif  // " + include_guard;
-
-    const auto file_path = GeneratedFileName(path_, file_name_);
-    const auto final_code = code_.ToString();
-    return SaveFile(file_path.c_str(), final_code, false);
-  }
-
- private:
-  CodeWriter code_;
-
-  // This tracks the current namespace so we can insert namespace declarations.
-  const Namespace *cur_name_space_;
-
-  const Namespace *CurrentNameSpace() const { return cur_name_space_; }
-
-  // Translates a qualified name in flatbuffer text format to the same name in
-  // the equivalent C++ namespace.
-  static std::string TranslateNameSpace(const std::string &qualified_name) {
-    std::string cpp_qualified_name = qualified_name;
-    size_t start_pos = 0;
-    while ((start_pos = cpp_qualified_name.find(".", start_pos)) !=
-           std::string::npos) {
-      cpp_qualified_name.replace(start_pos, 1, "::");
-    }
-    return cpp_qualified_name;
-  }
-
-  void GenComment(const std::vector<std::string> &dc, const char *prefix = "") {
-    std::string text;
-    ::flatbuffers::GenComment(dc, &text, nullptr, prefix);
-    code_ += text + "\\";
-  }
-
-  // Return a C++ type from the table in idl.h
-  std::string GenTypeBasic(const Type &type, bool user_facing_type) const {
-    static const char *ctypename[] = {
-    #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE) \
-            #CTYPE,
-        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-    #undef FLATBUFFERS_TD
-    };
-    if (user_facing_type) {
-      if (type.enum_def) return WrapInNameSpace(*type.enum_def);
-      if (type.base_type == BASE_TYPE_BOOL) return "bool";
-    }
-    return ctypename[type.base_type];
-  }
-
-  // Return a C++ pointer type, specialized to the actual struct/table types,
-  // and vector element types.
-  std::string GenTypePointer(const Type &type) const {
-    switch (type.base_type) {
-      case BASE_TYPE_STRING: {
-        return "flatbuffers::String";
-      }
-      case BASE_TYPE_VECTOR: {
-        const auto type_name = GenTypeWire(type.VectorType(), "", false);
-        return "flatbuffers::Vector<" + type_name + ">";
-      }
-      case BASE_TYPE_STRUCT: {
-        return WrapInNameSpace(*type.struct_def);
-      }
-      case BASE_TYPE_UNION:
-      // fall through
-      default: {
-        return "void";
-      }
-    }
-  }
-
-  // Return a C++ type for any type (scalar/pointer) specifically for
-  // building a flatbuffer.
-  std::string GenTypeWire(const Type &type, const char *postfix,
-                          bool user_facing_type) const {
-    if (IsScalar(type.base_type)) {
-      return GenTypeBasic(type, user_facing_type) + postfix;
-    } else if (IsStruct(type)) {
-      return "const " + GenTypePointer(type) + " *";
-    } else {
-      return "flatbuffers::Offset<" + GenTypePointer(type) + ">" + postfix;
-    }
-  }
-
-  // Return a C++ type for any type (scalar/pointer) that reflects its
-  // serialized size.
-  std::string GenTypeSize(const Type &type) const {
-    if (IsScalar(type.base_type)) {
-      return GenTypeBasic(type, false);
-    } else if (IsStruct(type)) {
-      return GenTypePointer(type);
-    } else {
-      return "flatbuffers::uoffset_t";
-    }
-  }
-
-  // TODO(wvo): make this configurable.
-  static std::string NativeName(const std::string &name, const StructDef *sd) {
-    return sd && !sd->fixed ? name + "T" : name;
-  }
-
-  const std::string &PtrType(const FieldDef *field) {
-    auto attr = field ? field->attributes.Lookup("cpp_ptr_type") : nullptr;
-    return attr ? attr->constant : parser_.opts.cpp_object_api_pointer_type;
-  }
-
-  const std::string NativeString(const FieldDef *field) {
-    auto attr = field ? field->attributes.Lookup("cpp_str_type") : nullptr;
-    auto &ret = attr ? attr->constant : parser_.opts.cpp_object_api_string_type;
-    if (ret.empty()) {
-      return "std::string";
-    }
-    return ret;
-  }
-
-  std::string GenTypeNativePtr(const std::string &type, const FieldDef *field,
-                               bool is_constructor) {
-    auto &ptr_type = PtrType(field);
-    if (ptr_type != "naked") {
-      return ptr_type + "<" + type + ">";
-    } else if (is_constructor) {
-      return "";
-    } else {
-      return type + " *";
-    }
-  }
-
-  std::string GenPtrGet(const FieldDef &field) {
-    auto &ptr_type = PtrType(&field);
-    return ptr_type == "naked" ? "" : ".get()";
-  }
-
-  std::string GenTypeNative(const Type &type, bool invector,
-                            const FieldDef &field) {
-    switch (type.base_type) {
-      case BASE_TYPE_STRING: {
-        return NativeString(&field);
-      }
-      case BASE_TYPE_VECTOR: {
-        const auto type_name = GenTypeNative(type.VectorType(), true, field);
-        return "std::vector<" + type_name + ">";
-      }
-      case BASE_TYPE_STRUCT: {
-        auto type_name = WrapInNameSpace(*type.struct_def);
-        if (IsStruct(type)) {
-          auto native_type = type.struct_def->attributes.Lookup("native_type");
-          if (native_type) {
-            type_name = native_type->constant;
-          }
-          if (invector || field.native_inline) {
-            return type_name;
-          } else {
-            return GenTypeNativePtr(type_name, &field, false);
-          }
-        } else {
-          return GenTypeNativePtr(NativeName(type_name, type.struct_def),
-                                  &field, false);
-        }
-      }
-      case BASE_TYPE_UNION: {
-        return type.enum_def->name + "Union";
-      }
-      default: {
-        return GenTypeBasic(type, true);
-      }
-    }
-  }
-
-  // Return a C++ type for any type (scalar/pointer) specifically for
-  // using a flatbuffer.
-  std::string GenTypeGet(const Type &type, const char *afterbasic,
-                         const char *beforeptr, const char *afterptr,
-                         bool user_facing_type) {
-    if (IsScalar(type.base_type)) {
-      return GenTypeBasic(type, user_facing_type) + afterbasic;
-    } else {
-      return beforeptr + GenTypePointer(type) + afterptr;
-    }
-  }
-
-  std::string GenEnumDecl(const EnumDef &enum_def) const {
-    const IDLOptions &opts = parser_.opts;
-    return (opts.scoped_enums ? "enum class " : "enum ") + enum_def.name;
-  }
-
-  std::string GenEnumValDecl(const EnumDef &enum_def,
-                             const std::string &enum_val) const {
-    const IDLOptions &opts = parser_.opts;
-    return opts.prefixed_enums ? enum_def.name + "_" + enum_val : enum_val;
-  }
-
-  std::string GetEnumValUse(const EnumDef &enum_def,
-                            const EnumVal &enum_val) const {
-    const IDLOptions &opts = parser_.opts;
-    if (opts.scoped_enums) {
-      return enum_def.name + "::" + enum_val.name;
-    } else if (opts.prefixed_enums) {
-      return enum_def.name + "_" + enum_val.name;
-    } else {
-      return enum_val.name;
-    }
-  }
-
-  std::string StripUnionType(const std::string &name) {
-    return name.substr(0, name.size() - strlen(UnionTypeFieldSuffix()));
-  }
-
-  std::string GetUnionElement(const EnumVal &ev, bool wrap, bool actual_type,
-                              bool native_type = false) {
-    if (ev.union_type.base_type == BASE_TYPE_STRUCT) {
-      auto name = actual_type ? ev.union_type.struct_def->name : ev.name;
-      return wrap
-          ? WrapInNameSpace(ev.union_type.struct_def->defined_namespace, name)
-          : name;
-    } else if (ev.union_type.base_type == BASE_TYPE_STRING) {
-      return actual_type
-          ? (native_type ? "std::string" : "flatbuffers::String")
-          : ev.name;
-    } else {
-      assert(false);
-      return ev.name;
-    }
-  }
-
-  static std::string UnionVerifySignature(const EnumDef &enum_def) {
-    return "bool Verify" + enum_def.name +
-           "(flatbuffers::Verifier &verifier, const void *obj, " +
-           enum_def.name + " type)";
-  }
-
-  static std::string UnionVectorVerifySignature(const EnumDef &enum_def) {
-    return "bool Verify" + enum_def.name + "Vector" +
-           "(flatbuffers::Verifier &verifier, " +
-           "const flatbuffers::Vector<flatbuffers::Offset<void>> *values, " +
-           "const flatbuffers::Vector<uint8_t> *types)";
-  }
-
-  static std::string UnionUnPackSignature(const EnumDef &enum_def,
-                                          bool inclass) {
-    return (inclass ? "static " : "") +
-           std::string("void *") +
-           (inclass ? "" : enum_def.name + "Union::") +
-           "UnPack(const void *obj, " + enum_def.name +
-           " type, const flatbuffers::resolver_function_t *resolver)";
-  }
-
-  static std::string UnionPackSignature(const EnumDef &enum_def, bool inclass) {
-    return "flatbuffers::Offset<void> " +
-           (inclass ? "" : enum_def.name + "Union::") +
-           "Pack(flatbuffers::FlatBufferBuilder &_fbb, " +
-           "const flatbuffers::rehasher_function_t *_rehasher" +
-           (inclass ? " = nullptr" : "") + ") const";
-  }
-
-  static std::string TableCreateSignature(const StructDef &struct_def,
-                                          bool predecl) {
-    return "flatbuffers::Offset<" + struct_def.name + "> Create" +
-           struct_def.name  +
-           "(flatbuffers::FlatBufferBuilder &_fbb, const " +
-           NativeName(struct_def.name, &struct_def) +
-           " *_o, const flatbuffers::rehasher_function_t *_rehasher" +
-           (predecl ? " = nullptr" : "") + ")";
-  }
-
-  static std::string TablePackSignature(const StructDef &struct_def,
-                                        bool inclass) {
-    return std::string(inclass ? "static " : "") +
-           "flatbuffers::Offset<" + struct_def.name + "> " +
-           (inclass ? "" : struct_def.name + "::") +
-           "Pack(flatbuffers::FlatBufferBuilder &_fbb, " +
-           "const " + NativeName(struct_def.name, &struct_def) + "* _o, " +
-           "const flatbuffers::rehasher_function_t *_rehasher" +
-           (inclass ? " = nullptr" : "") + ")";
-  }
-
-  static std::string TableUnPackSignature(const StructDef &struct_def,
-                                          bool inclass) {
-    return NativeName(struct_def.name, &struct_def) + " *" +
-           (inclass ? "" : struct_def.name + "::") +
-           "UnPack(const flatbuffers::resolver_function_t *_resolver" +
-           (inclass ? " = nullptr" : "") + ") const";
-  }
-
-  static std::string TableUnPackToSignature(const StructDef &struct_def,
-                                            bool inclass) {
-    return "void " + (inclass ? "" : struct_def.name + "::") +
-           "UnPackTo(" + NativeName(struct_def.name, &struct_def) + " *" +
-           "_o, const flatbuffers::resolver_function_t *_resolver" +
-           (inclass ? " = nullptr" : "") + ") const";
-  }
-
-  // Generate an enum declaration and an enum string lookup table.
-  void GenEnum(const EnumDef &enum_def) {
-    code_.SetValue("ENUM_NAME", enum_def.name);
-    code_.SetValue("BASE_TYPE", GenTypeBasic(enum_def.underlying_type, false));
-    code_.SetValue("SEP", "");
-
-    GenComment(enum_def.doc_comment);
-    code_ += GenEnumDecl(enum_def) + "\\";
-    if (parser_.opts.scoped_enums)
-      code_ += " : {{BASE_TYPE}}\\";
-    code_ += " {";
-
-    int64_t anyv = 0;
-    const EnumVal *minv = nullptr, *maxv = nullptr;
-    for (auto it = enum_def.vals.vec.begin(); it != enum_def.vals.vec.end();
-         ++it) {
-      const auto &ev = **it;
-
-      GenComment(ev.doc_comment, "  ");
-      code_.SetValue("KEY", GenEnumValDecl(enum_def, ev.name));
-      code_.SetValue("VALUE", NumToString(ev.value));
-      code_ += "{{SEP}}  {{KEY}} = {{VALUE}}\\";
-      code_.SetValue("SEP", ",\n");
-
-      minv = !minv || minv->value > ev.value ? &ev : minv;
-      maxv = !maxv || maxv->value < ev.value ? &ev : maxv;
-      anyv |= ev.value;
-    }
-
-    if (parser_.opts.scoped_enums || parser_.opts.prefixed_enums) {
-      assert(minv && maxv);
-
-      code_.SetValue("SEP", ",\n");
-      if (enum_def.attributes.Lookup("bit_flags")) {
-        code_.SetValue("KEY", GenEnumValDecl(enum_def, "NONE"));
-        code_.SetValue("VALUE", "0");
-        code_ += "{{SEP}}  {{KEY}} = {{VALUE}}\\";
-
-        code_.SetValue("KEY", GenEnumValDecl(enum_def, "ANY"));
-        code_.SetValue("VALUE", NumToString(anyv));
-        code_ += "{{SEP}}  {{KEY}} = {{VALUE}}\\";
-      } else {  // MIN & MAX are useless for bit_flags
-        code_.SetValue("KEY",GenEnumValDecl(enum_def, "MIN"));
-        code_.SetValue("VALUE", GenEnumValDecl(enum_def, minv->name));
-        code_ += "{{SEP}}  {{KEY}} = {{VALUE}}\\";
-
-        code_.SetValue("KEY",GenEnumValDecl(enum_def, "MAX"));
-        code_.SetValue("VALUE", GenEnumValDecl(enum_def, maxv->name));
-        code_ += "{{SEP}}  {{KEY}} = {{VALUE}}\\";
-      }
-    }
-    code_ += "";
-    code_ += "};";
-
-    if (parser_.opts.scoped_enums && enum_def.attributes.Lookup("bit_flags")) {
-      code_ += "DEFINE_BITMASK_OPERATORS({{ENUM_NAME}}, {{BASE_TYPE}})";
-    }
-    code_ += "";
-
-    // Generate a generate string table for enum values.
-    // Problem is, if values are very sparse that could generate really big
-    // tables. Ideally in that case we generate a map lookup instead, but for
-    // the moment we simply don't output a table at all.
-    auto range =
-        enum_def.vals.vec.back()->value - enum_def.vals.vec.front()->value + 1;
-    // Average distance between values above which we consider a table
-    // "too sparse". Change at will.
-    static const int kMaxSparseness = 5;
-    if (range / static_cast<int64_t>(enum_def.vals.vec.size()) <
-        kMaxSparseness) {
-      code_ += "inline const char **EnumNames{{ENUM_NAME}}() {";
-      code_ += "  static const char *names[] = {";
-
-      auto val = enum_def.vals.vec.front()->value;
-      for (auto it = enum_def.vals.vec.begin(); it != enum_def.vals.vec.end();
-           ++it) {
-        const auto &ev = **it;
-        while (val++ != ev.value) {
-          code_ += "    \"\",";
-        }
-        code_ += "    \"" + ev.name + "\",";
-      }
-      code_ += "    nullptr";
-      code_ += "  };";
-
-      code_ += "  return names;";
-      code_ += "}";
-      code_ += "";
-
-      code_ += "inline const char *EnumName{{ENUM_NAME}}({{ENUM_NAME}} e) {";
-
-      code_ += "  const size_t index = static_cast<int>(e)\\";
-      if (enum_def.vals.vec.front()->value) {
-        auto vals = GetEnumValUse(enum_def, *enum_def.vals.vec.front());
-        code_ += " - static_cast<int>(" + vals + ")\\";
-      }
-      code_ += ";";
-
-      code_ += "  return EnumNames{{ENUM_NAME}}()[index];";
-      code_ += "}";
-      code_ += "";
-    }
-
-    // Generate type traits for unions to map from a type to union enum value.
-    if (enum_def.is_union && !enum_def.uses_type_aliases) {
-      for (auto it = enum_def.vals.vec.begin(); it != enum_def.vals.vec.end();
-        ++it) {
-        const auto &ev = **it;
-
-        if (it == enum_def.vals.vec.begin()) {
-          code_ += "template<typename T> struct {{ENUM_NAME}}Traits {";
-        }
-        else {
-          auto name = GetUnionElement(ev, true, true);
-          code_ += "template<> struct {{ENUM_NAME}}Traits<" + name + "> {";
-        }
-
-        auto value = GetEnumValUse(enum_def, ev);
-        code_ += "  static const {{ENUM_NAME}} enum_value = " + value + ";";
-        code_ += "};";
-        code_ += "";
-      }
-    }
-
-    if (parser_.opts.generate_object_based_api && enum_def.is_union) {
-      // Generate a union type
-      code_.SetValue("NAME", enum_def.name);
-      code_.SetValue("NONE",
-          GetEnumValUse(enum_def, *enum_def.vals.Lookup("NONE")));
-
-      code_ += "struct {{NAME}}Union {";
-      code_ += "  {{NAME}} type;";
-      code_ += "  void *value;";
-      code_ += "";
-      code_ += "  {{NAME}}Union() : type({{NONE}}), value(nullptr) {}";
-      code_ += "  {{NAME}}Union({{NAME}}Union&& u) FLATBUFFERS_NOEXCEPT :";
-      code_ += "    type({{NONE}}), value(nullptr)";
-      code_ += "    { std::swap(type, u.type); std::swap(value, u.value); }";
-      code_ += "  {{NAME}}Union(const {{NAME}}Union &) FLATBUFFERS_NOEXCEPT;";
-      code_ += "  {{NAME}}Union &operator=(const {{NAME}}Union &u) FLATBUFFERS_NOEXCEPT";
-      code_ += "    { {{NAME}}Union t(u); std::swap(type, t.type); std::swap(value, t.value); return *this; }";
-      code_ += "  {{NAME}}Union &operator=({{NAME}}Union &&u) FLATBUFFERS_NOEXCEPT";
-      code_ += "    { std::swap(type, u.type); std::swap(value, u.value); return *this; }";
-      code_ += "  ~{{NAME}}Union() { Reset(); }";
-      code_ += "";
-      code_ += "  void Reset();";
-      code_ += "";
-      if (!enum_def.uses_type_aliases) {
-        code_ += "  template <typename T>";
-        code_ += "  void Set(T&& val) {";
-        code_ += "    Reset();";
-        code_ += "    type = {{NAME}}Traits<typename T::TableType>::enum_value;";
-        code_ += "    if (type != {{NONE}}) {";
-        code_ += "      value = new T(std::forward<T>(val));";
-        code_ += "    }";
-        code_ += "  }";
-        code_ += "";
-      }
-      code_ += "  " + UnionUnPackSignature(enum_def, true) + ";";
-      code_ += "  " + UnionPackSignature(enum_def, true) + ";";
-      code_ += "";
-
-      for (auto it = enum_def.vals.vec.begin(); it != enum_def.vals.vec.end();
-           ++it) {
-        const auto &ev = **it;
-        if (!ev.value) {
-          continue;
-        }
-
-        const auto native_type =
-            NativeName(GetUnionElement(ev, true, true, true),
-                       ev.union_type.struct_def);
-        code_.SetValue("NATIVE_TYPE", native_type);
-        code_.SetValue("NATIVE_NAME", ev.name);
-        code_.SetValue("NATIVE_ID", GetEnumValUse(enum_def, ev));
-
-        code_ += "  {{NATIVE_TYPE}} *As{{NATIVE_NAME}}() {";
-        code_ += "    return type == {{NATIVE_ID}} ?";
-        code_ += "      reinterpret_cast<{{NATIVE_TYPE}} *>(value) : nullptr;";
-        code_ += "  }";
-      }
-      code_ += "};";
-      code_ += "";
-    }
-
-    if (enum_def.is_union) {
-      code_ += UnionVerifySignature(enum_def) + ";";
-      code_ += UnionVectorVerifySignature(enum_def) + ";";
-      code_ += "";
-    }
-  }
-
-  void GenUnionPost(const EnumDef &enum_def) {
-    // Generate a verifier function for this union that can be called by the
-    // table verifier functions. It uses a switch case to select a specific
-    // verifier function to call, this should be safe even if the union type
-    // has been corrupted, since the verifiers will simply fail when called
-    // on the wrong type.
-    code_.SetValue("ENUM_NAME", enum_def.name);
-
-    code_ += "inline " + UnionVerifySignature(enum_def) + " {";
-    code_ += "  switch (type) {";
-    for (auto it = enum_def.vals.vec.begin(); it != enum_def.vals.vec.end();
-         ++it) {
-      const auto &ev = **it;
-      code_.SetValue("LABEL", GetEnumValUse(enum_def, ev));
-
-      if (ev.value) {
-        code_.SetValue("TYPE", GetUnionElement(ev, true, true));
-        code_ += "    case {{LABEL}}: {";
-        auto getptr =
-            "      auto ptr = reinterpret_cast<const {{TYPE}} *>(obj);";
-        if (ev.union_type.base_type == BASE_TYPE_STRUCT) {
-          if (ev.union_type.struct_def->fixed) {
-            code_ += "      return true;";
-          } else {
-            code_ += getptr;
-            code_ += "      return verifier.VerifyTable(ptr);";
-          }
-        } else if (ev.union_type.base_type == BASE_TYPE_STRING) {
-          code_ += getptr;
-          code_ += "      return verifier.Verify(ptr);";
-        } else {
-          assert(false);
-        }
-        code_ += "    }";
-      } else {
-        code_ += "    case {{LABEL}}: {";
-        code_ += "      return true;";  // "NONE" enum value.
-        code_ += "    }";
-      }
-    }
-    code_ += "    default: return false;";
-    code_ += "  }";
-    code_ += "}";
-    code_ += "";
-
-    code_ += "inline " + UnionVectorVerifySignature(enum_def) + " {";
-    code_ += "  if (values->size() != types->size()) return false;";
-    code_ += "  for (flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {";
-    code_ += "    if (!Verify" + enum_def.name + "(";
-    code_ += "        verifier,  values->Get(i), types->GetEnum<" + enum_def.name + ">(i))) {";
-    code_ += "      return false;";
-    code_ += "    }";
-    code_ += "  }";
-    code_ += "  return true;";
-    code_ += "}";
-    code_ += "";
-
-    if (parser_.opts.generate_object_based_api) {
-      // Generate union Unpack() and Pack() functions.
-      code_ += "inline " + UnionUnPackSignature(enum_def, false) + " {";
-      code_ += "  switch (type) {";
-      for (auto it = enum_def.vals.vec.begin(); it != enum_def.vals.vec.end();
-           ++it) {
-        const auto &ev = **it;
-        if (!ev.value) {
-          continue;
-        }
-
-        code_.SetValue("LABEL", GetEnumValUse(enum_def, ev));
-        code_.SetValue("TYPE", GetUnionElement(ev, true, true));
-        code_ += "    case {{LABEL}}: {";
-        code_ += "      auto ptr = reinterpret_cast<const {{TYPE}} *>(obj);";
-        if (ev.union_type.base_type == BASE_TYPE_STRUCT) {
-          if (ev.union_type.struct_def->fixed) {
-            code_ += "      return new " +
-                     WrapInNameSpace(*ev.union_type.struct_def) + "(*ptr);";
-          } else {
-            code_ += "      return ptr->UnPack(resolver);";
-          }
-        } else if (ev.union_type.base_type == BASE_TYPE_STRING) {
-          code_ += "      return new std::string(ptr->c_str(), ptr->size());";
-        } else {
-          assert(false);
-        }
-        code_ += "    }";
-      }
-      code_ += "    default: return nullptr;";
-      code_ += "  }";
-      code_ += "}";
-      code_ += "";
-
-      code_ += "inline " + UnionPackSignature(enum_def, false) + " {";
-      code_ += "  switch (type) {";
-      for (auto it = enum_def.vals.vec.begin(); it != enum_def.vals.vec.end();
-           ++it) {
-        auto &ev = **it;
-        if (!ev.value) {
-          continue;
-        }
-
-        code_.SetValue("LABEL", GetEnumValUse(enum_def, ev));
-        code_.SetValue("TYPE", NativeName(GetUnionElement(ev, true, true, true),
-                                          ev.union_type.struct_def));
-        code_.SetValue("NAME", GetUnionElement(ev, false, true));
-        code_ += "    case {{LABEL}}: {";
-        code_ += "      auto ptr = reinterpret_cast<const {{TYPE}} *>(value);";
-        if (ev.union_type.base_type == BASE_TYPE_STRUCT) {
-          if (ev.union_type.struct_def->fixed) {
-            code_ += "      return _fbb.CreateStruct(*ptr).Union();";
-          } else {
-            code_ +=
-                "      return Create{{NAME}}(_fbb, ptr, _rehasher).Union();";
-          }
-        } else if (ev.union_type.base_type == BASE_TYPE_STRING) {
-          code_ += "      return _fbb.CreateString(*ptr).Union();";
-        } else {
-          assert(false);
-        }
-        code_ += "    }";
-      }
-      code_ += "    default: return 0;";
-      code_ += "  }";
-      code_ += "}";
-      code_ += "";
-
-      // Union copy constructor
-      code_ += "inline {{ENUM_NAME}}Union::{{ENUM_NAME}}Union(const "
-               "{{ENUM_NAME}}Union &u) FLATBUFFERS_NOEXCEPT : type(u.type), "
-               "value(nullptr) {";
-      code_ += "  switch (type) {";
-      for (auto it = enum_def.vals.vec.begin(); it != enum_def.vals.vec.end();
-           ++it) {
-        const auto &ev = **it;
-        if (!ev.value) {
-          continue;
-        }
-        code_.SetValue("LABEL", GetEnumValUse(enum_def, ev));
-        code_.SetValue("TYPE", NativeName(GetUnionElement(ev, true, true, true),
-                                          ev.union_type.struct_def));
-        code_ += "    case {{LABEL}}: {";
-        bool copyable = true;
-        if (ev.union_type.base_type == BASE_TYPE_STRUCT) {
-          // Don't generate code to copy if table is not copyable.
-          // TODO(wvo): make tables copyable instead.
-          for (auto fit = ev.union_type.struct_def->fields.vec.begin();
-               fit != ev.union_type.struct_def->fields.vec.end(); ++fit) {
-            const auto &field = **fit;
-            if (!field.deprecated && field.value.type.struct_def) {
-              copyable = false;
-              break;
-            }
-          }
-        }
-        if (copyable) {
-          code_ += "      value = new {{TYPE}}(*reinterpret_cast<{{TYPE}} *>"
-                   "(u.value));";
-        } else {
-          code_ += "      assert(false);  // {{TYPE}} not copyable.";
-        }
-        code_ += "      break;";
-        code_ += "    }";
-      }
-      code_ += "    default:";
-      code_ += "      break;";
-      code_ += "  }";
-      code_ += "}";
-      code_ += "";
-
-      // Union Reset() function.
-      code_.SetValue("NONE",
-          GetEnumValUse(enum_def, *enum_def.vals.Lookup("NONE")));
-
-      code_ += "inline void {{ENUM_NAME}}Union::Reset() {";
-      code_ += "  switch (type) {";
-      for (auto it = enum_def.vals.vec.begin(); it != enum_def.vals.vec.end();
-           ++it) {
-        const auto &ev = **it;
-        if (!ev.value) {
-          continue;
-        }
-        code_.SetValue("LABEL", GetEnumValUse(enum_def, ev));
-        code_.SetValue("TYPE", NativeName(GetUnionElement(ev, true, true, true),
-                                          ev.union_type.struct_def));
-        code_ += "    case {{LABEL}}: {";
-        code_ += "      auto ptr = reinterpret_cast<{{TYPE}} *>(value);";
-        code_ += "      delete ptr;";
-        code_ += "      break;";
-        code_ += "    }";
-      }
-      code_ += "    default: break;";
-      code_ += "  }";
-      code_ += "  value = nullptr;";
-      code_ += "  type = {{NONE}};";
-      code_ += "}";
-      code_ += "";
-    }
-  }
-
-  // Generates a value with optionally a cast applied if the field has a
-  // different underlying type from its interface type (currently only the
-  // case for enums. "from" specify the direction, true meaning from the
-  // underlying type to the interface type.
-  std::string GenUnderlyingCast(const FieldDef &field, bool from,
-                                const std::string &val) {
-    if (from && field.value.type.base_type == BASE_TYPE_BOOL) {
-      return val + " != 0";
-    } else if ((field.value.type.enum_def &&
-                IsScalar(field.value.type.base_type)) ||
-               field.value.type.base_type == BASE_TYPE_BOOL) {
-      return "static_cast<" + GenTypeBasic(field.value.type, from) + ">(" +
-             val + ")";
-    } else {
-      return val;
-    }
-  }
-
-  std::string GenFieldOffsetName(const FieldDef &field) {
-    std::string uname = field.name;
-    std::transform(uname.begin(), uname.end(), uname.begin(), ToUpper);
-    return "VT_" + uname;
-  }
-
-  void GenFullyQualifiedNameGetter(const std::string &name) {
-    if (!parser_.opts.generate_name_strings) {
-      return;
-    }
-
-    auto fullname = parser_.namespaces_.back()->GetFullyQualifiedName(name);
-    code_.SetValue("NAME", fullname);
-    code_.SetValue("CONSTEXPR", "FLATBUFFERS_CONSTEXPR");
-
-    code_ += "  static {{CONSTEXPR}} const char *GetFullyQualifiedName() {";
-    code_ += "    return \"{{NAME}}\";";
-    code_ += "  }";
-  }
-
-  std::string GenDefaultConstant(const FieldDef &field) {
-    return field.value.type.base_type == BASE_TYPE_FLOAT
-               ? field.value.constant + "f"
-               : field.value.constant;
-  }
-
-  std::string GetDefaultScalarValue(const FieldDef &field) {
-    if (field.value.type.enum_def && IsScalar(field.value.type.base_type)) {
-      auto ev = field.value.type.enum_def->ReverseLookup(
-          static_cast<int>(StringToInt(field.value.constant.c_str())), false);
-      if (ev) {
-        return WrapInNameSpace(
-            field.value.type.enum_def->defined_namespace,
-            GetEnumValUse(*field.value.type.enum_def, *ev));
-      } else {
-        return GenUnderlyingCast(field, true, field.value.constant);
-      }
-    } else if (field.value.type.base_type == BASE_TYPE_BOOL) {
-      return field.value.constant == "0" ? "false" : "true";
-    } else {
-      return GenDefaultConstant(field);
-    }
-  }
-
-  void GenParam(const FieldDef &field, bool direct, const char *prefix) {
-    code_.SetValue("PRE", prefix);
-    code_.SetValue("PARAM_NAME", field.name);
-    if (direct && field.value.type.base_type == BASE_TYPE_STRING) {
-      code_.SetValue("PARAM_TYPE", "const char *");
-      code_.SetValue("PARAM_VALUE", "nullptr");
-    } else if (direct && field.value.type.base_type == BASE_TYPE_VECTOR) {
-      auto type = GenTypeWire(field.value.type.VectorType(), "", false);
-      code_.SetValue("PARAM_TYPE", "const std::vector<" + type + "> *");
-      code_.SetValue("PARAM_VALUE", "nullptr");
-    } else {
-      code_.SetValue("PARAM_TYPE", GenTypeWire(field.value.type, " ", true));
-      code_.SetValue("PARAM_VALUE", GetDefaultScalarValue(field));
-    }
-    code_ += "{{PRE}}{{PARAM_TYPE}}{{PARAM_NAME}} = {{PARAM_VALUE}}\\";
-  }
-
-  // Generate a member, including a default value for scalars and raw pointers.
-  void GenMember(const FieldDef &field) {
-    if (!field.deprecated &&  // Deprecated fields won't be accessible.
-        field.value.type.base_type != BASE_TYPE_UTYPE &&
-        (field.value.type.base_type != BASE_TYPE_VECTOR ||
-         field.value.type.element != BASE_TYPE_UTYPE)) {
-      auto type = GenTypeNative(field.value.type, false, field);
-      auto cpp_type = field.attributes.Lookup("cpp_type");
-      auto full_type = (cpp_type ? cpp_type->constant + " *" : type + " ");
-      code_.SetValue("FIELD_TYPE", full_type);
-      code_.SetValue("FIELD_NAME", field.name);
-      code_ += "  {{FIELD_TYPE}}{{FIELD_NAME}};";
-    }
-  }
-
-  // Generate the default constructor for this struct. Properly initialize all
-  // scalar members with default values.
-  void GenDefaultConstructor(const StructDef& struct_def) {
-    std::string initializer_list;
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      const auto &field = **it;
-      if (!field.deprecated &&  // Deprecated fields won't be accessible.
-          field.value.type.base_type != BASE_TYPE_UTYPE) {
-        auto cpp_type = field.attributes.Lookup("cpp_type");
-        // Scalar types get parsed defaults, raw pointers get nullptrs.
-        if (IsScalar(field.value.type.base_type)) {
-          if (!initializer_list.empty()) {
-            initializer_list += ",\n        ";
-          }
-          initializer_list += field.name;
-          initializer_list += "(" + GetDefaultScalarValue(field) + ")";
-        } else if (field.value.type.base_type == BASE_TYPE_STRUCT) {
-          if (IsStruct(field.value.type)) {
-            auto native_default = field.attributes.Lookup("native_default");
-            if (native_default) {
-              if (!initializer_list.empty()) {
-                initializer_list += ",\n        ";
-              }
-              initializer_list +=
-                  field.name + "(" + native_default->constant + ")";
-            }
-          }
-        } else if (cpp_type) {
-          if (!initializer_list.empty()) {
-            initializer_list += ",\n        ";
-          }
-          initializer_list += field.name + "(0)";
-        }
-      }
-    }
-    if (!initializer_list.empty()) {
-      initializer_list = "\n      : " + initializer_list;
-    }
-
-    code_.SetValue("NATIVE_NAME", NativeName(struct_def.name, &struct_def));
-    code_.SetValue("INIT_LIST", initializer_list);
-
-    code_ += "  {{NATIVE_NAME}}(){{INIT_LIST}} {";
-    code_ += "  }";
-  }
-
-  void GenNativeTable(const StructDef &struct_def) {
-    const auto native_name = NativeName(struct_def.name, &struct_def);
-    code_.SetValue("STRUCT_NAME", struct_def.name);
-    code_.SetValue("NATIVE_NAME", native_name);
-
-    // Generate a C++ object that can hold an unpacked version of this table.
-    code_ += "struct {{NATIVE_NAME}} : public flatbuffers::NativeTable {";
-    code_ += "  typedef {{STRUCT_NAME}} TableType;";
-    GenFullyQualifiedNameGetter(native_name);
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      GenMember(**it);
-    }
-    GenDefaultConstructor(struct_def);
-    code_ += "};";
-    code_ += "";
-  }
-
-  // Generate the code to call the appropriate Verify function(s) for a field.
-  void GenVerifyCall(const FieldDef &field, const char* prefix) {
-    code_.SetValue("PRE", prefix);
-    code_.SetValue("NAME", field.name);
-    code_.SetValue("REQUIRED", field.required ? "Required" : "");
-    code_.SetValue("SIZE", GenTypeSize(field.value.type));
-    code_.SetValue("OFFSET", GenFieldOffsetName(field));
-    code_ += "{{PRE}}VerifyField{{REQUIRED}}<{{SIZE}}>(verifier, {{OFFSET}})\\";
-
-    switch (field.value.type.base_type) {
-      case BASE_TYPE_UNION: {
-        code_.SetValue("ENUM_NAME", field.value.type.enum_def->name);
-        code_.SetValue("SUFFIX", UnionTypeFieldSuffix());
-        code_ += "{{PRE}}Verify{{ENUM_NAME}}(verifier, {{NAME}}(), "
-                "{{NAME}}{{SUFFIX}}())\\";
-        break;
-      }
-      case BASE_TYPE_STRUCT: {
-        if (!field.value.type.struct_def->fixed) {
-          code_ += "{{PRE}}verifier.VerifyTable({{NAME}}())\\";
-        }
-        break;
-      }
-      case BASE_TYPE_STRING: {
-        code_ += "{{PRE}}verifier.Verify({{NAME}}())\\";
-        break;
-      }
-      case BASE_TYPE_VECTOR: {
-        code_ += "{{PRE}}verifier.Verify({{NAME}}())\\";
-
-        switch (field.value.type.element) {
-          case BASE_TYPE_STRING: {
-            code_ += "{{PRE}}verifier.VerifyVectorOfStrings({{NAME}}())\\";
-            break;
-          }
-          case BASE_TYPE_STRUCT: {
-            if (!field.value.type.struct_def->fixed) {
-              code_ += "{{PRE}}verifier.VerifyVectorOfTables({{NAME}}())\\";
-            }
-            break;
-          }
-          case BASE_TYPE_UNION: {
-            code_.SetValue("ENUM_NAME", field.value.type.enum_def->name);
-            code_ += "{{PRE}}Verify{{ENUM_NAME}}Vector(verifier, {{NAME}}(), {{NAME}}_type())\\";
-            break;
-          }
-          default:
-            break;
-        }
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-
-  // Generate an accessor struct, builder structs & function for a table.
-  void GenTable(const StructDef &struct_def) {
-    if (parser_.opts.generate_object_based_api) {
-      GenNativeTable(struct_def);
-    }
-
-    // Generate an accessor struct, with methods of the form:
-    // type name() const { return GetField<type>(offset, defaultval); }
-    GenComment(struct_def.doc_comment);
-
-    code_.SetValue("STRUCT_NAME", struct_def.name);
-    code_ += "struct {{STRUCT_NAME}} FLATBUFFERS_FINAL_CLASS"
-            " : private flatbuffers::Table {";
-    if (parser_.opts.generate_object_based_api) {
-      code_ += "  typedef {{NATIVE_NAME}} NativeTableType;";
-    }
-
-    GenFullyQualifiedNameGetter(struct_def.name);
-
-    // Generate field id constants.
-    if (struct_def.fields.vec.size() > 0) {
-      // We need to add a trailing comma to all elements except the last one as
-      // older versions of gcc complain about this.
-      code_.SetValue("SEP", "");
-      code_ += "  enum {";
-      for (auto it = struct_def.fields.vec.begin();
-           it != struct_def.fields.vec.end(); ++it) {
-        const auto &field = **it;
-        if (field.deprecated) {
-          // Deprecated fields won't be accessible.
-          continue;
-        }
-
-        code_.SetValue("OFFSET_NAME", GenFieldOffsetName(field));
-        code_.SetValue("OFFSET_VALUE", NumToString(field.value.offset));
-        code_ += "{{SEP}}    {{OFFSET_NAME}} = {{OFFSET_VALUE}}\\";
-        code_.SetValue("SEP", ",\n");
-      }
-      code_ += "";
-      code_ += "  };";
-    }
-
-    // Generate the accessors.
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      const auto &field = **it;
-      if (field.deprecated) {
-        // Deprecated fields won't be accessible.
-        continue;
-      }
-
-      const bool is_struct = IsStruct(field.value.type);
-      const bool is_scalar = IsScalar(field.value.type.base_type);
-      code_.SetValue("FIELD_NAME", field.name);
-
-      // Call a different accessor for pointers, that indirects.
-      std::string accessor = "";
-      if (is_scalar) {
-        accessor = "GetField<";
-      } else if (is_struct) {
-        accessor = "GetStruct<";
-      } else {
-        accessor = "GetPointer<";
-      }
-      auto offset_str = GenFieldOffsetName(field);
-      auto offset_type =
-          GenTypeGet(field.value.type, "", "const ", " *", false);
-
-      auto call = accessor + offset_type + ">(" + offset_str;
-      // Default value as second arg for non-pointer types.
-      if (is_scalar) {
-        call += ", " + GenDefaultConstant(field);
-      }
-      call += ")";
-
-      GenComment(field.doc_comment, "  ");
-      code_.SetValue("FIELD_TYPE",
-          GenTypeGet(field.value.type, " ", "const ", " *", true));
-      code_.SetValue("FIELD_VALUE", GenUnderlyingCast(field, true, call));
-
-      code_ += "  {{FIELD_TYPE}}{{FIELD_NAME}}() const {";
-      code_ += "    return {{FIELD_VALUE}};";
-      code_ += "  }";
-
-      if (field.value.type.base_type == BASE_TYPE_UNION) {
-        auto u = field.value.type.enum_def;
-
-        code_ += "  template<typename T> "
-                "const T *{{FIELD_NAME}}_as() const;";
-
-        for (auto u_it = u->vals.vec.begin();
-             u_it != u->vals.vec.end(); ++u_it) {
-          auto &ev = **u_it;
-          if (ev.union_type.base_type == BASE_TYPE_NONE) {
-            continue;
-          }
-          auto full_struct_name = GetUnionElement(ev, true, true);
-
-          // @TODO: Mby make this decisions more universal? How?
-          code_.SetValue("U_GET_TYPE", field.name + UnionTypeFieldSuffix());
-          code_.SetValue("U_ELEMENT_TYPE", WrapInNameSpace(
-                         u->defined_namespace, GetEnumValUse(*u, ev)));
-          code_.SetValue("U_FIELD_TYPE", "const " + full_struct_name + " *");
-          code_.SetValue("U_FIELD_NAME",
-                         field.name + "_as_" + ev.name);
-
-          // `const Type *union_name_asType() const` accessor.
-          code_ += "  {{U_FIELD_TYPE}}{{U_FIELD_NAME}}() const {";
-          code_ += "    return {{U_GET_TYPE}}() == {{U_ELEMENT_TYPE}} ? "
-                  "static_cast<{{U_FIELD_TYPE}}>({{FIELD_NAME}}()) "
-                  ": nullptr;";
-          code_ += "  }";
-        }
-      }
-
-      if (parser_.opts.mutable_buffer) {
-        if (is_scalar) {
-          const auto type = GenTypeWire(field.value.type, "", false);
-          code_.SetValue("SET_FN", "SetField<" + type + ">");
-          code_.SetValue("OFFSET_NAME", offset_str);
-          code_.SetValue("FIELD_TYPE", GenTypeBasic(field.value.type, true));
-          code_.SetValue("FIELD_VALUE",
-                        GenUnderlyingCast(field, false, "_" + field.name));
-          code_.SetValue("DEFAULT_VALUE", GenDefaultConstant(field));
-
-          code_ += "  bool mutate_{{FIELD_NAME}}({{FIELD_TYPE}} "
-                  "_{{FIELD_NAME}}) {";
-          code_ += "    return {{SET_FN}}({{OFFSET_NAME}}, {{FIELD_VALUE}}, {{DEFAULT_VALUE}});";
-          code_ += "  }";
-        } else {
-          auto type = GenTypeGet(field.value.type, " ", "", " *", true);
-          auto underlying = accessor + type + ">(" + offset_str + ")";
-          code_.SetValue("FIELD_TYPE", type);
-          code_.SetValue("FIELD_VALUE",
-                        GenUnderlyingCast(field, true, underlying));
-
-          code_ += "  {{FIELD_TYPE}}mutable_{{FIELD_NAME}}() {";
-          code_ += "    return {{FIELD_VALUE}};";
-          code_ += "  }";
-        }
-      }
-
-      auto nested = field.attributes.Lookup("nested_flatbuffer");
-      if (nested) {
-        std::string qualified_name =
-            parser_.namespaces_.back()->GetFullyQualifiedName(
-                nested->constant);
-        auto nested_root = parser_.structs_.Lookup(qualified_name);
-        assert(nested_root);  // Guaranteed to exist by parser.
-        (void)nested_root;
-        code_.SetValue("CPP_NAME", TranslateNameSpace(qualified_name));
-
-        code_ += "  const {{CPP_NAME}} *{{FIELD_NAME}}_nested_root() const {";
-        code_ += "    const uint8_t* data = {{FIELD_NAME}}()->Data();";
-        code_ += "    return flatbuffers::GetRoot<{{CPP_NAME}}>(data);";
-        code_ += "  }";
-      }
-
-      // Generate a comparison function for this field if it is a key.
-      if (field.key) {
-        const bool is_string = (field.value.type.base_type == BASE_TYPE_STRING);
-
-        code_ += "  bool KeyCompareLessThan(const {{STRUCT_NAME}} *o) const {";
-        if (is_string) {
-          code_ += "    return *{{FIELD_NAME}}() < *o->{{FIELD_NAME}}();";
-        } else {
-          code_ += "    return {{FIELD_NAME}}() < o->{{FIELD_NAME}}();";
-        }
-        code_ += "  }";
-
-        if (is_string) {
-          code_ += "  int KeyCompareWithValue(const char *val) const {";
-          code_ += "    return strcmp({{FIELD_NAME}}()->c_str(), val);";
-          code_ += "  }";
-        } else {
-          auto type = GenTypeBasic(field.value.type, false);
-          if (parser_.opts.scoped_enums && field.value.type.enum_def &&
-              IsScalar(field.value.type.base_type)) {
-            type = GenTypeGet(field.value.type, " ", "const ", " *", true);
-          }
-
-          code_.SetValue("KEY_TYPE", type);
-          code_ += "  int KeyCompareWithValue({{KEY_TYPE}} val) const {";
-          code_ += "    const auto key = {{FIELD_NAME}}();";
-          code_ += "    if (key < val) {";
-          code_ += "      return -1;";
-          code_ += "    } else if (key > val) {";
-          code_ += "      return 1;";
-          code_ += "    } else {";
-          code_ += "      return 0;";
-          code_ += "    }";
-          code_ += "  }";
-        }
-      }
-    }
-
-    // Generate a verifier function that can check a buffer from an untrusted
-    // source will never cause reads outside the buffer.
-    code_ += "  bool Verify(flatbuffers::Verifier &verifier) const {";
-    code_ += "    return VerifyTableStart(verifier)\\";
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      const auto &field = **it;
-      if (field.deprecated) {
-        continue;
-      }
-      GenVerifyCall(field, " &&\n           ");
-    }
-
-    code_ += " &&\n           verifier.EndTable();";
-    code_ += "  }";
-
-    if (parser_.opts.generate_object_based_api) {
-      // Generate the UnPack() pre declaration.
-      code_ += "  " + TableUnPackSignature(struct_def, true) + ";";
-      code_ += "  " + TableUnPackToSignature(struct_def, true) + ";";
-      code_ += "  " + TablePackSignature(struct_def, true) + ";";
-    }
-
-    code_ += "};";  // End of table.
-    code_ += "";
-
-    // Explicit specializations for union accessors
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      const auto &field = **it;
-      if (field.deprecated ||
-          field.value.type.base_type != BASE_TYPE_UNION) {
-        continue;
-      }
-
-      auto u = field.value.type.enum_def;
-      if (u->uses_type_aliases) continue;
-
-      code_.SetValue("FIELD_NAME", field.name);
-
-      for (auto u_it = u->vals.vec.begin();
-           u_it != u->vals.vec.end(); ++u_it) {
-        auto &ev = **u_it;
-        if (ev.union_type.base_type == BASE_TYPE_NONE) {
-          continue;
-        }
-
-        auto full_struct_name = GetUnionElement(ev, true, true);
-
-        code_.SetValue("U_ELEMENT_TYPE", WrapInNameSpace(
-                       u->defined_namespace, GetEnumValUse(*u, ev)));
-        code_.SetValue("U_FIELD_TYPE", "const " + full_struct_name + " *");
-        code_.SetValue("U_ELEMENT_NAME", full_struct_name);
-        code_.SetValue("U_FIELD_NAME",
-                       field.name + "_as_" + ev.name);
-
-        // `template<> const T *union_name_as<T>() const` accessor.
-        code_ += "template<> "
-                "inline {{U_FIELD_TYPE}}{{STRUCT_NAME}}::{{FIELD_NAME}}_as"
-                "<{{U_ELEMENT_NAME}}>() const {";
-        code_ += "  return {{U_FIELD_NAME}}();";
-        code_ += "}";
-        code_ += "";
-      }
-    }
-
-    GenBuilders(struct_def);
-
-    if (parser_.opts.generate_object_based_api) {
-      // Generate a pre-declaration for a CreateX method that works with an
-      // unpacked C++ object.
-      code_ += TableCreateSignature(struct_def, true) + ";";
-      code_ += "";
-    }
-  }
-
-  void GenBuilders(const StructDef &struct_def) {
-    code_.SetValue("STRUCT_NAME", struct_def.name);
-
-    // Generate a builder struct:
-    code_ += "struct {{STRUCT_NAME}}Builder {";
-    code_ += "  flatbuffers::FlatBufferBuilder &fbb_;";
-    code_ += "  flatbuffers::uoffset_t start_;";
-
-    bool has_string_or_vector_fields = false;
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      const auto &field = **it;
-      if (!field.deprecated) {
-        const bool is_scalar = IsScalar(field.value.type.base_type);
-        const bool is_string = field.value.type.base_type == BASE_TYPE_STRING;
-        const bool is_vector = field.value.type.base_type == BASE_TYPE_VECTOR;
-        if (is_string || is_vector) {
-          has_string_or_vector_fields = true;
-        }
-
-        std::string offset = GenFieldOffsetName(field);
-        std::string name = GenUnderlyingCast(field, false, field.name);
-        std::string value = is_scalar ? GenDefaultConstant(field) : "";
-
-        // Generate accessor functions of the form:
-        // void add_name(type name) {
-        //   fbb_.AddElement<type>(offset, name, default);
-        // }
-        code_.SetValue("FIELD_NAME", field.name);
-        code_.SetValue("FIELD_TYPE", GenTypeWire(field.value.type, " ", true));
-        code_.SetValue("ADD_OFFSET", struct_def.name + "::" + offset);
-        code_.SetValue("ADD_NAME", name);
-        code_.SetValue("ADD_VALUE", value);
-        if (is_scalar) {
-          const auto type = GenTypeWire(field.value.type, "", false);
-          code_.SetValue("ADD_FN", "AddElement<" + type + ">");
-        } else if (IsStruct(field.value.type)) {
-          code_.SetValue("ADD_FN", "AddStruct");
-        } else {
-          code_.SetValue("ADD_FN", "AddOffset");
-        }
-
-        code_ += "  void add_{{FIELD_NAME}}({{FIELD_TYPE}}{{FIELD_NAME}}) {";
-          code_ += "    fbb_.{{ADD_FN}}(\\";
-        if (is_scalar) {
-          code_ += "{{ADD_OFFSET}}, {{ADD_NAME}}, {{ADD_VALUE}});";
-        } else {
-          code_ += "{{ADD_OFFSET}}, {{ADD_NAME}});";
-        }
-        code_ += "  }";
-      }
-    }
-
-    // Builder constructor
-    code_ += "  {{STRUCT_NAME}}Builder(flatbuffers::FlatBufferBuilder &_fbb)";
-    code_ += "        : fbb_(_fbb) {";
-    code_ += "    start_ = fbb_.StartTable();";
-    code_ += "  }";
-
-    // Assignment operator;
-    code_ += "  {{STRUCT_NAME}}Builder &operator="
-             "(const {{STRUCT_NAME}}Builder &);";
-
-    // Finish() function.
-    auto num_fields = NumToString(struct_def.fields.vec.size());
-    code_ += "  flatbuffers::Offset<{{STRUCT_NAME}}> Finish() {";
-    code_ += "    const auto end = fbb_.EndTable(start_, " + num_fields + ");";
-    code_ += "    auto o = flatbuffers::Offset<{{STRUCT_NAME}}>(end);";
-
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      const auto &field = **it;
-      if (!field.deprecated && field.required) {
-        code_.SetValue("FIELD_NAME", field.name);
-        code_.SetValue("OFFSET_NAME", GenFieldOffsetName(field));
-        code_ += "    fbb_.Required(o, {{STRUCT_NAME}}::{{OFFSET_NAME}});";
-      }
-    }
-    code_ += "    return o;";
-    code_ += "  }";
-    code_ += "};";
-    code_ += "";
-
-    // Generate a convenient CreateX function that uses the above builder
-    // to create a table in one go.
-    code_ += "inline flatbuffers::Offset<{{STRUCT_NAME}}> "
-            "Create{{STRUCT_NAME}}(";
-    code_ += "    flatbuffers::FlatBufferBuilder &_fbb\\";
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      const auto &field = **it;
-      if (!field.deprecated) {
-        GenParam(field, false, ",\n    ");
-      }
-    }
-    code_ += ") {";
-
-    code_ += "  {{STRUCT_NAME}}Builder builder_(_fbb);";
-    for (size_t size = struct_def.sortbysize ? sizeof(largest_scalar_t) : 1;
-         size; size /= 2) {
-      for (auto it = struct_def.fields.vec.rbegin();
-           it != struct_def.fields.vec.rend(); ++it) {
-        const auto &field = **it;
-        if (!field.deprecated && (!struct_def.sortbysize ||
-                                  size == SizeOf(field.value.type.base_type))) {
-          code_.SetValue("FIELD_NAME", field.name);
-          code_ += "  builder_.add_{{FIELD_NAME}}({{FIELD_NAME}});";
-        }
-      }
-    }
-    code_ += "  return builder_.Finish();";
-    code_ += "}";
-    code_ += "";
-
-    // Generate a CreateXDirect function with vector types as parameters
-    if (has_string_or_vector_fields) {
-      code_ += "inline flatbuffers::Offset<{{STRUCT_NAME}}> "
-              "Create{{STRUCT_NAME}}Direct(";
-      code_ += "    flatbuffers::FlatBufferBuilder &_fbb\\";
-      for (auto it = struct_def.fields.vec.begin();
-           it != struct_def.fields.vec.end(); ++it) {
-        const auto &field = **it;
-        if (!field.deprecated) {
-          GenParam(field, true, ",\n    ");
-        }
-      }
-
-      // Need to call "Create" with the struct namespace.
-      const auto qualified_create_name = struct_def.defined_namespace->GetFullyQualifiedName("Create");
-      code_.SetValue("CREATE_NAME", TranslateNameSpace(qualified_create_name));
-
-      code_ += ") {";
-      code_ += "  return {{CREATE_NAME}}{{STRUCT_NAME}}(";
-      code_ += "      _fbb\\";
-      for (auto it = struct_def.fields.vec.begin();
-           it != struct_def.fields.vec.end(); ++it) {
-        const auto &field = **it;
-        if (!field.deprecated) {
-          code_.SetValue("FIELD_NAME", field.name);
-
-          if (field.value.type.base_type == BASE_TYPE_STRING) {
-            code_ += ",\n      {{FIELD_NAME}} ? "
-                    "_fbb.CreateString({{FIELD_NAME}}) : 0\\";
-          } else if (field.value.type.base_type == BASE_TYPE_VECTOR) {
-            auto type = GenTypeWire(field.value.type.VectorType(), "", false);
-            code_ += ",\n      {{FIELD_NAME}} ? "
-                    "_fbb.CreateVector<" + type + ">(*{{FIELD_NAME}}) : 0\\";
-          } else {
-            code_ += ",\n      {{FIELD_NAME}}\\";
-          }
-        }
-      }
-      code_ += ");";
-      code_ += "}";
-      code_ += "";
-    }
-  }
-
-  std::string GenUnionUnpackVal(const FieldDef &afield,
-                                const char *vec_elem_access,
-                                const char *vec_type_access) {
-    return afield.value.type.enum_def->name + "Union::UnPack(" + "_e" +
-           vec_elem_access + ", " + afield.name + UnionTypeFieldSuffix() +
-           "()" + vec_type_access + ", _resolver)";
-  }
-
-  std::string GenUnpackVal(const Type &type, const std::string &val,
-                           bool invector, const FieldDef &afield) {
-    switch (type.base_type) {
-      case BASE_TYPE_STRING: {
-        return val + "->str()";
-      }
-      case BASE_TYPE_STRUCT: {
-        const auto name = WrapInNameSpace(*type.struct_def);
-        if (IsStruct(type)) {
-          auto native_type = type.struct_def->attributes.Lookup("native_type");
-          if (native_type) {
-            return "flatbuffers::UnPack(*" + val + ")";
-          } else if (invector || afield.native_inline) {
-            return "*" + val;
-          } else {
-            const auto ptype = GenTypeNativePtr(name, &afield, true);
-            return ptype + "(new " + name + "(*" + val + "))";
-          }
-        } else {
-          const auto ptype = GenTypeNativePtr(NativeName(name, type.struct_def),
-                                              &afield, true);
-          return ptype + "(" + val + "->UnPack(_resolver))";
-        }
-      }
-      case BASE_TYPE_UNION: {
-        return GenUnionUnpackVal(afield,
-                                 invector ? "->Get(_i)" : "",
-                                 invector ? ("->GetEnum<" +
-                                             type.enum_def->name +
-                                             ">(_i)").c_str() : "");
-      }
-      default: {
-        return val;
-        break;
-      }
-    }
-  };
-
-  std::string GenUnpackFieldStatement(const FieldDef &field,
-                                      const FieldDef *union_field) {
-    std::string code;
-    switch (field.value.type.base_type) {
-      case BASE_TYPE_VECTOR: {
-        std::string indexing;
-        if (field.value.type.enum_def) {
-          indexing += "(" + field.value.type.enum_def->name + ")";
-        }
-        indexing += "_e->Get(_i)";
-        if (field.value.type.element == BASE_TYPE_BOOL) {
-          indexing += " != 0";
-        }
-
-        // Generate code that pushes data from _e to _o in the form:
-        //   for (uoffset_t i = 0; i < _e->size(); ++i) {
-        //     _o->field.push_back(_e->Get(_i));
-        //   }
-        auto name = field.name;
-        if (field.value.type.element == BASE_TYPE_UTYPE) {
-          name = StripUnionType(field.name);
-        }
-        auto access = field.value.type.element == BASE_TYPE_UTYPE
-                        ? ".type"
-                        : (field.value.type.element == BASE_TYPE_UNION
-                          ? ".value"
-                          : "");
-        code += "{ _o->" + name + ".resize(_e->size()); ";
-        code += "for (flatbuffers::uoffset_t _i = 0;";
-        code += " _i < _e->size(); _i++) { ";
-        code += "_o->" + name + "[_i]" + access + " = ";
-        code += GenUnpackVal(field.value.type.VectorType(),
-                                  indexing, true, field);
-        code += "; } }";
-        break;
-      }
-      case BASE_TYPE_UTYPE: {
-        assert(union_field->value.type.base_type == BASE_TYPE_UNION);
-        // Generate code that sets the union type, of the form:
-        //   _o->field.type = _e;
-        code += "_o->" + union_field->name + ".type = _e;";
-        break;
-      }
-      case BASE_TYPE_UNION: {
-        // Generate code that sets the union value, of the form:
-        //   _o->field.value = Union::Unpack(_e, field_type(), resolver);
-        code += "_o->" + field.name + ".value = ";
-        code += GenUnionUnpackVal(field, "", "");
-        code += ";";
-        break;
-      }
-      default: {
-        auto cpp_type = field.attributes.Lookup("cpp_type");
-        if (cpp_type) {
-          // Generate code that resolves the cpp pointer type, of the form:
-          //  if (resolver)
-          //    (*resolver)(&_o->field, (hash_value_t)(_e));
-          //  else
-          //    _o->field = nullptr;
-          code += "if (_resolver) ";
-          code += "(*_resolver)";
-          code += "(reinterpret_cast<void **>(&_o->" + field.name + "), ";
-          code += "static_cast<flatbuffers::hash_value_t>(_e));";
-          code += " else ";
-          code += "_o->" + field.name + " = nullptr;";
-        } else {
-          // Generate code for assigning the value, of the form:
-          //  _o->field = value;
-          code += "_o->" + field.name + " = ";
-          code += GenUnpackVal(field.value.type, "_e", false, field) + ";";
-        }
-        break;
-      }
-    }
-    return code;
-  }
-
-  std::string GenCreateParam(const FieldDef &field) {
-    std::string value = "_o->";
-    if (field.value.type.base_type == BASE_TYPE_UTYPE) {
-      value += StripUnionType(field.name);
-      value += ".type";
-    } else {
-      value += field.name;
-    }
-    if (field.attributes.Lookup("cpp_type")) {
-      auto type = GenTypeBasic(field.value.type, false);
-      value = "_rehasher ? "
-              "static_cast<" + type + ">((*_rehasher)(" + value + ")) : 0";
-    }
-
-    std::string code;
-    switch (field.value.type.base_type) {
-      // String fields are of the form:
-      //   _fbb.CreateString(_o->field)
-      case BASE_TYPE_STRING: {
-        code += "_fbb.CreateString(" + value + ")";
-
-        // For optional fields, check to see if there actually is any data
-        // in _o->field before attempting to access it.
-        if (!field.required) {
-          code = value + ".size() ? " + code + " : 0";
-        }
-        break;
-      }
-      // Vector fields come in several flavours, of the forms:
-      //   _fbb.CreateVector(_o->field);
-      //   _fbb.CreateVector((const utype*)_o->field.data(), _o->field.size());
-      //   _fbb.CreateVectorOfStrings(_o->field)
-      //   _fbb.CreateVectorOfStructs(_o->field)
-      //   _fbb.CreateVector<Offset<T>>(_o->field.size() [&](size_t i) {
-      //     return CreateT(_fbb, _o->Get(i), rehasher);
-      //   });
-      case BASE_TYPE_VECTOR: {
-        auto vector_type = field.value.type.VectorType();
-        switch (vector_type.base_type) {
-          case BASE_TYPE_STRING: {
-            code += "_fbb.CreateVectorOfStrings(" + value + ")";
-            break;
-          }
-          case BASE_TYPE_STRUCT: {
-            if (IsStruct(vector_type)) {
-              auto native_type =
-                field.value.type.struct_def->attributes.Lookup("native_type");
-              if (native_type) {
-                code += "_fbb.CreateVectorOfNativeStructs<";
-                code += WrapInNameSpace(*vector_type.struct_def) + ">";
-              } else {
-                code += "_fbb.CreateVectorOfStructs";              	
-              }
-              code += "(" + value + ")";
-            } else {
-              code += "_fbb.CreateVector<flatbuffers::Offset<";
-              code += WrapInNameSpace(*vector_type.struct_def) + ">>";
-              code += "(" + value + ".size(), [&](size_t i) {";
-              code += " return Create" + vector_type.struct_def->name;
-              code += "(_fbb, " + value + "[i]" + GenPtrGet(field) + ", ";
-              code += "_rehasher); })";
-            }
-            break;
-          }
-          case BASE_TYPE_BOOL: {
-            code += "_fbb.CreateVector(" + value + ")";
-            break;
-          }
-          case BASE_TYPE_UNION: {
-            code += "_fbb.CreateVector<flatbuffers::Offset<void>>(" + value +
-                    ".size(), [&](size_t i) { return " + value +
-                    "[i].Pack(_fbb, _rehasher); })";
-            break;
-          }
-          case BASE_TYPE_UTYPE: {
-            value = StripUnionType(value);
-            code += "_fbb.CreateVector<uint8_t>(" + value +
-                    ".size(), [&](size_t i) { return static_cast<uint8_t>(" + value +
-                    "[i].type); })";
-            break;
-          }
-          default: {
-            if (field.value.type.enum_def) {
-              // For enumerations, we need to get access to the array data for
-              // the underlying storage type (eg. uint8_t).
-              const auto basetype = GenTypeBasic(
-                  field.value.type.enum_def->underlying_type, false);
-              code += "_fbb.CreateVector((const " + basetype + "*)" + value +
-                      ".data(), " + value + ".size())";
-            } else {
-              code += "_fbb.CreateVector(" + value + ")";
-            }
-            break;
-          }
-        }
-
-        // For optional fields, check to see if there actually is any data
-        // in _o->field before attempting to access it.
-        if (!field.required) {
-          code = value + ".size() ? " + code + " : 0";
-        }
-        break;
-      }
-      case BASE_TYPE_UNION: {
-        // _o->field.Pack(_fbb);
-        code += value + ".Pack(_fbb)";
-        break;
-      }
-      case BASE_TYPE_STRUCT: {
-        if (IsStruct(field.value.type)) {
-          auto native_type =
-              field.value.type.struct_def->attributes.Lookup("native_type");
-          if (native_type) {
-            code += "flatbuffers::Pack(" + value + ")";
-          } else if (field.native_inline) {
-            code += "&" + value;
-          } else {
-            code += value + " ? " + value + GenPtrGet(field) + " : 0";
-          }
-        } else {
-          // _o->field ? CreateT(_fbb, _o->field.get(), _rehasher);
-          const auto type = field.value.type.struct_def->name;
-          code += value + " ? Create" + type;
-          code += "(_fbb, " + value + GenPtrGet(field) + ", _rehasher)";
-          code += " : 0";
-        }
-        break;
-      }
-      default: {
-        code += value;
-        break;
-      }
-    }
-    return code;
-  }
-
-  // Generate code for tables that needs to come after the regular definition.
-  void GenTablePost(const StructDef &struct_def) {
-    code_.SetValue("STRUCT_NAME", struct_def.name);
-    code_.SetValue("NATIVE_NAME", NativeName(struct_def.name, &struct_def));
-
-    if (parser_.opts.generate_object_based_api) {
-      // Generate the X::UnPack() method.
-      code_ += "inline " + TableUnPackSignature(struct_def, false) + " {";
-      code_ += "  auto _o = new {{NATIVE_NAME}}();";
-      code_ += "  UnPackTo(_o, _resolver);";
-      code_ += "  return _o;";
-      code_ += "}";
-      code_ += "";
-
-      code_ += "inline " + TableUnPackToSignature(struct_def, false) + " {";
-      code_ += "  (void)_o;";
-      code_ += "  (void)_resolver;";
-
-      for (auto it = struct_def.fields.vec.begin();
-           it != struct_def.fields.vec.end(); ++it) {
-        const auto &field = **it;
-        if (field.deprecated) {
-          continue;
-        }
-
-        // Assign a value from |this| to |_o|.   Values from |this| are stored
-        // in a variable |_e| by calling this->field_type().  The value is then
-        // assigned to |_o| using the GenUnpackFieldStatement.
-        const bool is_union = field.value.type.base_type == BASE_TYPE_UTYPE;
-        const auto statement =
-            GenUnpackFieldStatement(field, is_union ? *(it + 1) : nullptr);
-
-        code_.SetValue("FIELD_NAME", field.name);
-        auto prefix = "  { auto _e = {{FIELD_NAME}}(); ";
-        auto check = IsScalar(field.value.type.base_type) ? "" : "if (_e) ";
-        auto postfix = " };";
-        code_ += std::string(prefix) + check + statement + postfix;
-      }
-      code_ += "}";
-      code_ += "";
-
-      // Generate the X::Pack member function that simply calls the global
-      // CreateX function.
-      code_ += "inline " + TablePackSignature(struct_def, false) + " {";
-      code_ += "  return Create{{STRUCT_NAME}}(_fbb, _o, _rehasher);";
-      code_ += "}";
-      code_ += "";
-
-      // Generate a CreateX method that works with an unpacked C++ object.
-      code_ += "inline " + TableCreateSignature(struct_def, false) + " {";
-      code_ += "  (void)_rehasher;";
-      code_ += "  (void)_o;";
-
-      for (auto it = struct_def.fields.vec.begin();
-           it != struct_def.fields.vec.end(); ++it) {
-        auto &field = **it;
-        if (field.deprecated) {
-          continue;
-        }
-        code_ += "  auto _" + field.name + " = " + GenCreateParam(field) + ";";
-      }
-      // Need to call "Create" with the struct namespace.
-      const auto qualified_create_name = struct_def.defined_namespace->GetFullyQualifiedName("Create");
-      code_.SetValue("CREATE_NAME", TranslateNameSpace(qualified_create_name));
-
-      code_ += "  return {{CREATE_NAME}}{{STRUCT_NAME}}(";
-      code_ += "      _fbb\\";
-      for (auto it = struct_def.fields.vec.begin();
-           it != struct_def.fields.vec.end(); ++it) {
-        auto &field = **it;
-        if (field.deprecated) {
-          continue;
-        }
-
-        bool pass_by_address = false;
-        if (field.value.type.base_type == BASE_TYPE_STRUCT) {
-          if (IsStruct(field.value.type)) {
-            auto native_type =
-                field.value.type.struct_def->attributes.Lookup("native_type");
-            if (native_type) {
-              pass_by_address = true;
-            }
-          }
-        }
-
-        // Call the CreateX function using values from |_o|.
-        if (pass_by_address) {
-          code_ += ",\n      &_" + field.name + "\\";
-        } else {
-          code_ += ",\n      _" + field.name + "\\";
-        }
-      }
-      code_ += ");";
-      code_ += "}";
-      code_ += "";
-    }
-  }
-
-  static void GenPadding(
-      const FieldDef &field, std::string *code_ptr, int *id,
-      const std::function<void(int bits, std::string *code_ptr, int *id)> &f) {
-    if (field.padding) {
-      for (int i = 0; i < 4; i++) {
-        if (static_cast<int>(field.padding) & (1 << i)) {
-          f((1 << i) * 8, code_ptr, id);
-        }
-      }
-      assert(!(field.padding & ~0xF));
-    }
-  }
-
-  static void PaddingDefinition(int bits, std::string *code_ptr, int *id) {
-    *code_ptr += "  int" + NumToString(bits) + "_t padding" +
-        NumToString((*id)++) + "__;";
-  }
-
-  static void PaddingInitializer(int bits, std::string *code_ptr, int *id) {
-    (void)bits;
-    *code_ptr += ",\n        padding" + NumToString((*id)++) + "__(0)";
-  }
-
-  static void PaddingNoop(int bits, std::string *code_ptr, int *id) {
-    (void)bits;
-    *code_ptr += "    (void)padding" + NumToString((*id)++) + "__;";
-  }
-
-  // Generate an accessor struct with constructor for a flatbuffers struct.
-  void GenStruct(const StructDef &struct_def) {
-    // Generate an accessor struct, with private variables of the form:
-    // type name_;
-    // Generates manual padding and alignment.
-    // Variables are private because they contain little endian data on all
-    // platforms.
-    GenComment(struct_def.doc_comment);
-    code_.SetValue("ALIGN", NumToString(struct_def.minalign));
-    code_.SetValue("STRUCT_NAME", struct_def.name);
-
-    code_ += "MANUALLY_ALIGNED_STRUCT({{ALIGN}}) "
-            "{{STRUCT_NAME}} FLATBUFFERS_FINAL_CLASS {";
-    code_ += " private:";
-
-    int padding_id = 0;
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      const auto &field = **it;
-      code_.SetValue("FIELD_TYPE",
-          GenTypeGet(field.value.type, " ", "", " ", false));
-      code_.SetValue("FIELD_NAME", field.name);
-      code_ += "  {{FIELD_TYPE}}{{FIELD_NAME}}_;";
-
-      if (field.padding) {
-        std::string padding;
-        GenPadding(field, &padding, &padding_id, PaddingDefinition);
-        code_ += padding;
-      }
-    }
-
-    // Generate GetFullyQualifiedName
-    code_ += "";
-    code_ += " public:";
-    GenFullyQualifiedNameGetter(struct_def.name);
-
-    // Generate a default constructor.
-    code_ += "  {{STRUCT_NAME}}() {";
-    code_ += "    memset(this, 0, sizeof({{STRUCT_NAME}}));";
-    code_ += "  }";
-
-    // Generate a copy constructor.
-    code_ += "  {{STRUCT_NAME}}(const {{STRUCT_NAME}} &_o) {";
-    code_ += "    memcpy(this, &_o, sizeof({{STRUCT_NAME}}));";
-    code_ += "  }";
-
-    // Generate a constructor that takes all fields as arguments.
-    std::string arg_list;
-    std::string init_list;
-    padding_id = 0;
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      const auto &field = **it;
-      const auto member_name = field.name + "_";
-      const auto arg_name = "_" + field.name;
-      const auto arg_type =
-          GenTypeGet(field.value.type, " ", "const ", " &", true);
-
-      if (it != struct_def.fields.vec.begin()) {
-        arg_list += ", ";
-        init_list += ",\n        ";
-      }
-      arg_list += arg_type;
-      arg_list += arg_name;
-      init_list += member_name;
-      if (IsScalar(field.value.type.base_type)) {
-        auto type = GenUnderlyingCast(field, false, arg_name);
-        init_list += "(flatbuffers::EndianScalar(" + type + "))";
-      } else {
-        init_list += "(" + arg_name + ")";
-      }
-      if (field.padding) {
-        GenPadding(field, &init_list, &padding_id, PaddingInitializer);
-      }
-    }
-
-    code_.SetValue("ARG_LIST", arg_list);
-    code_.SetValue("INIT_LIST", init_list);
-    code_ += "  {{STRUCT_NAME}}({{ARG_LIST}})";
-    code_ += "      : {{INIT_LIST}} {";
-    padding_id = 0;
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      const auto &field = **it;
-      if (field.padding) {
-        std::string padding;
-        GenPadding(field, &padding, &padding_id, PaddingNoop);
-        code_ += padding;
-      }
-    }
-    code_ += "  }";
-
-    // Generate accessor methods of the form:
-    // type name() const { return flatbuffers::EndianScalar(name_); }
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      const auto &field = **it;
-
-      auto field_type = GenTypeGet(field.value.type, " ", "const ", " &", true);
-      auto is_scalar = IsScalar(field.value.type.base_type);
-      auto member = field.name + "_";
-      auto value = is_scalar ? "flatbuffers::EndianScalar(" + member + ")"
-                             : member;
-
-      code_.SetValue("FIELD_NAME", field.name);
-      code_.SetValue("FIELD_TYPE", field_type);
-      code_.SetValue("FIELD_VALUE", GenUnderlyingCast(field, true, value));
-
-      GenComment(field.doc_comment, "  ");
-      code_ += "  {{FIELD_TYPE}}{{FIELD_NAME}}() const {";
-      code_ += "    return {{FIELD_VALUE}};";
-      code_ += "  }";
-
-      if (parser_.opts.mutable_buffer) {
-        auto mut_field_type = GenTypeGet(field.value.type, " ", "", " &", true);
-        code_.SetValue("FIELD_TYPE", mut_field_type);
-        if (is_scalar) {
-          code_.SetValue("ARG", GenTypeBasic(field.value.type, true));
-          code_.SetValue("FIELD_VALUE",
-                        GenUnderlyingCast(field, false, "_" + field.name));
-
-          code_ += "  void mutate_{{FIELD_NAME}}({{ARG}} _{{FIELD_NAME}}) {";
-          code_ += "    flatbuffers::WriteScalar(&{{FIELD_NAME}}_, "
-                  "{{FIELD_VALUE}});";
-          code_ += "  }";
-        } else {
-          code_ += "  {{FIELD_TYPE}}mutable_{{FIELD_NAME}}() {";
-          code_ += "    return {{FIELD_NAME}}_;";
-          code_ += "  }";
-        }
-      }
-
-      // Generate a comparison function for this field if it is a key.
-      if (field.key) {
-        code_ += "  bool KeyCompareLessThan(const {{STRUCT_NAME}} *o) const {";
-        code_ += "    return {{FIELD_NAME}}() < o->{{FIELD_NAME}}();";
-        code_ += "  }";
-        auto type = GenTypeBasic(field.value.type, false);
-        if (parser_.opts.scoped_enums && field.value.type.enum_def &&
-            IsScalar(field.value.type.base_type)) {
-          type = GenTypeGet(field.value.type, " ", "const ", " *", true);
-        }
-
-        code_.SetValue("KEY_TYPE", type);
-        code_ += "  int KeyCompareWithValue({{KEY_TYPE}} val) const {";
-        code_ += "    const auto key = {{FIELD_NAME}}();";
-        code_ += "    return static_cast<int>(key > val) - static_cast<int>(key < val);";
-        code_ += "  }";
-      }
-    }
-    code_ += "};";
-
-    code_.SetValue("STRUCT_BYTE_SIZE", NumToString(struct_def.bytesize));
-    code_ += "STRUCT_END({{STRUCT_NAME}}, {{STRUCT_BYTE_SIZE}});";
-    code_ += "";
-  }
-
-  // Set up the correct namespace. Only open a namespace if the existing one is
-  // different (closing/opening only what is necessary).
-  //
-  // The file must start and end with an empty (or null) namespace so that
-  // namespaces are properly opened and closed.
-  void SetNameSpace(const Namespace *ns) {
-    if (cur_name_space_ == ns) {
-      return;
-    }
-
-    // Compute the size of the longest common namespace prefix.
-    // If cur_name_space is A::B::C::D and ns is A::B::E::F::G,
-    // the common prefix is A::B:: and we have old_size = 4, new_size = 5
-    // and common_prefix_size = 2
-    size_t old_size = cur_name_space_ ? cur_name_space_->components.size() : 0;
-    size_t new_size = ns ? ns->components.size() : 0;
-
-    size_t common_prefix_size = 0;
-    while (common_prefix_size < old_size && common_prefix_size < new_size &&
-           ns->components[common_prefix_size] ==
-               cur_name_space_->components[common_prefix_size]) {
-      common_prefix_size++;
-    }
-
-    // Close cur_name_space in reverse order to reach the common prefix.
-    // In the previous example, D then C are closed.
-    for (size_t j = old_size; j > common_prefix_size; --j) {
-      code_ += "}  // namespace " + cur_name_space_->components[j - 1];
-    }
-    if (old_size != common_prefix_size) {
-      code_ += "";
-    }
-
-    // open namespace parts to reach the ns namespace
-    // in the previous example, E, then F, then G are opened
-    for (auto j = common_prefix_size; j != new_size; ++j) {
-      code_ += "namespace " + ns->components[j] + " {";
-    }
-    if (new_size != common_prefix_size) {
-      code_ += "";
-    }
-
-    cur_name_space_ = ns;
-  }
-};
-
-}  // namespace cpp
-
-bool GenerateCPP(const Parser &parser, const std::string &path,
-                 const std::string &file_name) {
-  cpp::CppGenerator generator(parser, path, file_name);
-  return generator.generate();
-}
-
-std::string CPPMakeRule(const Parser &parser, const std::string &path,
-                        const std::string &file_name) {
-  const auto filebase =
-      flatbuffers::StripPath(flatbuffers::StripExtension(file_name));
-  const auto included_files = parser.GetIncludedFilesRecursive(file_name);
-  std::string make_rule = GeneratedFileName(path, filebase) + ": ";
-  for (auto it = included_files.begin(); it != included_files.end(); ++it) {
-    make_rule += " " + *it;
-  }
-  return make_rule;
-}
-
-}  // namespace flatbuffers
diff --git a/third_party/flatbuffers/src/idl_gen_fbs.cpp b/third_party/flatbuffers/src/idl_gen_fbs.cpp
deleted file mode 100644
index 7752369..0000000
--- a/third_party/flatbuffers/src/idl_gen_fbs.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// independent from idl_parser, since this code is not needed for most clients
-
-#include "flatbuffers/flatbuffers.h"
-#include "flatbuffers/idl.h"
-#include "flatbuffers/util.h"
-#include "flatbuffers/code_generators.h"
-
-namespace flatbuffers {
-
-static std::string GenType(const Type &type) {
-  switch (type.base_type) {
-    case BASE_TYPE_STRUCT:
-      return type.struct_def->defined_namespace->GetFullyQualifiedName(
-               type.struct_def->name);
-    case BASE_TYPE_UNION:
-      return type.enum_def->defined_namespace->GetFullyQualifiedName(
-               type.enum_def->name);
-    case BASE_TYPE_VECTOR:
-        return "[" + GenType(type.VectorType()) + "]";
-    default:
-        return kTypeNames[type.base_type];
-  }
-}
-
-static void GenNameSpace(const Namespace &name_space, std::string *_schema,
-                         const Namespace **last_namespace) {
-  if (*last_namespace == &name_space) return;
-  *last_namespace = &name_space;
-  auto &schema = *_schema;
-  schema += "namespace ";
-  for (auto it = name_space.components.begin();
-           it != name_space.components.end(); ++it) {
-    if (it != name_space.components.begin()) schema += ".";
-    schema += *it;
-  }
-  schema += ";\n\n";
-}
-
-// Generate a flatbuffer schema from the Parser's internal representation.
-std::string GenerateFBS(const Parser &parser, const std::string &file_name) {
- // Proto namespaces may clash with table names, so we have to prefix all:
-  if (!parser.opts.escape_proto_identifiers) {
-    for (auto it = parser.namespaces_.begin(); it != parser.namespaces_.end();
-         ++it) {
-      for (auto comp = (*it)->components.begin(); comp != (*it)->components.end();
-           ++comp) {
-        (*comp) = "_" + (*comp);
-      }
-    }
-  }
-
-  std::string schema;
-  schema += "// Generated from " + file_name + ".proto\n\n";
-  if (parser.opts.include_dependence_headers) {
-    #ifdef FBS_GEN_INCLUDES  // TODO: currently all in one file.
-    int num_includes = 0;
-    for (auto it = parser.included_files_.begin();
-         it != parser.included_files_.end(); ++it) {
-      auto basename = flatbuffers::StripPath(
-                        flatbuffers::StripExtension(it->first));
-      if (basename != file_name) {
-        schema += "include \"" + basename + ".fbs\";\n";
-        num_includes++;
-      }
-    }
-    if (num_includes) schema += "\n";
-    #endif
-  }
-  // Generate code for all the enum declarations.
-  const Namespace *last_namespace = nullptr;
-  for (auto enum_def_it = parser.enums_.vec.begin();
-           enum_def_it != parser.enums_.vec.end(); ++enum_def_it) {
-    EnumDef &enum_def = **enum_def_it;
-    GenNameSpace(*enum_def.defined_namespace, &schema, &last_namespace);
-    GenComment(enum_def.doc_comment, &schema, nullptr);
-    schema += "enum " + enum_def.name + " : ";
-    schema += GenType(enum_def.underlying_type) + " {\n";
-    for (auto it = enum_def.vals.vec.begin();
-         it != enum_def.vals.vec.end(); ++it) {
-      auto &ev = **it;
-      GenComment(ev.doc_comment, &schema, nullptr, "  ");
-      schema += "  " + ev.name + " = " + NumToString(ev.value) + ",\n";
-    }
-    schema += "}\n\n";
-  }
-  // Generate code for all structs/tables.
-  for (auto it = parser.structs_.vec.begin();
-           it != parser.structs_.vec.end(); ++it) {
-    StructDef &struct_def = **it;
-    GenNameSpace(*struct_def.defined_namespace, &schema, &last_namespace);
-    GenComment(struct_def.doc_comment, &schema, nullptr);
-    schema += "table " + struct_def.name + " {\n";
-    for (auto field_it = struct_def.fields.vec.begin();
-             field_it != struct_def.fields.vec.end(); ++field_it) {
-      auto &field = **field_it;
-      GenComment(field.doc_comment, &schema, nullptr, "  ");
-      schema += "  " + field.name + ":" + GenType(field.value.type);
-      if (field.value.constant != "0") schema += " = " + field.value.constant;
-      if (field.required) schema += " (required)";
-      schema += ";\n";
-    }
-    schema += "}\n\n";
-  }
-  return schema;
-}
-
-bool GenerateFBS(const Parser &parser,
-                 const std::string &path,
-                 const std::string &file_name) {
-  return SaveFile((path + file_name + ".fbs").c_str(),
-                  GenerateFBS(parser, file_name), false);
-}
-
-}  // namespace flatbuffers
-
diff --git a/third_party/flatbuffers/src/idl_gen_general.cpp b/third_party/flatbuffers/src/idl_gen_general.cpp
deleted file mode 100644
index 1e9f3b6..0000000
--- a/third_party/flatbuffers/src/idl_gen_general.cpp
+++ /dev/null
@@ -1,1434 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// independent from idl_parser, since this code is not needed for most clients
-
-#include "flatbuffers/flatbuffers.h"
-#include "flatbuffers/idl.h"
-#include "flatbuffers/util.h"
-#include "flatbuffers/code_generators.h"
-#include <algorithm>
-
-namespace flatbuffers {
-
-// Convert an underscore_based_indentifier in to camelCase.
-// Also uppercases the first character if first is true.
-std::string MakeCamel(const std::string &in, bool first) {
-  std::string s;
-  for (size_t i = 0; i < in.length(); i++) {
-    if (!i && first)
-      s += static_cast<char>(toupper(in[0]));
-    else if (in[i] == '_' && i + 1 < in.length())
-      s += static_cast<char>(toupper(in[++i]));
-    else
-      s += in[i];
-  }
-  return s;
-}
-
-// These arrays need to correspond to the IDLOptions::k enum.
-
-struct LanguageParameters {
-  IDLOptions::Language language;
-  // Whether function names in the language typically start with uppercase.
-  bool first_camel_upper;
-  std::string file_extension;
-  std::string string_type;
-  std::string bool_type;
-  std::string open_curly;
-  std::string accessor_type;
-  std::string const_decl;
-  std::string unsubclassable_decl;
-  std::string enum_decl;
-  std::string enum_separator;
-  std::string getter_prefix;
-  std::string getter_suffix;
-  std::string inheritance_marker;
-  std::string namespace_ident;
-  std::string namespace_begin;
-  std::string namespace_end;
-  std::string set_bb_byteorder;
-  std::string get_bb_position;
-  std::string get_fbb_offset;
-  std::string accessor_prefix;
-  std::string accessor_prefix_static;
-  std::string optional_suffix;
-  std::string includes;
-  CommentConfig comment_config;
-};
-
-const LanguageParameters& GetLangParams(IDLOptions::Language lang) {
-  static LanguageParameters language_parameters[] = {
-    {
-      IDLOptions::kJava,
-      false,
-      ".java",
-      "String",
-      "boolean ",
-      " {\n",
-      "class ",
-      " final ",
-      "final ",
-      "final class ",
-      ";\n",
-      "()",
-      "",
-      " extends ",
-      "package ",
-      ";",
-      "",
-      "_bb.order(ByteOrder.LITTLE_ENDIAN); ",
-      "position()",
-      "offset()",
-      "",
-      "",
-      "",
-      "import java.nio.*;\nimport java.lang.*;\nimport java.util.*;\n"
-        "import com.google.flatbuffers.*;\n\n@SuppressWarnings(\"unused\")\n",
-      {
-        "/**",
-        " *",
-        " */",
-      },
-    },
-    {
-      IDLOptions::kCSharp,
-      true,
-      ".cs",
-      "string",
-      "bool ",
-      "\n{\n",
-      "struct ",
-      " readonly ",
-      "",
-      "enum ",
-      ",\n",
-      " { get",
-      "} ",
-      " : ",
-      "namespace ",
-      "\n{",
-      "\n}\n",
-      "",
-      "Position",
-      "Offset",
-      "__p.",
-      "Table.",
-      "?",
-      "using global::System;\nusing global::FlatBuffers;\n\n",
-      {
-        nullptr,
-        "///",
-        nullptr,
-      },
-    },
-  };
-
-  if (lang == IDLOptions::kJava) {
-    return language_parameters[0];
-  } else {
-    assert(lang == IDLOptions::kCSharp);
-    return language_parameters[1];
-  }
-}
-
-namespace general {
-class GeneralGenerator : public BaseGenerator {
- public:
-  GeneralGenerator(const Parser &parser, const std::string &path,
-                   const std::string &file_name)
-      : BaseGenerator(parser, path, file_name, "", "."),
-        lang_(GetLangParams(parser_.opts.lang)),
-        cur_name_space_( nullptr ) {
-  }
-
-  GeneralGenerator &operator=(const GeneralGenerator &);
-  bool generate() {
-    std::string one_file_code;
-    cur_name_space_ = parser_.namespaces_.back();
-
-    for (auto it = parser_.enums_.vec.begin(); it != parser_.enums_.vec.end();
-         ++it) {
-      std::string enumcode;
-      auto &enum_def = **it;
-      if (!parser_.opts.one_file)
-        cur_name_space_ = enum_def.defined_namespace;
-      GenEnum(enum_def, &enumcode);
-      if (parser_.opts.one_file) {
-        one_file_code += enumcode;
-      } else {
-        if (!SaveType(enum_def.name, *enum_def.defined_namespace,
-                      enumcode, false)) return false;
-      }
-    }
-
-    for (auto it = parser_.structs_.vec.begin();
-         it != parser_.structs_.vec.end(); ++it) {
-      std::string declcode;
-      auto &struct_def = **it;
-      if (!parser_.opts.one_file)
-        cur_name_space_ = struct_def.defined_namespace;
-      GenStruct(struct_def, &declcode);
-      if (parser_.opts.one_file) {
-        one_file_code += declcode;
-      } else {
-        if (!SaveType(struct_def.name, *struct_def.defined_namespace,
-                      declcode, true)) return false;
-      }
-    }
-
-    if (parser_.opts.one_file) {
-      return SaveType(file_name_, *parser_.namespaces_.back(),
-                      one_file_code, true);
-    }
-    return true;
-  }
-
-  // Save out the generated code for a single class while adding
-  // declaration boilerplate.
-  bool SaveType(const std::string &defname, const Namespace &ns,
-      const std::string &classcode, bool needs_includes) {
-    if (!classcode.length()) return true;
-
-    std::string code;
-    code = code + "// " + FlatBuffersGeneratedWarning();
-    std::string namespace_name = FullNamespace(".", ns);
-    if (!namespace_name.empty()) {
-      code += lang_.namespace_ident + namespace_name + lang_.namespace_begin;
-      code += "\n\n";
-    }
-    if (needs_includes) code += lang_.includes;
-    code += classcode;
-    if (!namespace_name.empty()) code += lang_.namespace_end;
-    auto filename = NamespaceDir(ns) + defname + lang_.file_extension;
-    return SaveFile(filename.c_str(), code, false);
-  }
-
-  const Namespace *CurrentNameSpace() const { return cur_name_space_; }
-
-  std::string FunctionStart(char upper) {
-    return std::string() + (lang_.language == IDLOptions::kJava
-                                ? static_cast<char>(tolower(upper))
-                                : upper);
-}
-
-static bool IsEnum(const Type& type) {
-  return type.enum_def != nullptr && IsInteger(type.base_type);
-}
-
-std::string GenTypeBasic(const Type &type, bool enableLangOverrides) {
-  static const char *java_typename[] = {
-    #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE) \
-        #JTYPE,
-      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-    #undef FLATBUFFERS_TD
-  };
-
-  static const char *csharp_typename[] = {
-    #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE) \
-        #NTYPE,
-      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-    #undef FLATBUFFERS_TD
-  };
-
-  if (enableLangOverrides) {
-    if (lang_.language == IDLOptions::kCSharp) {
-      if (IsEnum(type)) return WrapInNameSpace(*type.enum_def);
-      if (type.base_type == BASE_TYPE_STRUCT) {
-          return "Offset<" + WrapInNameSpace(*type.struct_def) + ">";
-      }
-    }
-  }
-
-  if (lang_.language == IDLOptions::kJava) {
-    return java_typename[type.base_type];
-  } else {
-    assert(lang_.language == IDLOptions::kCSharp);
-    return csharp_typename[type.base_type];
-  }
-}
-
-std::string GenTypeBasic(const Type &type) {
-  return GenTypeBasic(type, true);
-}
-
-std::string GenTypePointer(const Type &type) {
-  switch (type.base_type) {
-    case BASE_TYPE_STRING:
-      return lang_.string_type;
-    case BASE_TYPE_VECTOR:
-      return GenTypeGet(type.VectorType());
-    case BASE_TYPE_STRUCT:
-      return WrapInNameSpace(*type.struct_def);
-    case BASE_TYPE_UNION:
-      // Unions in C# use a generic Table-derived type for better type safety
-      if (lang_.language == IDLOptions::kCSharp) return "TTable";
-      // fall through
-    default:
-      return "Table";
-  }
-}
-
-std::string GenTypeGet(const Type &type) {
-  return IsScalar(type.base_type)
-    ? GenTypeBasic(type)
-    : GenTypePointer(type);
-}
-
-// Find the destination type the user wants to receive the value in (e.g.
-// one size higher signed types for unsigned serialized values in Java).
-Type DestinationType(const Type &type, bool vectorelem) {
-  if (lang_.language != IDLOptions::kJava) return type;
-  switch (type.base_type) {
-    // We use int for both uchar/ushort, since that generally means less casting
-    // than using short for uchar.
-    case BASE_TYPE_UCHAR:  return Type(BASE_TYPE_INT);
-    case BASE_TYPE_USHORT: return Type(BASE_TYPE_INT);
-    case BASE_TYPE_UINT:   return Type(BASE_TYPE_LONG);
-    case BASE_TYPE_VECTOR:
-      if (vectorelem)
-        return DestinationType(type.VectorType(), vectorelem);
-      // else fall thru:
-    default: return type;
-  }
-}
-
-std::string GenOffsetType(const StructDef &struct_def) {
-  if(lang_.language == IDLOptions::kCSharp) {
-    return "Offset<" + WrapInNameSpace(struct_def) + ">";
-  } else {
-    return "int";
-  }
-}
-
-std::string GenOffsetConstruct(const StructDef &struct_def,
-                                      const std::string &variable_name)
-{
-  if(lang_.language == IDLOptions::kCSharp) {
-    return "new Offset<" + WrapInNameSpace(struct_def) + ">(" + variable_name +
-           ")";
-  }
-  return variable_name;
-}
-
-std::string GenVectorOffsetType() {
-  if(lang_.language == IDLOptions::kCSharp) {
-    return "VectorOffset";
-  } else {
-    return "int";
-  }
-}
-
-// Generate destination type name
-std::string GenTypeNameDest(const Type &type)
-{
-  return GenTypeGet(DestinationType(type, true));
-}
-
-// Mask to turn serialized value into destination type value.
-std::string DestinationMask(const Type &type, bool vectorelem) {
-  if (lang_.language != IDLOptions::kJava) return "";
-  switch (type.base_type) {
-    case BASE_TYPE_UCHAR:  return " & 0xFF";
-    case BASE_TYPE_USHORT: return " & 0xFFFF";
-    case BASE_TYPE_UINT:   return " & 0xFFFFFFFFL";
-    case BASE_TYPE_VECTOR:
-      if (vectorelem)
-        return DestinationMask(type.VectorType(), vectorelem);
-      // else fall thru:
-    default: return "";
-  }
-}
-
-// Casts necessary to correctly read serialized data
-std::string DestinationCast(const Type &type) {
-  if (type.base_type == BASE_TYPE_VECTOR) {
-    return DestinationCast(type.VectorType());
-  } else {
-    switch (lang_.language) {
-    case IDLOptions::kJava:
-      // Cast necessary to correctly read serialized unsigned values.
-      if (type.base_type == BASE_TYPE_UINT) return "(long)";
-      break;
-
-    case IDLOptions::kCSharp:
-      // Cast from raw integral types to enum.
-      if (IsEnum(type)) return "(" + WrapInNameSpace(*type.enum_def) + ")";
-      break;
-
-    default:
-      break;
-    }
-  }
-  return "";
-}
-
-// Cast statements for mutator method parameters.
-// In Java, parameters representing unsigned numbers need to be cast down to
-// their respective type. For example, a long holding an unsigned int value
-// would be cast down to int before being put onto the buffer. In C#, one cast
-// directly cast an Enum to its underlying type, which is essential before
-// putting it onto the buffer.
-std::string SourceCast(const Type &type, bool castFromDest) {
-  if (type.base_type == BASE_TYPE_VECTOR) {
-    return SourceCast(type.VectorType(), castFromDest);
-  } else {
-    switch (lang_.language) {
-      case IDLOptions::kJava:
-        if (castFromDest) {
-          if (type.base_type == BASE_TYPE_UINT) return "(int)";
-          else if (type.base_type == BASE_TYPE_USHORT) return "(short)";
-          else if (type.base_type == BASE_TYPE_UCHAR) return "(byte)";
-        }
-        break;
-      case IDLOptions::kCSharp:
-        if (IsEnum(type)) return "(" + GenTypeBasic(type, false) + ")";
-        break;
-      default:
-        break;
-    }
-  }
-  return "";
-}
-
-std::string SourceCast(const Type &type) {
-  return SourceCast(type, true);
-}
-
-std::string SourceCastBasic(const Type &type, bool castFromDest) {
-  return IsScalar(type.base_type) ? SourceCast(type, castFromDest) : "";
-}
-
-std::string SourceCastBasic(const Type &type) {
-  return SourceCastBasic(type, true);
-}
-
-
-std::string GenEnumDefaultValue(const Value &value) {
-  auto enum_def = value.type.enum_def;
-  auto vec = enum_def->vals.vec;
-  auto default_value = StringToInt(value.constant.c_str());
-
-  auto result = value.constant;
-  for (auto it = vec.begin(); it != vec.end(); ++it) {
-    auto enum_val = **it;
-    if (enum_val.value == default_value) {
-      result = WrapInNameSpace(*enum_def) + "." + enum_val.name;
-      break;
-    }
-  }
-
-  return result;
-}
-
-std::string GenDefaultValue(const Value &value, bool enableLangOverrides) {
-  if (enableLangOverrides) {
-    // handles both enum case and vector of enum case
-    if (lang_.language == IDLOptions::kCSharp &&
-        value.type.enum_def != nullptr &&
-        value.type.base_type != BASE_TYPE_UNION) {
-      return GenEnumDefaultValue(value);
-    }
-  }
-
-  auto longSuffix = lang_.language == IDLOptions::kJava ? "L" : "";
-  switch (value.type.base_type) {
-    case BASE_TYPE_FLOAT: return value.constant + "f";
-    case BASE_TYPE_BOOL: return value.constant == "0" ? "false" : "true";
-    case BASE_TYPE_ULONG:
-    {
-      if (lang_.language != IDLOptions::kJava)
-        return value.constant;
-      // Converts the ulong into its bits signed equivalent
-      uint64_t defaultValue = StringToUInt(value.constant.c_str());
-      return NumToString(static_cast<int64_t>(defaultValue)) + longSuffix;
-    }
-    case BASE_TYPE_UINT:
-    case BASE_TYPE_LONG: return value.constant + longSuffix;
-    default: return value.constant;
-  }
-}
-
-std::string GenDefaultValue(const Value &value) {
-  return GenDefaultValue(value, true);
-}
-
-std::string GenDefaultValueBasic(const Value &value, bool enableLangOverrides) {
-  if (!IsScalar(value.type.base_type)) {
-    if (enableLangOverrides) {
-      if (lang_.language == IDLOptions::kCSharp) {
-        switch (value.type.base_type) {
-        case BASE_TYPE_STRING:
-          return "default(StringOffset)";
-        case BASE_TYPE_STRUCT:
-          return "default(Offset<" + WrapInNameSpace(*value.type.struct_def) +
-                 ">)";
-        case BASE_TYPE_VECTOR:
-          return "default(VectorOffset)";
-        default:
-          break;
-        }
-      }
-    }
-    return "0";
-  }
-  return GenDefaultValue(value, enableLangOverrides);
-}
-
-std::string GenDefaultValueBasic(const Value &value) {
-  return GenDefaultValueBasic(value, true);
-}
-
-void GenEnum(EnumDef &enum_def, std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  if (enum_def.generated) return;
-
-  // Generate enum definitions of the form:
-  // public static (final) int name = value;
-  // In Java, we use ints rather than the Enum feature, because we want them
-  // to map directly to how they're used in C/C++ and file formats.
-  // That, and Java Enums are expensive, and not universally liked.
-  GenComment(enum_def.doc_comment, code_ptr, &lang_.comment_config);
-  code += std::string("public ") + lang_.enum_decl + enum_def.name;
-  if (lang_.language == IDLOptions::kCSharp) {
-    code += lang_.inheritance_marker +
-            GenTypeBasic(enum_def.underlying_type, false);
-  }
-  code += lang_.open_curly;
-  if (lang_.language == IDLOptions::kJava) {
-    code += "  private " + enum_def.name + "() { }\n";
-  }
-  for (auto it = enum_def.vals.vec.begin();
-       it != enum_def.vals.vec.end();
-       ++it) {
-    auto &ev = **it;
-    GenComment(ev.doc_comment, code_ptr, &lang_.comment_config, "  ");
-    if (lang_.language != IDLOptions::kCSharp) {
-      code += "  public static";
-      code += lang_.const_decl;
-      code += GenTypeBasic(enum_def.underlying_type, false);
-    }
-    code += " " + ev.name + " = ";
-    code += NumToString(ev.value);
-    code += lang_.enum_separator;
-  }
-
-  // Generate a generate string table for enum values.
-  // We do not do that for C# where this functionality is native.
-  if (lang_.language != IDLOptions::kCSharp) {
-    // Problem is, if values are very sparse that could generate really big
-    // tables. Ideally in that case we generate a map lookup instead, but for
-    // the moment we simply don't output a table at all.
-    auto range = enum_def.vals.vec.back()->value -
-      enum_def.vals.vec.front()->value + 1;
-    // Average distance between values above which we consider a table
-    // "too sparse". Change at will.
-    static const int kMaxSparseness = 5;
-    if (range / static_cast<int64_t>(enum_def.vals.vec.size()) < kMaxSparseness) {
-      code += "\n  public static";
-      code += lang_.const_decl;
-      code += lang_.string_type;
-      code += "[] names = { ";
-      auto val = enum_def.vals.vec.front()->value;
-      for (auto it = enum_def.vals.vec.begin();
-        it != enum_def.vals.vec.end();
-        ++it) {
-        while (val++ != (*it)->value) code += "\"\", ";
-        code += "\"" + (*it)->name + "\", ";
-      }
-      code += "};\n\n";
-      code += "  public static ";
-      code += lang_.string_type;
-      code += " " + MakeCamel("name", lang_.first_camel_upper);
-      code += "(int e) { return names[e";
-      if (enum_def.vals.vec.front()->value)
-        code += " - " + enum_def.vals.vec.front()->name;
-      code += "]; }\n";
-    }
-  }
-
-  // Close the class
-  code += "}";
-  // Java does not need the closing semi-colon on class definitions.
-  code += (lang_.language != IDLOptions::kJava) ? ";" : "";
-  code += "\n\n";
-}
-
-// Returns the function name that is able to read a value of the given type.
-std::string GenGetter(const Type &type) {
-  switch (type.base_type) {
-    case BASE_TYPE_STRING: return lang_.accessor_prefix + "__string";
-    case BASE_TYPE_STRUCT: return lang_.accessor_prefix + "__struct";
-    case BASE_TYPE_UNION:  return lang_.accessor_prefix + "__union";
-    case BASE_TYPE_VECTOR: return GenGetter(type.VectorType());
-    default: {
-      std::string getter =
-        lang_.accessor_prefix + "bb." + FunctionStart('G') + "et";
-      if (type.base_type == BASE_TYPE_BOOL) {
-        getter = "0!=" + getter;
-      } else if (GenTypeBasic(type, false) != "byte") {
-        getter += MakeCamel(GenTypeBasic(type, false));
-      }
-      return getter;
-    }
-  }
-}
-
-// Returns the function name that is able to read a value of the given type.
-std::string GenGetterForLookupByKey(flatbuffers::FieldDef *key_field,
-                                    const std::string &data_buffer,
-                                    const char *num = nullptr) {
-  auto type = key_field->value.type;
-  auto dest_mask = DestinationMask(type, true);
-  auto dest_cast = DestinationCast(type);
-  auto getter = data_buffer + "." + FunctionStart('G') + "et";
-  if (GenTypeBasic(type, false) != "byte") {
-    getter += MakeCamel(GenTypeBasic(type, false));
-  }
-  getter = dest_cast + getter + "(" + GenOffsetGetter(key_field, num) + ")"
-    + dest_mask;
-  return getter;
-}
-
-// Direct mutation is only allowed for scalar fields.
-// Hence a setter method will only be generated for such fields.
-std::string GenSetter(const Type &type) {
-  if (IsScalar(type.base_type)) {
-    std::string setter =
-      lang_.accessor_prefix + "bb." + FunctionStart('P') + "ut";
-    if (GenTypeBasic(type, false) != "byte" &&
-        type.base_type != BASE_TYPE_BOOL) {
-      setter += MakeCamel(GenTypeBasic(type, false));
-    }
-    return setter;
-  } else {
-    return "";
-  }
-}
-
-// Returns the method name for use with add/put calls.
-std::string GenMethod(const Type &type) {
-  return IsScalar(type.base_type)
-    ? MakeCamel(GenTypeBasic(type, false))
-    : (IsStruct(type) ? "Struct" : "Offset");
-}
-
-// Recursively generate arguments for a constructor, to deal with nested
-// structs.
-void GenStructArgs(const StructDef &struct_def, std::string *code_ptr,
-                   const char *nameprefix) {
-  std::string &code = *code_ptr;
-  for (auto it = struct_def.fields.vec.begin();
-       it != struct_def.fields.vec.end();
-       ++it) {
-    auto &field = **it;
-    if (IsStruct(field.value.type)) {
-      // Generate arguments for a struct inside a struct. To ensure names
-      // don't clash, and to make it obvious these arguments are constructing
-      // a nested struct, prefix the name with the field name.
-      GenStructArgs(*field.value.type.struct_def, code_ptr,
-                    (nameprefix + (field.name + "_")).c_str());
-    } else {
-      code += ", ";
-      code += GenTypeBasic(DestinationType(field.value.type, false));
-      code += " ";
-      code += nameprefix;
-      code += MakeCamel(field.name, lang_.first_camel_upper);
-    }
-  }
-}
-
-// Recusively generate struct construction statements of the form:
-// builder.putType(name);
-// and insert manual padding.
-void GenStructBody(const StructDef &struct_def, std::string *code_ptr,
-                   const char *nameprefix) {
-  std::string &code = *code_ptr;
-  code += "    builder." + FunctionStart('P') + "rep(";
-  code += NumToString(struct_def.minalign) + ", ";
-  code += NumToString(struct_def.bytesize) + ");\n";
-  for (auto it = struct_def.fields.vec.rbegin();
-       it != struct_def.fields.vec.rend(); ++it) {
-    auto &field = **it;
-    if (field.padding) {
-      code += "    builder." + FunctionStart('P') + "ad(";
-      code += NumToString(field.padding) + ");\n";
-    }
-    if (IsStruct(field.value.type)) {
-      GenStructBody(*field.value.type.struct_def, code_ptr,
-                    (nameprefix + (field.name + "_")).c_str());
-    } else {
-      code += "    builder." + FunctionStart('P') + "ut";
-      code += GenMethod(field.value.type) + "(";
-      code += SourceCast(field.value.type);
-      auto argname = nameprefix + MakeCamel(field.name, lang_.first_camel_upper);
-      code += argname;
-      code += ");\n";
-    }
-  }
-}
-
-std::string GenByteBufferLength(const char *bb_name) {
-  std::string bb_len = bb_name;
-  if (lang_.language == IDLOptions::kCSharp) bb_len += ".Length";
-  else bb_len += ".array().length";
-  return bb_len;
-}
-
-std::string GenOffsetGetter(flatbuffers::FieldDef *key_field,
-                            const char *num = nullptr) {
-  std::string key_offset = "";
-  key_offset += lang_.accessor_prefix_static + "__offset(" +
-    NumToString(key_field->value.offset) + ", ";
-  if (num) {
-    key_offset += num;
-    key_offset += (lang_.language == IDLOptions::kCSharp ?
-      ".Value, builder.DataBuffer)" : ", _bb)");
-  } else {
-    key_offset += GenByteBufferLength("bb");
-    key_offset += " - tableOffset, bb)";
-  }
-  return key_offset;
-}
-
-std::string GenLookupKeyGetter(flatbuffers::FieldDef *key_field) {
-  std::string key_getter = "      ";
-  key_getter += "int tableOffset = " + lang_.accessor_prefix_static;
-  key_getter += "__indirect(vectorLocation + 4 * (start + middle)";
-  key_getter += ", bb);\n      ";
-  if (key_field->value.type.base_type == BASE_TYPE_STRING) {
-    key_getter += "int comp = " + lang_.accessor_prefix_static;
-    key_getter += FunctionStart('C') + "ompareStrings(";
-    key_getter += GenOffsetGetter(key_field);
-    key_getter += ", byteKey, bb);\n";
-  } else {
-    auto get_val = GenGetterForLookupByKey(key_field, "bb");
-    if (lang_.language == IDLOptions::kCSharp) {
-      key_getter += "int comp = " + get_val + ".CompareTo(key);\n";
-    } else {
-      key_getter += GenTypeNameDest(key_field->value.type) + " val = ";
-      key_getter += get_val + ";\n";
-      key_getter += "      int comp = val > key ? 1 : val < key ? -1 : 0;\n";
-    }
-  }
-  return key_getter;
-}
-
-
-std::string GenKeyGetter(flatbuffers::FieldDef *key_field) {
-  std::string key_getter = "";
-  auto data_buffer = (lang_.language == IDLOptions::kCSharp) ?
-    "builder.DataBuffer" : "_bb";
-  if (key_field->value.type.base_type == BASE_TYPE_STRING) {
-    if (lang_.language == IDLOptions::kJava)
-      key_getter += " return ";
-    key_getter += lang_.accessor_prefix_static;
-    key_getter += FunctionStart('C') + "ompareStrings(";
-    key_getter += GenOffsetGetter(key_field, "o1") + ", ";
-    key_getter += GenOffsetGetter(key_field, "o2") + ", " + data_buffer + ")";
-    if (lang_.language == IDLOptions::kJava)
-      key_getter += ";";
-  }
-  else {
-    auto field_getter = GenGetterForLookupByKey(key_field, data_buffer, "o1");
-    if (lang_.language == IDLOptions::kCSharp) {
-      key_getter += field_getter;
-      field_getter = GenGetterForLookupByKey(key_field, data_buffer, "o2");
-      key_getter += ".CompareTo(" + field_getter + ")";
-    }
-    else {
-      key_getter += "\n    " + GenTypeNameDest(key_field->value.type) + " val_1 = ";
-      key_getter += field_getter + ";\n    " + GenTypeNameDest(key_field->value.type);
-      key_getter += " val_2 = ";
-      field_getter = GenGetterForLookupByKey(key_field, data_buffer, "o2");
-      key_getter += field_getter + ";\n";
-      key_getter += "    return val_1 > val_2 ? 1 : val_1 < val_2 ? -1 : 0;\n ";
-    }
-  }
-  return key_getter;
-}
-
-void GenStruct(StructDef &struct_def, std::string *code_ptr) {
-  if (struct_def.generated) return;
-  std::string &code = *code_ptr;
-
-  // Generate a struct accessor class, with methods of the form:
-  // public type name() { return bb.getType(i + offset); }
-  // or for tables of the form:
-  // public type name() {
-  //   int o = __offset(offset); return o != 0 ? bb.getType(o + i) : default;
-  // }
-  GenComment(struct_def.doc_comment, code_ptr, &lang_.comment_config);
-  code += "public ";
-  if (lang_.language == IDLOptions::kCSharp &&
-      struct_def.attributes.Lookup("csharp_partial")) {
-    // generate a partial class for this C# struct/table
-    code += "partial ";
-  } else {
-    code += lang_.unsubclassable_decl;
-  }
-  code += lang_.accessor_type + struct_def.name;
-  if (lang_.language == IDLOptions::kCSharp) {
-    code += " : IFlatbufferObject";
-    code += lang_.open_curly;
-    code += "  private ";
-    code += struct_def.fixed ? "Struct" : "Table";
-    code += " __p;\n";
-
-    if (lang_.language == IDLOptions::kCSharp) {
-        code += "  public ByteBuffer ByteBuffer { get { return __p.bb; } }\n";
-    }
-
-  } else {
-    code += lang_.inheritance_marker;
-    code += struct_def.fixed ? "Struct" : "Table";
-    code += lang_.open_curly;
-  }
-  if (!struct_def.fixed) {
-    // Generate a special accessor for the table that when used as the root
-    // of a FlatBuffer
-    std::string method_name = FunctionStart('G') + "etRootAs" + struct_def.name;
-    std::string method_signature = "  public static " + struct_def.name + " " +
-                                   method_name;
-
-    // create convenience method that doesn't require an existing object
-    code += method_signature + "(ByteBuffer _bb) ";
-    code += "{ return " + method_name + "(_bb, new " + struct_def.name+ "()); }\n";
-
-    // create method that allows object reuse
-    code += method_signature + "(ByteBuffer _bb, " + struct_def.name + " obj) { ";
-    code += lang_.set_bb_byteorder;
-    code += "return (obj.__assign(_bb." + FunctionStart('G') + "etInt(_bb.";
-    code += lang_.get_bb_position;
-    code += ") + _bb.";
-    code += lang_.get_bb_position;
-    code += ", _bb)); }\n";
-    if (parser_.root_struct_def_ == &struct_def) {
-      if (parser_.file_identifier_.length()) {
-        // Check if a buffer has the identifier.
-        code += "  public static ";
-        code += lang_.bool_type + struct_def.name;
-        code += "BufferHasIdentifier(ByteBuffer _bb) { return ";
-        code += lang_.accessor_prefix_static + "__has_identifier(_bb, \"";
-        code += parser_.file_identifier_;
-        code += "\"); }\n";
-      }
-    }
-  }
-  // Generate the __init method that sets the field in a pre-existing
-  // accessor object. This is to allow object reuse.
-  code += "  public void __init(int _i, ByteBuffer _bb) ";
-  code += "{ " + lang_.accessor_prefix + "bb_pos = _i; ";
-  code += lang_.accessor_prefix + "bb = _bb; }\n";
-  code += "  public " + struct_def.name + " __assign(int _i, ByteBuffer _bb) ";
-  code += "{ __init(_i, _bb); return this; }\n\n";
-  for (auto it = struct_def.fields.vec.begin();
-       it != struct_def.fields.vec.end();
-       ++it) {
-    auto &field = **it;
-    if (field.deprecated) continue;
-    GenComment(field.doc_comment, code_ptr, &lang_.comment_config, "  ");
-    std::string type_name = GenTypeGet(field.value.type);
-    std::string type_name_dest = GenTypeNameDest(field.value.type);
-    std::string conditional_cast = "";
-    std::string optional = "";
-    if (lang_.language == IDLOptions::kCSharp &&
-        !struct_def.fixed &&
-        (field.value.type.base_type == BASE_TYPE_STRUCT ||
-         field.value.type.base_type == BASE_TYPE_UNION ||
-         (field.value.type.base_type == BASE_TYPE_VECTOR &&
-          field.value.type.element == BASE_TYPE_STRUCT))) {
-      optional = lang_.optional_suffix;
-      conditional_cast = "(" + type_name_dest + optional + ")";
-    }
-    std::string dest_mask = DestinationMask(field.value.type, true);
-    std::string dest_cast = DestinationCast(field.value.type);
-    std::string src_cast = SourceCast(field.value.type);
-    std::string method_start = "  public " + type_name_dest + optional + " " +
-                               MakeCamel(field.name, lang_.first_camel_upper);
-    std::string obj = lang_.language == IDLOptions::kCSharp
-      ? "(new " + type_name + "())"
-      : "obj";
-
-    // Most field accessors need to retrieve and test the field offset first,
-    // this is the prefix code for that:
-    auto offset_prefix = " { int o = " + lang_.accessor_prefix + "__offset(" +
-                         NumToString(field.value.offset) +
-                         "); return o != 0 ? ";
-    // Generate the accessors that don't do object reuse.
-    if (field.value.type.base_type == BASE_TYPE_STRUCT) {
-      // Calls the accessor that takes an accessor object with a new object.
-      if (lang_.language != IDLOptions::kCSharp) {
-        code += method_start + "() { return ";
-        code += MakeCamel(field.name, lang_.first_camel_upper);
-        code += "(new ";
-        code += type_name + "()); }\n";
-      }
-    } else if (field.value.type.base_type == BASE_TYPE_VECTOR &&
-               field.value.type.element == BASE_TYPE_STRUCT) {
-      // Accessors for vectors of structs also take accessor objects, this
-      // generates a variant without that argument.
-      if (lang_.language != IDLOptions::kCSharp) {
-        code += method_start + "(int j) { return ";
-        code += MakeCamel(field.name, lang_.first_camel_upper);
-        code += "(new " + type_name + "(), j); }\n";
-      }
-    } else if (field.value.type.base_type == BASE_TYPE_UNION) {
-      if (lang_.language == IDLOptions::kCSharp) {
-        // Union types in C# use generic Table-derived type for better type
-        // safety.
-        method_start += "<TTable>";
-        type_name = type_name_dest;
-      }
-    }
-    std::string getter = dest_cast + GenGetter(field.value.type);
-    code += method_start;
-    std::string default_cast = "";
-    // only create default casts for c# scalars or vectors of scalars
-    if (lang_.language == IDLOptions::kCSharp &&
-        (IsScalar(field.value.type.base_type) ||
-         (field.value.type.base_type == BASE_TYPE_VECTOR &&
-          IsScalar(field.value.type.element)))) {
-      // For scalars, default value will be returned by GetDefaultValue().
-      // If the scalar is an enum, GetDefaultValue() returns an actual c# enum
-      // that doesn't need to be casted. However, default values for enum
-      // elements of vectors are integer literals ("0") and are still casted
-      // for clarity.
-      if (field.value.type.enum_def == nullptr ||
-          field.value.type.base_type == BASE_TYPE_VECTOR) {
-          default_cast = "(" + type_name_dest + ")";
-      }
-    }
-    std::string member_suffix = "; ";
-    if (IsScalar(field.value.type.base_type)) {
-      code += lang_.getter_prefix;
-      member_suffix += lang_.getter_suffix;
-      if (struct_def.fixed) {
-        code += " { return " + getter;
-        code += "(" + lang_.accessor_prefix + "bb_pos + ";
-        code += NumToString(field.value.offset) + ")";
-        code += dest_mask;
-      } else {
-        code += offset_prefix + getter;
-        code += "(o + " + lang_.accessor_prefix + "bb_pos)" + dest_mask;
-        code += " : " + default_cast;
-        code += GenDefaultValue(field.value);
-      }
-    } else {
-      switch (field.value.type.base_type) {
-        case BASE_TYPE_STRUCT:
-          if (lang_.language != IDLOptions::kCSharp) {
-            code += "(" + type_name + " obj" + ")";
-          } else {
-            code += lang_.getter_prefix;
-            member_suffix += lang_.getter_suffix;
-          }
-          if (struct_def.fixed) {
-            code += " { return " + obj + ".__assign(" + lang_.accessor_prefix;
-            code += "bb_pos + " + NumToString(field.value.offset) + ", ";
-            code += lang_.accessor_prefix + "bb)";
-          } else {
-            code += offset_prefix + conditional_cast;
-            code += obj + ".__assign(";
-            code += field.value.type.struct_def->fixed
-                      ? "o + " + lang_.accessor_prefix + "bb_pos"
-                      : lang_.accessor_prefix + "__indirect(o + " +
-                        lang_.accessor_prefix + "bb_pos)";
-            code += ", " + lang_.accessor_prefix + "bb) : null";
-          }
-          break;
-        case BASE_TYPE_STRING:
-          code += lang_.getter_prefix;
-          member_suffix += lang_.getter_suffix;
-          code += offset_prefix + getter + "(o + " + lang_.accessor_prefix;
-          code += "bb_pos) : null";
-          break;
-        case BASE_TYPE_VECTOR: {
-          auto vectortype = field.value.type.VectorType();
-          code += "(";
-          if (vectortype.base_type == BASE_TYPE_STRUCT) {
-            if (lang_.language != IDLOptions::kCSharp)
-              code += type_name + " obj, ";
-            getter = obj + ".__assign";
-          }
-          code += "int j)" + offset_prefix + conditional_cast + getter +"(";
-          auto index = lang_.accessor_prefix + "__vector(o) + j * " +
-                       NumToString(InlineSize(vectortype));
-          if (vectortype.base_type == BASE_TYPE_STRUCT) {
-            code += vectortype.struct_def->fixed
-                      ? index
-                      : lang_.accessor_prefix + "__indirect(" + index + ")";
-            code += ", " + lang_.accessor_prefix + "bb";
-          } else {
-            code += index;
-          }
-          code += ")" + dest_mask + " : ";
-
-          code += field.value.type.element == BASE_TYPE_BOOL ? "false" :
-            (IsScalar(field.value.type.element) ? default_cast + "0" : "null");
-          break;
-        }
-        case BASE_TYPE_UNION:
-          if (lang_.language == IDLOptions::kCSharp) {
-            code += "() where TTable : struct, IFlatbufferObject";
-            code += offset_prefix + "(TTable?)" + getter;
-            code += "<TTable>(o) : null";
-          } else {
-            code += "(" + type_name + " obj)" + offset_prefix + getter;
-            code += "(obj, o) : null";
-          }
-          break;
-        default:
-          assert(0);
-      }
-    }
-    code += member_suffix;
-    code += "}\n";
-    if (field.value.type.base_type == BASE_TYPE_VECTOR) {
-      code += "  public int " + MakeCamel(field.name, lang_.first_camel_upper);
-      code += "Length";
-      code += lang_.getter_prefix;
-      code += offset_prefix;
-      code += lang_.accessor_prefix + "__vector_len(o) : 0; ";
-      code += lang_.getter_suffix;
-      code += "}\n";
-    }
-    // Generate a ByteBuffer accessor for strings & vectors of scalars.
-    if ((field.value.type.base_type == BASE_TYPE_VECTOR &&
-         IsScalar(field.value.type.VectorType().base_type)) ||
-         field.value.type.base_type == BASE_TYPE_STRING) {
-      switch (lang_.language) {
-        case IDLOptions::kJava:
-          code += "  public ByteBuffer ";
-          code += MakeCamel(field.name, lang_.first_camel_upper);
-          code += "AsByteBuffer() { return ";
-          code += lang_.accessor_prefix + "__vector_as_bytebuffer(";
-          code += NumToString(field.value.offset) + ", ";
-          code += NumToString(field.value.type.base_type == BASE_TYPE_STRING
-                              ? 1
-                              : InlineSize(field.value.type.VectorType()));
-          code += "); }\n";
-          break;
-        case IDLOptions::kCSharp:
-          code += "  public ArraySegment<byte>? Get";
-          code += MakeCamel(field.name, lang_.first_camel_upper);
-          code += "Bytes() { return ";
-          code += lang_.accessor_prefix + "__vector_as_arraysegment(";
-          code += NumToString(field.value.offset);
-          code += "); }\n";
-          break;
-        default:
-          break;
-      }
-    }
-  // generate object accessors if is nested_flatbuffer
-  auto nested = field.attributes.Lookup("nested_flatbuffer");
-  if (nested) {
-    auto nested_qualified_name =
-      parser_.namespaces_.back()->GetFullyQualifiedName(nested->constant);
-    auto nested_type = parser_.structs_.Lookup(nested_qualified_name);
-    auto nested_type_name = WrapInNameSpace(*nested_type);
-    auto nestedMethodName = MakeCamel(field.name, lang_.first_camel_upper)
-      + "As" + nested_type_name;
-    auto getNestedMethodName = nestedMethodName;
-    if (lang_.language == IDLOptions::kCSharp) {
-      getNestedMethodName = "Get" + nestedMethodName;
-      conditional_cast = "(" + nested_type_name + lang_.optional_suffix + ")";
-    }
-    if (lang_.language != IDLOptions::kCSharp) {
-      code += "  public " + nested_type_name + lang_.optional_suffix + " ";
-      code += nestedMethodName + "() { return ";
-      code += getNestedMethodName + "(new " + nested_type_name + "()); }\n";
-    } else {
-      obj = "(new " + nested_type_name + "())";
-    }
-    code += "  public " + nested_type_name + lang_.optional_suffix + " ";
-    code += getNestedMethodName + "(";
-    if (lang_.language != IDLOptions::kCSharp)
-      code += nested_type_name + " obj";
-    code += ") { int o = " + lang_.accessor_prefix + "__offset(";
-    code += NumToString(field.value.offset) +"); ";
-    code += "return o != 0 ? " + conditional_cast + obj + ".__assign(";
-    code += lang_.accessor_prefix;
-    code += "__indirect(" + lang_.accessor_prefix + "__vector(o)), ";
-    code += lang_.accessor_prefix + "bb) : null; }\n";
-  }
-    // Generate mutators for scalar fields or vectors of scalars.
-    if (parser_.opts.mutable_buffer) {
-      auto underlying_type = field.value.type.base_type == BASE_TYPE_VECTOR
-                    ? field.value.type.VectorType()
-                    : field.value.type;
-      // Boolean parameters have to be explicitly converted to byte
-      // representation.
-      auto setter_parameter = underlying_type.base_type == BASE_TYPE_BOOL
-        ? "(byte)(" + field.name + " ? 1 : 0)"
-        : field.name;
-      auto mutator_prefix = MakeCamel("mutate", lang_.first_camel_upper);
-      // A vector mutator also needs the index of the vector element it should
-      // mutate.
-      auto mutator_params = (field.value.type.base_type == BASE_TYPE_VECTOR
-        ? "(int j, "
-        : "(") + GenTypeNameDest(underlying_type) + " " + field.name + ") { ";
-      auto setter_index = field.value.type.base_type == BASE_TYPE_VECTOR
-        ? lang_.accessor_prefix + "__vector(o) + j * " +
-          NumToString(InlineSize(underlying_type))
-        : (struct_def.fixed
-            ? lang_.accessor_prefix + "bb_pos + " +
-              NumToString(field.value.offset)
-            : "o + " + lang_.accessor_prefix + "bb_pos");
-      if (IsScalar(field.value.type.base_type) ||
-          (field.value.type.base_type == BASE_TYPE_VECTOR &&
-          IsScalar(field.value.type.VectorType().base_type))) {
-        code += "  public ";
-        code += struct_def.fixed ? "void " : lang_.bool_type;
-        code += mutator_prefix + MakeCamel(field.name, true);
-        code += mutator_params;
-        if (struct_def.fixed) {
-          code += GenSetter(underlying_type) + "(" + setter_index + ", ";
-          code += src_cast + setter_parameter + "); }\n";
-        } else {
-          code += "int o = " + lang_.accessor_prefix + "__offset(";
-          code += NumToString(field.value.offset) + ");";
-          code += " if (o != 0) { " + GenSetter(underlying_type);
-          code += "(" + setter_index + ", " + src_cast + setter_parameter +
-                  "); return true; } else { return false; } }\n";
-        }
-      }
-    }
-  }
-  code += "\n";
-  flatbuffers::FieldDef *key_field = nullptr;
-  if (struct_def.fixed) {
-    // create a struct constructor function
-    code += "  public static " + GenOffsetType(struct_def) + " ";
-    code += FunctionStart('C') + "reate";
-    code += struct_def.name + "(FlatBufferBuilder builder";
-    GenStructArgs(struct_def, code_ptr, "");
-    code += ") {\n";
-    GenStructBody(struct_def, code_ptr, "");
-    code += "    return ";
-    code += GenOffsetConstruct(struct_def,
-                               "builder." + std::string(lang_.get_fbb_offset));
-    code += ";\n  }\n";
-  } else {
-    // Generate a method that creates a table in one go. This is only possible
-    // when the table has no struct fields, since those have to be created
-    // inline, and there's no way to do so in Java.
-    bool has_no_struct_fields = true;
-    int num_fields = 0;
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      auto &field = **it;
-      if (field.deprecated) continue;
-      if (IsStruct(field.value.type)) {
-        has_no_struct_fields = false;
-      } else {
-        num_fields++;
-      }
-    }
-    if (has_no_struct_fields && num_fields) {
-      // Generate a table constructor of the form:
-      // public static int createName(FlatBufferBuilder builder, args...)
-      code += "  public static " + GenOffsetType(struct_def) + " ";
-      code += FunctionStart('C') + "reate" + struct_def.name;
-      code += "(FlatBufferBuilder builder";
-      for (auto it = struct_def.fields.vec.begin();
-           it != struct_def.fields.vec.end(); ++it) {
-        auto &field = **it;
-        if (field.deprecated) continue;
-        code += ",\n      ";
-        code += GenTypeBasic(DestinationType(field.value.type, false));
-        code += " ";
-        code += field.name;
-        if (!IsScalar(field.value.type.base_type)) code += "Offset";
-
-        // Java doesn't have defaults, which means this method must always
-        // supply all arguments, and thus won't compile when fields are added.
-        if (lang_.language != IDLOptions::kJava) {
-          code += " = ";
-          code += GenDefaultValueBasic(field.value);
-        }
-      }
-      code += ") {\n    builder.";
-      code += FunctionStart('S') + "tartObject(";
-      code += NumToString(struct_def.fields.vec.size()) + ");\n";
-      for (size_t size = struct_def.sortbysize ? sizeof(largest_scalar_t) : 1;
-           size;
-           size /= 2) {
-        for (auto it = struct_def.fields.vec.rbegin();
-             it != struct_def.fields.vec.rend(); ++it) {
-          auto &field = **it;
-          if (!field.deprecated &&
-              (!struct_def.sortbysize ||
-               size == SizeOf(field.value.type.base_type))) {
-            code += "    " + struct_def.name + ".";
-            code += FunctionStart('A') + "dd";
-            code += MakeCamel(field.name) + "(builder, " + field.name;
-            if (!IsScalar(field.value.type.base_type)) code += "Offset";
-            code += ");\n";
-          }
-        }
-      }
-      code += "    return " + struct_def.name + ".";
-      code += FunctionStart('E') + "nd" + struct_def.name;
-      code += "(builder);\n  }\n\n";
-    }
-    // Generate a set of static methods that allow table construction,
-    // of the form:
-    // public static void addName(FlatBufferBuilder builder, short name)
-    // { builder.addShort(id, name, default); }
-    // Unlike the Create function, these always work.
-    code += "  public static void " + FunctionStart('S') + "tart";
-    code += struct_def.name;
-    code += "(FlatBufferBuilder builder) { builder.";
-    code += FunctionStart('S') + "tartObject(";
-    code += NumToString(struct_def.fields.vec.size()) + "); }\n";
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      auto &field = **it;
-      if (field.deprecated) continue;
-      if (field.key) key_field = &field;
-      code += "  public static void " + FunctionStart('A') + "dd";
-      code += MakeCamel(field.name);
-      code += "(FlatBufferBuilder builder, ";
-      code += GenTypeBasic(DestinationType(field.value.type, false));
-      auto argname = MakeCamel(field.name, false);
-      if (!IsScalar(field.value.type.base_type)) argname += "Offset";
-      code += " " + argname + ") { builder." + FunctionStart('A') + "dd";
-      code += GenMethod(field.value.type) + "(";
-      code += NumToString(it - struct_def.fields.vec.begin()) + ", ";
-      code += SourceCastBasic(field.value.type);
-      code += argname;
-      if (!IsScalar(field.value.type.base_type) &&
-          field.value.type.base_type != BASE_TYPE_UNION &&
-          lang_.language == IDLOptions::kCSharp) {
-        code += ".Value";
-      }
-      code += ", ";
-      if (lang_.language == IDLOptions::kJava)
-        code += SourceCastBasic( field.value.type );
-      code += GenDefaultValue(field.value, false);
-      code += "); }\n";
-      if (field.value.type.base_type == BASE_TYPE_VECTOR) {
-        auto vector_type = field.value.type.VectorType();
-        auto alignment = InlineAlignment(vector_type);
-        auto elem_size = InlineSize(vector_type);
-        if (!IsStruct(vector_type)) {
-          // Generate a method to create a vector from a Java array.
-          code += "  public static " + GenVectorOffsetType() + " ";
-          code += FunctionStart('C') + "reate";
-          code += MakeCamel(field.name);
-          code += "Vector(FlatBufferBuilder builder, ";
-          code += GenTypeBasic(vector_type) + "[] data) ";
-          code += "{ builder." + FunctionStart('S') + "tartVector(";
-          code += NumToString(elem_size);
-          code += ", data." + FunctionStart('L') + "ength, ";
-          code += NumToString(alignment);
-          code += "); for (int i = data.";
-          code += FunctionStart('L') + "ength - 1; i >= 0; i--) builder.";
-          code += FunctionStart('A') + "dd";
-          code += GenMethod(vector_type);
-          code += "(";
-          code += SourceCastBasic(vector_type, false);
-          code += "data[i]";
-          if (lang_.language == IDLOptions::kCSharp &&
-              (vector_type.base_type == BASE_TYPE_STRUCT ||
-               vector_type.base_type == BASE_TYPE_STRING))
-            code += ".Value";
-          code += "); return ";
-          code += "builder." + FunctionStart('E') + "ndVector(); }\n";
-        }
-        // Generate a method to start a vector, data to be added manually after.
-        code += "  public static void " + FunctionStart('S') + "tart";
-        code += MakeCamel(field.name);
-        code += "Vector(FlatBufferBuilder builder, int numElems) ";
-        code += "{ builder." + FunctionStart('S') + "tartVector(";
-        code += NumToString(elem_size);
-        code += ", numElems, " + NumToString(alignment);
-        code += "); }\n";
-      }
-    }
-    code += "  public static " + GenOffsetType(struct_def) + " ";
-    code += FunctionStart('E') + "nd" + struct_def.name;
-    code += "(FlatBufferBuilder builder) {\n    int o = builder.";
-    code += FunctionStart('E') + "ndObject();\n";
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end();
-         ++it) {
-      auto &field = **it;
-      if (!field.deprecated && field.required) {
-        code += "    builder." + FunctionStart('R') + "equired(o, ";
-        code += NumToString(field.value.offset);
-        code += ");  // " + field.name + "\n";
-      }
-    }
-    code += "    return " + GenOffsetConstruct(struct_def, "o") + ";\n  }\n";
-    if (parser_.root_struct_def_ == &struct_def) {
-      code += "  public static void ";
-      code += FunctionStart('F') + "inish" + struct_def.name;
-      code += "Buffer(FlatBufferBuilder builder, " + GenOffsetType(struct_def);
-      code += " offset) {";
-      code += " builder." + FunctionStart('F') + "inish(offset";
-      if (lang_.language == IDLOptions::kCSharp) {
-        code += ".Value";
-      }
-
-      if (parser_.file_identifier_.length())
-        code += ", \"" + parser_.file_identifier_ + "\"";
-      code += "); }\n";
-    }
-  }
-  // Only generate key compare function for table,
-  // because `key_field` is not set for struct
-  if (struct_def.has_key && !struct_def.fixed) {
-    if (lang_.language == IDLOptions::kJava) {
-      code += "\n  @Override\n  protected int keysCompare(";
-      code += "Integer o1, Integer o2, ByteBuffer _bb) {";
-      code += GenKeyGetter(key_field);
-      code += " }\n";
-    }
-    else {
-      code += "\n  public static VectorOffset ";
-      code += "CreateMySortedVectorOfTables(FlatBufferBuilder builder, ";
-      code += "Offset<" + struct_def.name + ">";
-      code += "[] offsets) {\n";
-      code += "    Array.Sort(offsets, (Offset<" + struct_def.name +
-        "> o1, Offset<" + struct_def.name + "> o2) => " + GenKeyGetter(key_field);
-      code += ");\n";
-      code += "    return builder.CreateVectorOfTables(offsets);\n  }\n";
-    }
-
-    code += "\n  public static " + struct_def.name + lang_.optional_suffix;
-    code += " " + FunctionStart('L') + "ookupByKey(" + GenVectorOffsetType();
-    code += " vectorOffset, " + GenTypeNameDest(key_field->value.type);
-    code += " key, ByteBuffer bb) {\n";
-    if (key_field->value.type.base_type == BASE_TYPE_STRING) {
-      code += "    byte[] byteKey = ";
-      if (lang_.language == IDLOptions::kJava)
-        code += "key.getBytes(Table.UTF8_CHARSET.get());\n";
-      else
-        code += "System.Text.Encoding.UTF8.GetBytes(key);\n";
-    }
-    code += "    int vectorLocation = " + GenByteBufferLength("bb");
-    code += " - vectorOffset";
-    if (lang_.language == IDLOptions::kCSharp) code += ".Value";
-    code += ";\n    int span = ";
-    code += "bb." + FunctionStart('G') + "etInt(vectorLocation);\n";
-    code += "    int start = 0;\n";
-    code += "    vectorLocation += 4;\n";
-    code += "    while (span != 0) {\n";
-    code += "      int middle = span / 2;\n";
-    code += GenLookupKeyGetter(key_field);
-    code += "      if (comp > 0) {\n";
-    code += "        span = middle;\n";
-    code += "      } else if (comp < 0) {\n";
-    code += "        middle++;\n";
-    code += "        start += middle;\n";
-    code += "        span -= middle;\n";
-    code += "      } else {\n";
-    code += "        return new " + struct_def.name;
-    code += "().__assign(tableOffset, bb);\n";
-    code += "      }\n    }\n";
-    code += "    return null;\n";
-    code += "  }\n";
-  }
-  code += "}";
-  // Java does not need the closing semi-colon on class definitions.
-  code += (lang_.language != IDLOptions::kJava) ? ";" : "";
-  code += "\n\n";
-}
-    const LanguageParameters& lang_;
-    // This tracks the current namespace used to determine if a type need to be prefixed by its namespace
-    const Namespace *cur_name_space_;
-};
-}  // namespace general
-
-bool GenerateGeneral(const Parser &parser, const std::string &path,
-                     const std::string &file_name) {
-  general::GeneralGenerator generator(parser, path, file_name);
-  return generator.generate();
-}
-
-std::string GeneralMakeRule(const Parser &parser, const std::string &path,
-                            const std::string &file_name) {
-  assert(parser.opts.lang <= IDLOptions::kMAX);
-  const auto &lang = GetLangParams(parser.opts.lang);
-
-  std::string make_rule;
-
-  for (auto it = parser.enums_.vec.begin(); it != parser.enums_.vec.end();
-       ++it) {
-    auto &enum_def = **it;
-    if (make_rule != "") make_rule += " ";
-    std::string directory =
-        BaseGenerator::NamespaceDir(parser, path, *enum_def.defined_namespace);
-    make_rule += directory + enum_def.name + lang.file_extension;
-  }
-
-  for (auto it = parser.structs_.vec.begin(); it != parser.structs_.vec.end();
-       ++it) {
-    auto &struct_def = **it;
-    if (make_rule != "") make_rule += " ";
-    std::string directory =
-        BaseGenerator::NamespaceDir(parser, path,
-                                    *struct_def.defined_namespace);
-    make_rule += directory + struct_def.name + lang.file_extension;
-  }
-
-  make_rule += ": ";
-  auto included_files = parser.GetIncludedFilesRecursive(file_name);
-  for (auto it = included_files.begin(); it != included_files.end(); ++it) {
-    make_rule += " " + *it;
-  }
-  return make_rule;
-}
-
-std::string BinaryFileName(const Parser &parser,
-                           const std::string &path,
-                           const std::string &file_name) {
-  auto ext = parser.file_extension_.length() ? parser.file_extension_ : "bin";
-  return path + file_name + "." + ext;
-}
-
-bool GenerateBinary(const Parser &parser,
-                    const std::string &path,
-                    const std::string &file_name) {
-  return !parser.builder_.GetSize() ||
-         flatbuffers::SaveFile(
-           BinaryFileName(parser, path, file_name).c_str(),
-           reinterpret_cast<char *>(parser.builder_.GetBufferPointer()),
-           parser.builder_.GetSize(),
-           true);
-}
-
-std::string BinaryMakeRule(const Parser &parser,
-                           const std::string &path,
-                           const std::string &file_name) {
-  if (!parser.builder_.GetSize()) return "";
-  std::string filebase = flatbuffers::StripPath(
-      flatbuffers::StripExtension(file_name));
-  std::string make_rule = BinaryFileName(parser, path, filebase) + ": " +
-      file_name;
-  auto included_files = parser.GetIncludedFilesRecursive(
-      parser.root_struct_def_->file);
-  for (auto it = included_files.begin();
-       it != included_files.end(); ++it) {
-    make_rule += " " + *it;
-  }
-  return make_rule;
-}
-
-}  // namespace flatbuffers
diff --git a/third_party/flatbuffers/src/idl_gen_go.cpp b/third_party/flatbuffers/src/idl_gen_go.cpp
deleted file mode 100644
index 58a60aa..0000000
--- a/third_party/flatbuffers/src/idl_gen_go.cpp
+++ /dev/null
@@ -1,809 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// independent from idl_parser, since this code is not needed for most clients
-
-#include <string>
-#include <sstream>
-
-#include "flatbuffers/flatbuffers.h"
-#include "flatbuffers/idl.h"
-#include "flatbuffers/util.h"
-#include "flatbuffers/code_generators.h"
-
-#ifdef _WIN32
-#include <direct.h>
-#define PATH_SEPARATOR "\\"
-#define mkdir(n, m) _mkdir(n)
-#else
-#include <sys/stat.h>
-#define PATH_SEPARATOR "/"
-#endif
-
-namespace flatbuffers {
-namespace go {
-
-// see https://golang.org/ref/spec#Keywords
-static const char *g_golang_keywords[] = {
-  "break", "default", "func", "interface", "select", "case", "defer", "go",
-  "map", "struct", "chan", "else", "goto", "package", "switch", "const",
-  "fallthrough", "if", "range", "type", "continue", "for", "import", "return", "var",
-};
-
-static std::string GenGetter(const Type &type);
-static std::string GenMethod(const FieldDef &field);
-static void GenStructBuilder(const StructDef &struct_def,
-                             std::string *code_ptr);
-static void GenReceiver(const StructDef &struct_def, std::string *code_ptr);
-static std::string GenTypeBasic(const Type &type);
-static std::string GenTypeGet(const Type &type);
-static std::string TypeName(const FieldDef &field);
-static std::string GoIdentity(const std::string& name) {
-  for (size_t i=0; i<sizeof(g_golang_keywords)/sizeof(g_golang_keywords[0]); i++) {
-    if (name == g_golang_keywords[i]) {
-      return MakeCamel(name + "_", false);
-    }
-  }
-
-  return MakeCamel(name, false);
-}
-
-
-// Most field accessors need to retrieve and test the field offset first,
-// this is the prefix code for that.
-std::string OffsetPrefix(const FieldDef &field) {
-  return "{\n\to := flatbuffers.UOffsetT(rcv._tab.Offset(" +
-         NumToString(field.value.offset) +
-         "))\n\tif o != 0 {\n";
-}
-
-// Begin a class declaration.
-static void BeginClass(const StructDef &struct_def, std::string *code_ptr) {
-  std::string &code = *code_ptr;
-
-  code += "type " + struct_def.name + " struct {\n\t";
-
-  // _ is reserved in flatbuffers field names, so no chance of name conflict:
-  code += "_tab ";
-  code += struct_def.fixed ? "flatbuffers.Struct" : "flatbuffers.Table";
-  code += "\n}\n\n";
-}
-
-// Begin enum code with a class declaration.
-static void BeginEnum(std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "const (\n";
-}
-
-// A single enum member.
-static void EnumMember(const EnumDef &enum_def, const EnumVal ev,
-                       std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "\t";
-  code += enum_def.name;
-  code += ev.name;
-  code += " = ";
-  code += NumToString(ev.value) + "\n";
-}
-
-// End enum code.
-static void EndEnum(std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += ")\n\n";
-}
-
-// Begin enum name code.
-static void BeginEnumNames(const EnumDef &enum_def, std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "var EnumNames";
-  code += enum_def.name;
-  code += " = map[int]string{\n";
-}
-
-// A single enum name member.
-static void EnumNameMember(const EnumDef &enum_def, const EnumVal ev,
-                           std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "\t";
-  code += enum_def.name;
-  code += ev.name;
-  code += ":\"";
-  code += ev.name;
-  code += "\",\n";
-}
-
-// End enum name code.
-static void EndEnumNames(std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "}\n\n";
-}
-
-// Initialize a new struct or table from existing data.
-static void NewRootTypeFromBuffer(const StructDef &struct_def,
-                                  std::string *code_ptr) {
-  std::string &code = *code_ptr;
-
-  code += "func GetRootAs";
-  code += struct_def.name;
-  code += "(buf []byte, offset flatbuffers.UOffsetT) ";
-  code += "*" + struct_def.name + "";
-  code += " {\n";
-  code += "\tn := flatbuffers.GetUOffsetT(buf[offset:])\n";
-  code += "\tx := &" + struct_def.name + "{}\n";
-  code += "\tx.Init(buf, n+offset)\n";
-  code += "\treturn x\n";
-  code += "}\n\n";
-}
-
-// Initialize an existing object with other data, to avoid an allocation.
-static void InitializeExisting(const StructDef &struct_def,
-                               std::string *code_ptr) {
-  std::string &code = *code_ptr;
-
-  GenReceiver(struct_def, code_ptr);
-  code += " Init(buf []byte, i flatbuffers.UOffsetT) ";
-  code += "{\n";
-  code += "\trcv._tab.Bytes = buf\n";
-  code += "\trcv._tab.Pos = i\n";
-  code += "}\n\n";
-}
-
-// Implement the table accessor
-static void GenTableAccessor(const StructDef &struct_def,
-                               std::string *code_ptr) {
-  std::string &code = *code_ptr;
-
-  GenReceiver(struct_def, code_ptr);
-  code += " Table() flatbuffers.Table ";
-  code += "{\n";
-
-  if (struct_def.fixed) {
-      code += "\treturn rcv._tab.Table\n";
-  } else {
-      code += "\treturn rcv._tab\n";
-  }
-  code += "}\n\n";
-}
-
-// Get the length of a vector.
-static void GetVectorLen(const StructDef &struct_def,
-                         const FieldDef &field,
-                         std::string *code_ptr) {
-  std::string &code = *code_ptr;
-
-  GenReceiver(struct_def, code_ptr);
-  code += " " + MakeCamel(field.name) + "Length(";
-  code += ") int " + OffsetPrefix(field);
-  code += "\t\treturn rcv._tab.VectorLen(o)\n\t}\n";
-  code += "\treturn 0\n}\n\n";
-}
-
-// Get a [ubyte] vector as a byte slice.
-static void GetUByteSlice(const StructDef &struct_def,
-                          const FieldDef &field,
-                          std::string *code_ptr) {
-  std::string &code = *code_ptr;
-
-  GenReceiver(struct_def, code_ptr);
-  code += " " + MakeCamel(field.name) + "Bytes(";
-  code += ") []byte " + OffsetPrefix(field);
-  code += "\t\treturn rcv._tab.ByteVector(o + rcv._tab.Pos)\n\t}\n";
-  code += "\treturn nil\n}\n\n";
-}
-
-// Get the value of a struct's scalar.
-static void GetScalarFieldOfStruct(const StructDef &struct_def,
-                                   const FieldDef &field,
-                                   std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  std::string getter = GenGetter(field.value.type);
-  GenReceiver(struct_def, code_ptr);
-  code += " " + MakeCamel(field.name);
-  code += "() " + TypeName(field) + " {\n";
-  code +="\treturn " + getter;
-  code += "(rcv._tab.Pos + flatbuffers.UOffsetT(";
-  code += NumToString(field.value.offset) + "))\n}\n";
-}
-
-// Get the value of a table's scalar.
-static void GetScalarFieldOfTable(const StructDef &struct_def,
-                                  const FieldDef &field,
-                                  std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  std::string getter = GenGetter(field.value.type);
-  GenReceiver(struct_def, code_ptr);
-  code += " " + MakeCamel(field.name);
-  code += "() " + TypeName(field) + " ";
-  code += OffsetPrefix(field) + "\t\treturn " + getter;
-  code += "(o + rcv._tab.Pos)\n\t}\n";
-  code += "\treturn " + field.value.constant + "\n";
-  code += "}\n\n";
-}
-
-// Get a struct by initializing an existing struct.
-// Specific to Struct.
-static void GetStructFieldOfStruct(const StructDef &struct_def,
-                                   const FieldDef &field,
-                                   std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  GenReceiver(struct_def, code_ptr);
-  code += " " + MakeCamel(field.name);
-  code += "(obj *" + TypeName(field);
-  code += ") *" + TypeName(field);
-  code += " {\n";
-  code += "\tif obj == nil {\n";
-  code += "\t\tobj = new(" + TypeName(field) + ")\n";
-  code += "\t}\n";
-  code += "\tobj.Init(rcv._tab.Bytes, rcv._tab.Pos+";
-  code += NumToString(field.value.offset) + ")";
-  code += "\n\treturn obj\n";
-  code += "}\n";
-}
-
-// Get a struct by initializing an existing struct.
-// Specific to Table.
-static void GetStructFieldOfTable(const StructDef &struct_def,
-                                  const FieldDef &field,
-                                  std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  GenReceiver(struct_def, code_ptr);
-  code += " " + MakeCamel(field.name);
-  code += "(obj *";
-  code += TypeName(field);
-  code += ") *" + TypeName(field) + " " + OffsetPrefix(field);
-  if (field.value.type.struct_def->fixed) {
-    code += "\t\tx := o + rcv._tab.Pos\n";
-  } else {
-    code += "\t\tx := rcv._tab.Indirect(o + rcv._tab.Pos)\n";
-  }
-  code += "\t\tif obj == nil {\n";
-  code += "\t\t\tobj = new(" + TypeName(field) + ")\n";
-  code += "\t\t}\n";
-  code += "\t\tobj.Init(rcv._tab.Bytes, x)\n";
-  code += "\t\treturn obj\n\t}\n\treturn nil\n";
-  code += "}\n\n";
-}
-
-// Get the value of a string.
-static void GetStringField(const StructDef &struct_def,
-                           const FieldDef &field,
-                           std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  GenReceiver(struct_def, code_ptr);
-  code += " " +  MakeCamel(field.name);
-  code += "() " + TypeName(field) + " ";
-  code += OffsetPrefix(field) + "\t\treturn " + GenGetter(field.value.type);
-  code += "(o + rcv._tab.Pos)\n\t}\n\treturn nil\n";
-  code += "}\n\n";
-}
-
-// Get the value of a union from an object.
-static void GetUnionField(const StructDef &struct_def,
-                          const FieldDef &field,
-                          std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  GenReceiver(struct_def, code_ptr);
-  code += " " + MakeCamel(field.name) + "(";
-  code += "obj " + TypeName(field) + ") bool ";
-  code += OffsetPrefix(field);
-  code += "\t\t" + GenGetter(field.value.type);
-  code += "(obj, o)\n\t\treturn true\n\t}\n";
-  code += "\treturn false\n";
-  code += "}\n\n";
-}
-
-// Get the value of a vector's struct member.
-static void GetMemberOfVectorOfStruct(const StructDef &struct_def,
-                                      const FieldDef &field,
-                                      std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  auto vectortype = field.value.type.VectorType();
-
-  GenReceiver(struct_def, code_ptr);
-  code += " " + MakeCamel(field.name);
-  code += "(obj *" + TypeName(field);
-  code += ", j int) bool " + OffsetPrefix(field);
-  code += "\t\tx := rcv._tab.Vector(o)\n";
-  code += "\t\tx += flatbuffers.UOffsetT(j) * ";
-  code += NumToString(InlineSize(vectortype)) + "\n";
-  if (!(vectortype.struct_def->fixed)) {
-    code += "\t\tx = rcv._tab.Indirect(x)\n";
-  }
-  code += "\t\tobj.Init(rcv._tab.Bytes, x)\n";
-  code += "\t\treturn true\n\t}\n";
-  code += "\treturn false\n";
-  code += "}\n\n";
-}
-
-// Get the value of a vector's non-struct member. Uses a named return
-// argument to conveniently set the zero value for the result.
-static void GetMemberOfVectorOfNonStruct(const StructDef &struct_def,
-                                         const FieldDef &field,
-                                         std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  auto vectortype = field.value.type.VectorType();
-
-  GenReceiver(struct_def, code_ptr);
-  code += " " + MakeCamel(field.name);
-  code += "(j int) " + TypeName(field) + " ";
-  code += OffsetPrefix(field);
-  code += "\t\ta := rcv._tab.Vector(o)\n";
-  code += "\t\treturn " + GenGetter(field.value.type) + "(";
-  code += "a + flatbuffers.UOffsetT(j*";
-  code += NumToString(InlineSize(vectortype)) + "))\n";
-  code += "\t}\n";
-  if (vectortype.base_type == BASE_TYPE_STRING) {
-    code += "\treturn nil\n";
-  } else {
-    code += "\treturn 0\n";
-  }
-  code += "}\n\n";
-}
-
-// Begin the creator function signature.
-static void BeginBuilderArgs(const StructDef &struct_def,
-                             std::string *code_ptr) {
-  std::string &code = *code_ptr;
-
-  if (code.substr(code.length() - 2) != "\n\n") {
-      // a previous mutate has not put an extra new line
-      code += "\n";
-  }
-  code += "func Create" + struct_def.name;
-  code += "(builder *flatbuffers.Builder";
-}
-
-// Recursively generate arguments for a constructor, to deal with nested
-// structs.
-static void StructBuilderArgs(const StructDef &struct_def,
-                              const char *nameprefix,
-                              std::string *code_ptr) {
-  for (auto it = struct_def.fields.vec.begin();
-       it != struct_def.fields.vec.end();
-       ++it) {
-    auto &field = **it;
-    if (IsStruct(field.value.type)) {
-      // Generate arguments for a struct inside a struct. To ensure names
-      // don't clash, and to make it obvious these arguments are constructing
-      // a nested struct, prefix the name with the field name.
-      StructBuilderArgs(*field.value.type.struct_def,
-                        (nameprefix + (field.name + "_")).c_str(),
-                        code_ptr);
-    } else {
-      std::string &code = *code_ptr;
-      code += (std::string)", " + nameprefix;
-      code += GoIdentity(field.name);
-      code += " " + GenTypeBasic(field.value.type);
-    }
-  }
-}
-
-// End the creator function signature.
-static void EndBuilderArgs(std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += ") flatbuffers.UOffsetT {\n";
-}
-
-// Recursively generate struct construction statements and instert manual
-// padding.
-static void StructBuilderBody(const StructDef &struct_def,
-                              const char *nameprefix,
-                              std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "\tbuilder.Prep(" + NumToString(struct_def.minalign) + ", ";
-  code += NumToString(struct_def.bytesize) + ")\n";
-  for (auto it = struct_def.fields.vec.rbegin();
-       it != struct_def.fields.vec.rend();
-       ++it) {
-    auto &field = **it;
-    if (field.padding)
-      code += "\tbuilder.Pad(" + NumToString(field.padding) + ")\n";
-    if (IsStruct(field.value.type)) {
-      StructBuilderBody(*field.value.type.struct_def,
-                        (nameprefix + (field.name + "_")).c_str(),
-                        code_ptr);
-    } else {
-      code += "\tbuilder.Prepend" + GenMethod(field) + "(";
-      code += nameprefix + GoIdentity(field.name) + ")\n";
-    }
-  }
-}
-
-static void EndBuilderBody(std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "\treturn builder.Offset()\n";
-  code += "}\n";
-}
-
-// Get the value of a table's starting offset.
-static void GetStartOfTable(const StructDef &struct_def,
-                            std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "func " + struct_def.name + "Start";
-  code += "(builder *flatbuffers.Builder) {\n";
-  code += "\tbuilder.StartObject(";
-  code += NumToString(struct_def.fields.vec.size());
-  code += ")\n}\n";
-}
-
-// Set the value of a table's field.
-static void BuildFieldOfTable(const StructDef &struct_def,
-                              const FieldDef &field,
-                              const size_t offset,
-                              std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "func " + struct_def.name + "Add" + MakeCamel(field.name);
-  code += "(builder *flatbuffers.Builder, ";
-  code += GoIdentity(field.name) + " ";
-  if (!IsScalar(field.value.type.base_type) && (!struct_def.fixed)) {
-    code += "flatbuffers.UOffsetT";
-  } else {
-    code += GenTypeBasic(field.value.type);
-  }
-  code += ") {\n";
-  code += "\tbuilder.Prepend";
-  code += GenMethod(field) + "Slot(";
-  code += NumToString(offset) + ", ";
-  if (!IsScalar(field.value.type.base_type) && (!struct_def.fixed)) {
-    code += "flatbuffers.UOffsetT";
-    code += "(";
-    code += GoIdentity(field.name) + ")";
-  } else {
-    code += GoIdentity(field.name);
-  }
-  code += ", " + field.value.constant;
-  code += ")\n}\n";
-}
-
-// Set the value of one of the members of a table's vector.
-static void BuildVectorOfTable(const StructDef &struct_def,
-                               const FieldDef &field,
-                               std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "func " + struct_def.name + "Start";
-  code += MakeCamel(field.name);
-  code += "Vector(builder *flatbuffers.Builder, numElems int) ";
-  code += "flatbuffers.UOffsetT {\n\treturn builder.StartVector(";
-  auto vector_type = field.value.type.VectorType();
-  auto alignment = InlineAlignment(vector_type);
-  auto elem_size = InlineSize(vector_type);
-  code += NumToString(elem_size);
-  code += ", numElems, " + NumToString(alignment);
-  code += ")\n}\n";
-}
-
-// Get the offset of the end of a table.
-static void GetEndOffsetOnTable(const StructDef &struct_def,
-                                std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "func " + struct_def.name + "End";
-  code += "(builder *flatbuffers.Builder) flatbuffers.UOffsetT ";
-  code += "{\n\treturn builder.EndObject()\n}\n";
-}
-
-// Generate the receiver for function signatures.
-static void GenReceiver(const StructDef &struct_def, std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "func (rcv *" + struct_def.name + ")";
-}
-
-// Generate a struct field getter, conditioned on its child type(s).
-static void GenStructAccessor(const StructDef &struct_def,
-                              const FieldDef &field,
-                              std::string *code_ptr) {
-  GenComment(field.doc_comment, code_ptr, nullptr, "");
-  if (IsScalar(field.value.type.base_type)) {
-    if (struct_def.fixed) {
-      GetScalarFieldOfStruct(struct_def, field, code_ptr);
-    } else {
-      GetScalarFieldOfTable(struct_def, field, code_ptr);
-    }
-  } else {
-    switch (field.value.type.base_type) {
-      case BASE_TYPE_STRUCT:
-        if (struct_def.fixed) {
-          GetStructFieldOfStruct(struct_def, field, code_ptr);
-        } else {
-          GetStructFieldOfTable(struct_def, field, code_ptr);
-        }
-        break;
-      case BASE_TYPE_STRING:
-        GetStringField(struct_def, field, code_ptr);
-        break;
-      case BASE_TYPE_VECTOR: {
-        auto vectortype = field.value.type.VectorType();
-        if (vectortype.base_type == BASE_TYPE_STRUCT) {
-          GetMemberOfVectorOfStruct(struct_def, field, code_ptr);
-        } else {
-          GetMemberOfVectorOfNonStruct(struct_def, field, code_ptr);
-        }
-        break;
-      }
-      case BASE_TYPE_UNION:
-        GetUnionField(struct_def, field, code_ptr);
-        break;
-      default:
-        assert(0);
-    }
-  }
-  if (field.value.type.base_type == BASE_TYPE_VECTOR) {
-    GetVectorLen(struct_def, field, code_ptr);
-    if (field.value.type.element == BASE_TYPE_UCHAR) {
-      GetUByteSlice(struct_def, field, code_ptr);
-    }
-  }
-}
-
-// Mutate the value of a struct's scalar.
-static void MutateScalarFieldOfStruct(const StructDef &struct_def,
-                                   const FieldDef &field,
-                                   std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  std::string type = MakeCamel(GenTypeBasic(field.value.type));
-  std::string setter = "rcv._tab.Mutate" + type;
-  GenReceiver(struct_def, code_ptr);
-  code += " Mutate" + MakeCamel(field.name);
-  code += "(n " + TypeName(field) + ") bool {\n\treturn " + setter;
-  code += "(rcv._tab.Pos+flatbuffers.UOffsetT(";
-  code += NumToString(field.value.offset) + "), n)\n}\n\n";
-}
-
-// Mutate the value of a table's scalar.
-static void MutateScalarFieldOfTable(const StructDef &struct_def,
-                                  const FieldDef &field,
-                                  std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  std::string type = MakeCamel(GenTypeBasic(field.value.type));
-  std::string setter = "rcv._tab.Mutate" + type + "Slot";
-  GenReceiver(struct_def, code_ptr);
-  code += " Mutate" + MakeCamel(field.name);
-  code += "(n " + TypeName(field) + ") bool {\n\treturn ";
-  code += setter + "(" + NumToString(field.value.offset) + ", n)\n";
-  code += "}\n\n";
-}
-
-// Generate a struct field setter, conditioned on its child type(s).
-static void GenStructMutator(const StructDef &struct_def,
-                              const FieldDef &field,
-                              std::string *code_ptr) {
-  GenComment(field.doc_comment, code_ptr, nullptr, "");
-  if (IsScalar(field.value.type.base_type)) {
-    if (struct_def.fixed) {
-      MutateScalarFieldOfStruct(struct_def, field, code_ptr);
-    } else {
-      MutateScalarFieldOfTable(struct_def, field, code_ptr);
-    }
-  }
-}
-
-// Generate table constructors, conditioned on its members' types.
-static void GenTableBuilders(const StructDef &struct_def,
-                             std::string *code_ptr) {
-  GetStartOfTable(struct_def, code_ptr);
-
-  for (auto it = struct_def.fields.vec.begin();
-       it != struct_def.fields.vec.end();
-       ++it) {
-    auto &field = **it;
-    if (field.deprecated) continue;
-
-    auto offset = it - struct_def.fields.vec.begin();
-    BuildFieldOfTable(struct_def, field, offset, code_ptr);
-    if (field.value.type.base_type == BASE_TYPE_VECTOR) {
-      BuildVectorOfTable(struct_def, field, code_ptr);
-    }
-  }
-
-  GetEndOffsetOnTable(struct_def, code_ptr);
-}
-
-// Generate struct or table methods.
-static void GenStruct(const StructDef &struct_def,
-                      std::string *code_ptr) {
-  if (struct_def.generated) return;
-
-  GenComment(struct_def.doc_comment, code_ptr, nullptr);
-  BeginClass(struct_def, code_ptr);
-  if (!struct_def.fixed) {
-    // Generate a special accessor for the table that has been declared as
-    // the root type.
-    NewRootTypeFromBuffer(struct_def, code_ptr);
-  }
-  // Generate the Init method that sets the field in a pre-existing
-  // accessor object. This is to allow object reuse.
-  InitializeExisting(struct_def, code_ptr);
-  // Generate _tab accessor
-  GenTableAccessor(struct_def, code_ptr);
-
-  // Generate struct fields accessors
-  for (auto it = struct_def.fields.vec.begin();
-       it != struct_def.fields.vec.end();
-       ++it) {
-    auto &field = **it;
-    if (field.deprecated) continue;
-
-    GenStructAccessor(struct_def, field, code_ptr);
-    GenStructMutator(struct_def, field, code_ptr);
-  }
-
-  // Generate builders
-  if (struct_def.fixed) {
-    // create a struct constructor function
-    GenStructBuilder(struct_def, code_ptr);
-  } else {
-    // Create a set of functions that allow table construction.
-    GenTableBuilders(struct_def, code_ptr);
-  }
-}
-
-// Generate enum declarations.
-static void GenEnum(const EnumDef &enum_def, std::string *code_ptr) {
-  if (enum_def.generated) return;
-
-  GenComment(enum_def.doc_comment, code_ptr, nullptr);
-  BeginEnum(code_ptr);
-  for (auto it = enum_def.vals.vec.begin();
-       it != enum_def.vals.vec.end();
-       ++it) {
-    auto &ev = **it;
-    GenComment(ev.doc_comment, code_ptr, nullptr, "\t");
-    EnumMember(enum_def, ev, code_ptr);
-  }
-  EndEnum(code_ptr);
-
-  BeginEnumNames(enum_def, code_ptr);
-  for (auto it = enum_def.vals.vec.begin();
-       it != enum_def.vals.vec.end();
-       ++it) {
-    auto &ev = **it;
-    EnumNameMember(enum_def, ev, code_ptr);
-  }
-  EndEnumNames(code_ptr);
-}
-
-// Returns the function name that is able to read a value of the given type.
-static std::string GenGetter(const Type &type) {
-  switch (type.base_type) {
-    case BASE_TYPE_STRING: return "rcv._tab.ByteVector";
-    case BASE_TYPE_UNION: return "rcv._tab.Union";
-    case BASE_TYPE_VECTOR: return GenGetter(type.VectorType());
-    default:
-      return "rcv._tab.Get" + MakeCamel(GenTypeGet(type));
-  }
-}
-
-// Returns the method name for use with add/put calls.
-static std::string GenMethod(const FieldDef &field) {
-  return IsScalar(field.value.type.base_type)
-    ? MakeCamel(GenTypeBasic(field.value.type))
-    : (IsStruct(field.value.type) ? "Struct" : "UOffsetT");
-}
-
-static std::string GenTypeBasic(const Type &type) {
-  static const char *ctypename[] = {
-    #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE) \
-      #GTYPE,
-      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-    #undef FLATBUFFERS_TD
-  };
-  return ctypename[type.base_type];
-}
-
-static std::string GenTypePointer(const Type &type) {
-  switch (type.base_type) {
-    case BASE_TYPE_STRING:
-      return "[]byte";
-    case BASE_TYPE_VECTOR:
-      return GenTypeGet(type.VectorType());
-    case BASE_TYPE_STRUCT:
-      return type.struct_def->name;
-    case BASE_TYPE_UNION:
-      // fall through
-    default:
-      return "*flatbuffers.Table";
-  }
-}
-
-static std::string GenTypeGet(const Type &type) {
-  return IsScalar(type.base_type)
-    ? GenTypeBasic(type)
-    : GenTypePointer(type);
-}
-
-static std::string TypeName(const FieldDef &field) {
-  return GenTypeGet(field.value.type);
-}
-
-// Create a struct with a builder and the struct's arguments.
-static void GenStructBuilder(const StructDef &struct_def,
-                             std::string *code_ptr) {
-  BeginBuilderArgs(struct_def, code_ptr);
-  StructBuilderArgs(struct_def, "", code_ptr);
-  EndBuilderArgs(code_ptr);
-
-  StructBuilderBody(struct_def, "", code_ptr);
-  EndBuilderBody(code_ptr);
-}
-
-class GoGenerator : public BaseGenerator {
- public:
-  GoGenerator(const Parser &parser, const std::string &path,
-              const std::string &file_name, const std::string &go_namespace)
-      : BaseGenerator(parser, path, file_name, "" /* not used*/, "" /* not used */) {
-    std::istringstream iss(go_namespace);
-    std::string component;
-    while (std::getline(iss, component, '.')) {
-      go_namespace_.components.push_back(component);
-    }
-  }
-
-  bool generate() {
-    for (auto it = parser_.enums_.vec.begin(); it != parser_.enums_.vec.end();
-         ++it) {
-      std::string enumcode;
-      go::GenEnum(**it, &enumcode);
-      if (!SaveType(**it, enumcode, false)) return false;
-    }
-
-    for (auto it = parser_.structs_.vec.begin();
-         it != parser_.structs_.vec.end(); ++it) {
-      std::string declcode;
-      go::GenStruct(**it, &declcode);
-      if (!SaveType(**it, declcode, true)) return false;
-    }
-
-    return true;
-  }
-
- private:
-  // Begin by declaring namespace and imports.
-  void BeginFile(const std::string name_space_name, const bool needs_imports,
-                 std::string *code_ptr) {
-    std::string &code = *code_ptr;
-    code = code + "// " + FlatBuffersGeneratedWarning();
-    code += "package " + name_space_name + "\n\n";
-    if (needs_imports) {
-      code += "import (\n";
-      code += "\tflatbuffers \"github.com/google/flatbuffers/go\"\n";
-      code += ")\n\n";
-    }
-  }
-
-  // Save out the generated code for a Go Table type.
-  bool SaveType(const Definition &def, const std::string &classcode,
-                bool needs_imports) {
-    if (!classcode.length()) return true;
-
-    Namespace& ns = go_namespace_.components.empty() ? *def.defined_namespace : go_namespace_;
-    std::string code = "";
-    BeginFile(LastNamespacePart(ns), needs_imports, &code);
-    code += classcode;
-    std::string filename =
-        NamespaceDir(ns) + def.name + ".go";
-    return SaveFile(filename.c_str(), code, false);
-  }
-
-  Namespace go_namespace_;
-};
-}  // namespace go
-
-bool GenerateGo(const Parser &parser, const std::string &path,
-                const std::string &file_name) {
-  go::GoGenerator generator(parser, path, file_name, parser.opts.go_namespace);
-  return generator.generate();
-}
-
-}  // namespace flatbuffers
diff --git a/third_party/flatbuffers/src/idl_gen_grpc.cpp b/third_party/flatbuffers/src/idl_gen_grpc.cpp
deleted file mode 100644
index 2daeac9..0000000
--- a/third_party/flatbuffers/src/idl_gen_grpc.cpp
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// independent from idl_parser, since this code is not needed for most clients
-
-#include "flatbuffers/flatbuffers.h"
-#include "flatbuffers/idl.h"
-#include "flatbuffers/util.h"
-#include "flatbuffers/code_generators.h"
-
-#include "src/compiler/cpp_generator.h"
-#include "src/compiler/go_generator.h"
-
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable: 4512) // C4512: 'class' : assignment operator could not be generated
-#endif
-
-namespace flatbuffers {
-
-class FlatBufMethod : public grpc_generator::Method {
- public:
-  enum Streaming { kNone, kClient, kServer, kBiDi };
-
-  FlatBufMethod(const RPCCall *method)
-    : method_(method) {
-    streaming_ = kNone;
-    auto val = method_->attributes.Lookup("streaming");
-    if (val) {
-      if (val->constant == "client") streaming_ = kClient;
-      if (val->constant == "server") streaming_ = kServer;
-      if (val->constant == "bidi") streaming_ = kBiDi;
-    }
-  }
-
-  std::string name() const { return method_->name; }
-
-  std::string GRPCType(const StructDef &sd) const {
-    return "flatbuffers::BufferRef<" + sd.name + ">";
-  }
-
-  std::string input_type_name() const {
-    return GRPCType(*method_->request);
-  }
-  std::string output_type_name() const {
-    return GRPCType(*method_->response);
-  }
-
-  std::string input_name() const {
-    return (*method_->request).name;
-  }
-
-  std::string output_name() const {
-    return (*method_->response).name;
-  }
-
-  bool NoStreaming() const { return streaming_ == kNone; }
-  bool ClientOnlyStreaming() const { return streaming_ == kClient; }
-  bool ServerOnlyStreaming() const { return streaming_ == kServer; }
-  bool BidiStreaming() const { return streaming_ == kBiDi; }
-
- private:
-  const RPCCall *method_;
-  Streaming streaming_;
-};
-
-class FlatBufService : public grpc_generator::Service {
- public:
-  FlatBufService(const ServiceDef *service) : service_(service) {}
-
-  std::string name() const { return service_->name; }
-
-  int method_count() const {
-    return static_cast<int>(service_->calls.vec.size());
-  };
-
-  std::unique_ptr<const grpc_generator::Method> method(int i) const {
-    return std::unique_ptr<const grpc_generator::Method>(
-          new FlatBufMethod(service_->calls.vec[i]));
-  };
-
- private:
-  const ServiceDef *service_;
-};
-
-class FlatBufPrinter : public grpc_generator::Printer {
- public:
-  FlatBufPrinter(std::string *str)
-    : str_(str), escape_char_('$'), indent_(0) {}
-
-  void Print(const std::map<std::string, std::string> &vars,
-             const char *string_template) {
-    std::string s = string_template;
-    // Replace any occurrences of strings in "vars" that are surrounded
-    // by the escape character by what they're mapped to.
-    size_t pos;
-    while ((pos = s.find(escape_char_)) != std::string::npos) {
-      // Found an escape char, must also find the closing one.
-      size_t pos2 = s.find(escape_char_, pos + 1);
-      // If placeholder not closed, ignore.
-      if (pos2 == std::string::npos) break;
-      auto it = vars.find(s.substr(pos + 1, pos2 - pos - 1));
-      // If unknown placeholder, ignore.
-      if (it == vars.end()) break;
-      // Subtitute placeholder.
-      s.replace(pos, pos2 - pos + 1, it->second);
-    }
-    Print(s.c_str());
-  }
-
-  void Print(const char *s) {
-    // Add this string, but for each part separated by \n, add indentation.
-    for (;;) {
-      // Current indentation.
-      str_->insert(str_->end(), indent_ * 2, ' ');
-      // See if this contains more than one line.
-      const char * lf = strchr(s, '\n');
-      if (lf) {
-        (*str_) += std::string(s, lf + 1);
-        s = lf + 1;
-        if (!*s) break;  // Only continue if there's more lines.
-      } else {
-        (*str_) += s;
-        break;
-      }
-    }
-  }
-
-  void Indent() { indent_++; }
-  void Outdent() { indent_--; assert(indent_ >= 0); }
-
- private:
-  std::string *str_;
-  char escape_char_;
-  int indent_;
-};
-
-class FlatBufFile : public grpc_generator::File {
- public:
-  FlatBufFile(const Parser &parser, const std::string &file_name)
-    : parser_(parser), file_name_(file_name) {}
-  FlatBufFile &operator=(const FlatBufFile &);
-
-  std::string filename() const { return file_name_; }
-  std::string filename_without_ext() const {
-    return StripExtension(file_name_);
-  }
-
-  std::string message_header_ext() const { return "_generated.h"; }
-  std::string service_header_ext() const { return ".grpc.fb.h"; }
-
-  std::string package() const {
-    return parser_.namespaces_.back()->GetFullyQualifiedName("");
-  }
-
-  std::vector<std::string> package_parts() const {
-    return parser_.namespaces_.back()->components;
-  }
-
-  std::string additional_headers() const {
-    return "#include \"flatbuffers/grpc.h\"\n";
-  }
-
-  std::string additional_imports() const {
-    return "import \"github.com/google/flatbuffers/go\"";
-  }
-
-  int service_count() const {
-    return static_cast<int>(parser_.services_.vec.size());
-  };
-
-  std::unique_ptr<const grpc_generator::Service> service(int i) const {
-    return std::unique_ptr<const grpc_generator::Service> (
-          new FlatBufService(parser_.services_.vec[i]));
-  }
-
-  std::unique_ptr<grpc_generator::Printer> CreatePrinter(std::string *str) const {
-    return std::unique_ptr<grpc_generator::Printer>(
-          new FlatBufPrinter(str));
-  }
-
- private:
-  const Parser &parser_;
-  const std::string &file_name_;
-};
-
-class GoGRPCGenerator : public flatbuffers::BaseGenerator {
- public:
-  GoGRPCGenerator(const Parser &parser, const std::string &path,
-                  const std::string &file_name)
-    : BaseGenerator(parser, path, file_name, "", "" /*Unused*/),
-      parser_(parser), path_(path), file_name_(file_name) {}
-
-  bool generate() {
-    FlatBufFile file(parser_, file_name_);
-    grpc_go_generator::Parameters p;
-    p.custom_method_io_type = "flatbuffers.Builder";
-    for (int i = 0; i < file.service_count(); i++) {
-      auto service = file.service(i);
-      const Definition *def = parser_.services_.vec[i];
-      p.package_name = LastNamespacePart(*(def->defined_namespace));
-      std::string output = grpc_go_generator::GenerateServiceSource(&file, service.get(), &p);
-      std::string filename = NamespaceDir(*def->defined_namespace) + def->name + "_grpc.go";
-      if (!flatbuffers::SaveFile(filename.c_str(), output, false))
-        return false;
-    }
-    return true;
-  }
-
- protected:
-  const Parser &parser_;
-  const std::string &path_, &file_name_;
-};
-
-bool GenerateGoGRPC(const Parser &parser,
-                    const std::string &path,
-                    const std::string &file_name) {
-  int nservices = 0;
-  for (auto it = parser.services_.vec.begin();
-       it != parser.services_.vec.end(); ++it) {
-    if (!(*it)->generated) nservices++;
-  }
-  if (!nservices) return true;
-  return GoGRPCGenerator(parser, path, file_name).generate();
-}
-
-bool GenerateCppGRPC(const Parser &parser,
-                  const std::string &path,
-                  const std::string &file_name) {
-
-  int nservices = 0;
-  for (auto it = parser.services_.vec.begin();
-       it != parser.services_.vec.end(); ++it) {
-    if (!(*it)->generated) nservices++;
-  }
-  if (!nservices) return true;
-
-  grpc_cpp_generator::Parameters generator_parameters;
-  // TODO(wvo): make the other parameters in this struct configurable.
-  generator_parameters.use_system_headers = true;
-
-  FlatBufFile fbfile(parser, file_name);
-
-  std::string header_code =
-      grpc_cpp_generator::GetHeaderPrologue(&fbfile, generator_parameters) +
-      grpc_cpp_generator::GetHeaderIncludes(&fbfile, generator_parameters) +
-      grpc_cpp_generator::GetHeaderServices(&fbfile, generator_parameters) +
-      grpc_cpp_generator::GetHeaderEpilogue(&fbfile, generator_parameters);
-
-  std::string source_code =
-      grpc_cpp_generator::GetSourcePrologue(&fbfile, generator_parameters) +
-      grpc_cpp_generator::GetSourceIncludes(&fbfile, generator_parameters) +
-      grpc_cpp_generator::GetSourceServices(&fbfile, generator_parameters) +
-      grpc_cpp_generator::GetSourceEpilogue(&fbfile, generator_parameters);
-
-  return flatbuffers::SaveFile((path + file_name + ".grpc.fb.h").c_str(),
-                               header_code, false) &&
-         flatbuffers::SaveFile((path + file_name + ".grpc.fb.cc").c_str(),
-                               source_code, false);
-}
-
-}  // namespace flatbuffers
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
diff --git a/third_party/flatbuffers/src/idl_gen_js.cpp b/third_party/flatbuffers/src/idl_gen_js.cpp
deleted file mode 100644
index b2839e1..0000000
--- a/third_party/flatbuffers/src/idl_gen_js.cpp
+++ /dev/null
@@ -1,1170 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// independent from idl_parser, since this code is not needed for most clients
-#include <unordered_set>
-#include <unordered_map>
-#include <cassert>
-
-#include "flatbuffers/flatbuffers.h"
-#include "flatbuffers/idl.h"
-#include "flatbuffers/util.h"
-#include "flatbuffers/code_generators.h"
-
-namespace flatbuffers {
-
-const std::string kGeneratedFileNamePostfix = "_generated";
-
-struct JsLanguageParameters {
-  IDLOptions::Language language;
-  std::string file_extension;
-};
-
-struct ReexportDescription {
-  std::string symbol;
-  std::string source_namespace;
-  std::string target_namespace;
-};
-
-const JsLanguageParameters& GetJsLangParams(IDLOptions::Language lang) {
-  static JsLanguageParameters js_language_parameters[] = {
-    {
-      IDLOptions::kJs,
-      ".js",
-    },
-    {
-      IDLOptions::kTs,
-      ".ts",
-    },
-  };
-
-  if (lang == IDLOptions::kJs) {
-    return js_language_parameters[0];
-  } else {
-    assert(lang == IDLOptions::kTs);
-    return js_language_parameters[1];
-  }
-}
-
-static std::string GeneratedFileName(const std::string &path,
-                                     const std::string &file_name,
-                                     const JsLanguageParameters &lang) {
-  return path + file_name + kGeneratedFileNamePostfix + lang.file_extension;
-}
-
-namespace js {
-// Iterate through all definitions we haven't generate code for (enums, structs,
-// and tables) and output them to a single file.
-class JsGenerator : public BaseGenerator {
- public:
-  typedef std::unordered_set<std::string> imported_fileset;
-  typedef std::unordered_multimap<std::string, ReexportDescription>
-          reexport_map;
-
-  JsGenerator(const Parser &parser, const std::string &path,
-              const std::string &file_name)
-      : BaseGenerator(parser, path, file_name, "", "."),
-        lang_(GetJsLangParams(parser_.opts.lang))
-  {
-  };
-  // Iterate through all definitions we haven't generate code for (enums,
-  // structs, and tables) and output them to a single file.
-  bool generate() {
-    if (IsEverythingGenerated()) return true;
-
-    imported_fileset imported_files;
-    reexport_map reexports;
-
-    std::string enum_code, struct_code, import_code, exports_code, code;
-    generateEnums(&enum_code, &exports_code, reexports);
-    generateStructs(&struct_code, &exports_code, imported_files);
-    generateImportDependencies(&import_code, imported_files);
-    generateReexports(&import_code, reexports, imported_files);
-
-    code = code + "// " + FlatBuffersGeneratedWarning();
-
-    // Generate code for all the namespace declarations.
-    GenNamespaces(&code, &exports_code);
-
-    // Output the main declaration code from above.
-    code += import_code;
-
-    code += enum_code;
-    code += struct_code;
-
-    if (lang_.language == IDLOptions::kJs && !exports_code.empty() &&
-        !parser_.opts.skip_js_exports) {
-      code += "// Exports for Node.js and RequireJS\n";
-      code += exports_code;
-    }
-
-    return SaveFile(GeneratedFileName(path_, file_name_, lang_).c_str(), code,
-                    false);
-  }
-
- private:
-  JsLanguageParameters lang_;
-
-  // Generate code for imports
-  void generateImportDependencies(std::string *code_ptr,
-                                  const imported_fileset &imported_files) {
-    std::string &code = *code_ptr;
-    for (auto it = imported_files.begin(); it != imported_files.end(); ++it) {
-      const auto &file = *it;
-      const auto basename =
-          flatbuffers::StripPath(flatbuffers::StripExtension(file));
-      if (basename != file_name_) {
-        const auto file_name = basename + kGeneratedFileNamePostfix;
-        code += GenPrefixedImport(file, file_name);
-      }
-    }
-  }
-
-  // Generate reexports, which might not have been explicitly imported using the
-  // "export import" trick
-  void generateReexports(std::string *code_ptr,
-                         const reexport_map &reexports,
-                         imported_fileset imported_files) {
-      if (!parser_.opts.reexport_ts_modules ||
-          lang_.language != IDLOptions::kTs) {
-          return;
-      }
-
-      std::string &code = *code_ptr;
-      for (auto it = reexports.begin(); it != reexports.end(); ++it) {
-        const auto &file = *it;
-        const auto basename =
-            flatbuffers::StripPath(flatbuffers::StripExtension(file.first));
-        if (basename != file_name_) {
-          const auto file_name = basename + kGeneratedFileNamePostfix;
-
-          if (imported_files.find(file.first) == imported_files.end()) {
-            code += GenPrefixedImport(file.first, file_name);
-            imported_files.emplace(file.first);
-          }
-
-          code += "export namespace " + file.second.target_namespace + " { \n";
-          code += "export import " + file.second.symbol + " = ";
-          code += GenFileNamespacePrefix(file.first) + "." +
-                  file.second.source_namespace + "." + file.second.symbol +
-                  "; }\n";
-        }
-      }
-  }
-
-  // Generate code for all enums.
-  void generateEnums(std::string *enum_code_ptr,
-                     std::string *exports_code_ptr,
-                     reexport_map &reexports) {
-    for (auto it = parser_.enums_.vec.begin(); it != parser_.enums_.vec.end();
-         ++it) {
-      auto &enum_def = **it;
-      GenEnum(enum_def, enum_code_ptr, exports_code_ptr, reexports);
-    }
-  }
-
-  // Generate code for all structs.
-  void generateStructs(std::string *decl_code_ptr,
-                       std::string *exports_code_ptr,
-                       imported_fileset &imported_files) {
-    for (auto it = parser_.structs_.vec.begin();
-         it != parser_.structs_.vec.end(); ++it) {
-      auto &struct_def = **it;
-      GenStruct(parser_, struct_def, decl_code_ptr, exports_code_ptr,
-                imported_files);
-    }
-  }
-  void GenNamespaces(std::string *code_ptr, std::string *exports_ptr) {
-  if (lang_.language == IDLOptions::kTs &&
-      parser_.opts.skip_flatbuffers_import) {
-    return;
-  }
-
-  std::set<std::string> namespaces;
-
-  for (auto it = parser_.namespaces_.begin();
-       it != parser_.namespaces_.end(); ++it) {
-    std::string namespace_so_far;
-
-    // Gather all parent namespaces for this namespace
-    for (auto component = (*it)->components.begin();
-         component != (*it)->components.end(); ++component) {
-      if (!namespace_so_far.empty()) {
-        namespace_so_far += '.';
-      }
-      namespace_so_far += *component;
-      namespaces.insert(namespace_so_far);
-    }
-  }
-
-  // Make sure parent namespaces come before child namespaces
-  std::vector<std::string> sorted_namespaces(
-    namespaces.begin(), namespaces.end());
-  std::sort(sorted_namespaces.begin(), sorted_namespaces.end());
-
-  // Emit namespaces in a form that Closure Compiler can optimize
-  std::string &code = *code_ptr;
-  std::string &exports = *exports_ptr;
-  for (auto it = sorted_namespaces.begin();
-       it != sorted_namespaces.end(); it++) {
-    if (lang_.language == IDLOptions::kTs) {
-      if (it->find('.') == std::string::npos) {
-        code += "import { flatbuffers } from \"./flatbuffers\"\n";
-        break;
-      }
-    } else {
-      code += "/**\n * @const\n * @namespace\n */\n";
-      if (it->find('.') == std::string::npos) {
-        code += "var ";
-        if(parser_.opts.use_goog_js_export_format) {
-          exports += "goog.exportSymbol('" + *it + "', " + *it + ");\n";
-        } else {
-          exports += "this." + *it + " = " + *it + ";\n";
-        }
-      }
-      code += *it + " = " + *it + " || {};\n\n";
-    }
-  }
-}
-
-// Generate a documentation comment, if available.
-static void GenDocComment(const std::vector<std::string> &dc,
-                          std::string *code_ptr,
-                          const std::string &extra_lines,
-                          const char *indent = nullptr) {
-  if (dc.empty() && extra_lines.empty()) {
-    // Don't output empty comment blocks with 0 lines of comment content.
-    return;
-  }
-
-  std::string &code = *code_ptr;
-  if (indent) code += indent;
-  code += "/**\n";
-  for (auto it = dc.begin(); it != dc.end(); ++it) {
-    if (indent) code += indent;
-    code += " *" + *it + "\n";
-  }
-  if (!extra_lines.empty()) {
-    if (!dc.empty()) {
-      if (indent) code += indent;
-      code += " *\n";
-    }
-    if (indent) code += indent;
-    std::string::size_type start = 0;
-    for (;;) {
-      auto end = extra_lines.find('\n', start);
-      if (end != std::string::npos) {
-        code += " * " + extra_lines.substr(start, end - start) + "\n";
-        start = end + 1;
-      } else {
-        code += " * " + extra_lines.substr(start) + "\n";
-        break;
-      }
-    }
-  }
-  if (indent) code += indent;
-  code += " */\n";
-}
-
-static void GenDocComment(std::string *code_ptr,
-                          const std::string &extra_lines) {
-  GenDocComment(std::vector<std::string>(), code_ptr, extra_lines);
-}
-
-// Generate an enum declaration and an enum string lookup table.
-void GenEnum(EnumDef &enum_def, std::string *code_ptr,
-             std::string *exports_ptr, reexport_map &reexports) {
-  if (enum_def.generated) return;
-  std::string &code = *code_ptr;
-  std::string &exports = *exports_ptr;
-  GenDocComment(enum_def.doc_comment, code_ptr, "@enum");
-  if (lang_.language == IDLOptions::kTs) {
-    code += "export namespace " + GetNameSpace(enum_def) + "{\n" +
-            "export enum " + enum_def.name + "{\n";
-  } else {
-    if (enum_def.defined_namespace->components.empty()) {
-      code += "var ";
-      if(parser_.opts.use_goog_js_export_format) {
-        exports += "goog.exportSymbol('" + enum_def.name + "', " +
-                   enum_def.name + ");\n";
-      } else {
-        exports += "this." + enum_def.name + " = " + enum_def.name + ";\n";
-      }
-    }
-    code += WrapInNameSpace(enum_def) + " = {\n";
-  }
-  for (auto it = enum_def.vals.vec.begin();
-       it != enum_def.vals.vec.end(); ++it) {
-    auto &ev = **it;
-    if (!ev.doc_comment.empty()) {
-      if (it != enum_def.vals.vec.begin()) {
-        code += '\n';
-      }
-      GenDocComment(ev.doc_comment, code_ptr, "", "  ");
-    }
-    code += "  " + ev.name;
-    code += lang_.language == IDLOptions::kTs ? "= " : ": ";
-    code += NumToString(ev.value);
-    code += (it + 1) != enum_def.vals.vec.end() ? ",\n" : "\n";
-
-    if (ev.union_type.struct_def) {
-        ReexportDescription desc = {
-          ev.name,
-          GetNameSpace(*ev.union_type.struct_def),
-          GetNameSpace(enum_def)
-        };
-        reexports.insert(std::make_pair(ev.union_type.struct_def->file,
-                                        std::move(desc)));
-    }
-  }
-
-  if (lang_.language == IDLOptions::kTs) {
-    code += "}};\n\n";
-  } else {
-    code += "};\n\n";
-  }
-}
-
-static std::string GenType(const Type &type) {
-  switch (type.base_type) {
-    case BASE_TYPE_BOOL:
-    case BASE_TYPE_CHAR: return "Int8";
-    case BASE_TYPE_UTYPE:
-    case BASE_TYPE_UCHAR: return "Uint8";
-    case BASE_TYPE_SHORT: return "Int16";
-    case BASE_TYPE_USHORT: return "Uint16";
-    case BASE_TYPE_INT: return "Int32";
-    case BASE_TYPE_UINT: return "Uint32";
-    case BASE_TYPE_LONG: return "Int64";
-    case BASE_TYPE_ULONG: return "Uint64";
-    case BASE_TYPE_FLOAT: return "Float32";
-    case BASE_TYPE_DOUBLE: return "Float64";
-    case BASE_TYPE_STRING: return "String";
-    case BASE_TYPE_VECTOR: return GenType(type.VectorType());
-    case BASE_TYPE_STRUCT: return type.struct_def->name;
-    default: return "Table";
-  }
-}
-
-std::string GenGetter(const Type &type, const std::string &arguments) {
-  switch (type.base_type) {
-    case BASE_TYPE_STRING: return "this.bb.__string" + arguments;
-    case BASE_TYPE_STRUCT: return "this.bb.__struct" + arguments;
-    case BASE_TYPE_UNION:  return "this.bb.__union" + arguments;
-    case BASE_TYPE_VECTOR: return GenGetter(type.VectorType(), arguments);
-    default: {
-      auto getter = "this.bb.read" + MakeCamel(GenType(type)) + arguments;
-      if (type.base_type == BASE_TYPE_BOOL) {
-        getter = "!!" + getter;
-      }
-      if (type.enum_def) {
-        getter = "/** @type {" + WrapInNameSpace(*type.enum_def) + "} */ (" +
-          getter + ")";
-      }
-      return getter;
-    }
-  }
-}
-
-std::string GenDefaultValue(const Value &value, const std::string &context) {
-  if (value.type.enum_def) {
-    if (auto val = value.type.enum_def->ReverseLookup(
-        atoi(value.constant.c_str()), false)) {
-      if (lang_.language == IDLOptions::kTs) {
-        return GenPrefixedTypeName(WrapInNameSpace(*value.type.enum_def),
-                                   value.type.enum_def->file) + "." + val->name;
-      } else {
-        return WrapInNameSpace(*value.type.enum_def) + "." + val->name;
-      }
-    } else {
-      return "/** @type {" + WrapInNameSpace(*value.type.enum_def) + "} */ ("
-        + value.constant + ")";
-    }
-  }
-
-  switch (value.type.base_type) {
-    case BASE_TYPE_BOOL:
-      return value.constant == "0" ? "false" : "true";
-
-    case BASE_TYPE_STRING:
-      return "null";
-
-    case BASE_TYPE_LONG:
-    case BASE_TYPE_ULONG: {
-      int64_t constant = StringToInt(value.constant.c_str());
-      return context + ".createLong(" + NumToString((int32_t)constant) +
-        ", " + NumToString((int32_t)(constant >> 32)) + ")";
-    }
-
-    default:
-      return value.constant;
-  }
-}
-
-std::string GenTypeName(const Type &type, bool input) {
-  if (!input) {
-    if (type.base_type == BASE_TYPE_STRING) {
-      return "string|Uint8Array";
-    }
-    if (type.base_type == BASE_TYPE_STRUCT) {
-      return WrapInNameSpace(*type.struct_def);
-    }
-  }
-
-  switch (type.base_type) {
-    case BASE_TYPE_BOOL: return "boolean";
-    case BASE_TYPE_LONG:
-    case BASE_TYPE_ULONG: return "flatbuffers.Long";
-    default:
-      if (IsScalar(type.base_type)) {
-        if (type.enum_def) {
-          return WrapInNameSpace(*type.enum_def);
-        }
-        return "number";
-      }
-      return "flatbuffers.Offset";
-  }
-}
-
-// Returns the method name for use with add/put calls.
-static std::string GenWriteMethod(const Type &type) {
-  // Forward to signed versions since unsigned versions don't exist
-  switch (type.base_type) {
-    case BASE_TYPE_UTYPE:
-    case BASE_TYPE_UCHAR: return GenWriteMethod(Type(BASE_TYPE_CHAR));
-    case BASE_TYPE_USHORT: return GenWriteMethod(Type(BASE_TYPE_SHORT));
-    case BASE_TYPE_UINT: return GenWriteMethod(Type(BASE_TYPE_INT));
-    case BASE_TYPE_ULONG: return GenWriteMethod(Type(BASE_TYPE_LONG));
-    default: break;
-  }
-
-  return IsScalar(type.base_type)
-    ? MakeCamel(GenType(type))
-    : (IsStruct(type) ? "Struct" : "Offset");
-}
-
-template <typename T>
-static std::string MaybeAdd(T value) {
-  return value != 0 ? " + " + NumToString(value) : "";
-}
-
-template <typename T>
-static std::string MaybeScale(T value) {
-  return value != 1 ? " * " + NumToString(value) : "";
-}
-
-static std::string GenFileNamespacePrefix(const std::string &file) {
-  return "NS" + std::to_string(
-        static_cast<unsigned long long>(std::hash<std::string>()(file)));
-}
-
-static std::string GenPrefixedImport(const std::string &full_file_name,
-                                     const std::string &base_file_name) {
-  return "import * as "+ GenFileNamespacePrefix(full_file_name) +
-         " from \"./" + base_file_name + "\";\n";
-}
-
-// Adds a source-dependent prefix, for of import * statements.
-std::string GenPrefixedTypeName(const std::string &typeName,
-                                const std::string &file) {
-  const auto basename =
-      flatbuffers::StripPath(flatbuffers::StripExtension(file));
-  if (basename == file_name_) {
-    return typeName;
-  }
-  return GenFileNamespacePrefix(file) + "." + typeName;
-}
-
-void GenStructArgs(const StructDef &struct_def,
-                          std::string *annotations,
-                          std::string *arguments,
-                          const std::string &nameprefix) {
-  for (auto it = struct_def.fields.vec.begin();
-       it != struct_def.fields.vec.end(); ++it) {
-    auto &field = **it;
-    if (IsStruct(field.value.type)) {
-      // Generate arguments for a struct inside a struct. To ensure names
-      // don't clash, and to make it obvious these arguments are constructing
-      // a nested struct, prefix the name with the field name.
-      GenStructArgs(*field.value.type.struct_def, annotations, arguments,
-                    nameprefix + field.name + "_");
-    } else {
-      *annotations += "@param {" + GenTypeName(field.value.type, true);
-      *annotations += "} " + nameprefix + field.name + "\n";
-
-      if (lang_.language == IDLOptions::kTs) {
-          *arguments += ", " + nameprefix + field.name + ": " +
-                        GenTypeName(field.value.type, true);
-      } else {
-          *arguments += ", " + nameprefix + field.name;
-      }
-    }
-  }
-}
-
-static void GenStructBody(const StructDef &struct_def,
-                          std::string *body,
-                          const std::string &nameprefix) {
-  *body += "  builder.prep(";
-  *body += NumToString(struct_def.minalign) + ", ";
-  *body += NumToString(struct_def.bytesize) + ");\n";
-
-  for (auto it = struct_def.fields.vec.rbegin();
-       it != struct_def.fields.vec.rend(); ++it) {
-    auto &field = **it;
-    if (field.padding) {
-      *body += "  builder.pad(" + NumToString(field.padding) + ");\n";
-    }
-    if (IsStruct(field.value.type)) {
-      // Generate arguments for a struct inside a struct. To ensure names
-      // don't clash, and to make it obvious these arguments are constructing
-      // a nested struct, prefix the name with the field name.
-      GenStructBody(*field.value.type.struct_def, body,
-                    nameprefix + field.name + "_");
-    } else {
-      *body += "  builder.write" + GenWriteMethod(field.value.type) + "(";
-      if (field.value.type.base_type == BASE_TYPE_BOOL) {
-        *body += "+";
-      }
-      *body += nameprefix + field.name + ");\n";
-    }
-  }
-}
-
-// Generate an accessor struct with constructor for a flatbuffers struct.
-void GenStruct(const Parser &parser, StructDef &struct_def,
-               std::string *code_ptr, std::string *exports_ptr,
-               imported_fileset &imported_files) {
-  if (struct_def.generated) return;
-  std::string &code = *code_ptr;
-  std::string &exports = *exports_ptr;
-
-  std::string object_name;
-
-  // Emit constructor
-  if (lang_.language == IDLOptions::kTs) {
-    object_name = struct_def.name;
-    std::string object_namespace = GetNameSpace(struct_def);
-    GenDocComment(struct_def.doc_comment, code_ptr, "@constructor");
-    code += "export namespace " + object_namespace + "{\n";
-    code += "export class " + struct_def.name;
-    code += " {\n";
-    code += "  /**\n";
-    code += "   * @type {flatbuffers.ByteBuffer}\n";
-    code += "   */\n";
-    code += "  bb: flatbuffers.ByteBuffer= null;\n";
-    code += "\n";
-    code += "  /**\n";
-    code += "   * @type {number}\n";
-    code += "   */\n";
-    code += "  bb_pos:number = 0;\n";
-  } else {
-    bool isStatement = struct_def.defined_namespace->components.empty();
-    object_name = WrapInNameSpace(struct_def);
-    GenDocComment(struct_def.doc_comment, code_ptr, "@constructor");
-    if (isStatement) {
-      if(parser_.opts.use_goog_js_export_format) {
-        exports += "goog.exportSymbol('" + struct_def.name + "', " +
-          struct_def.name + ");\n";
-      } else {
-        exports += "this." + struct_def.name + " = " + struct_def.name + ";\n";
-      }
-      code += "function " + object_name;
-    } else {
-      code += object_name + " = function";
-    }
-    code += "() {\n";
-    code += "  /**\n";
-    code += "   * @type {flatbuffers.ByteBuffer}\n";
-    code += "   */\n";
-    code += "  this.bb = null;\n";
-    code += "\n";
-    code += "  /**\n";
-    code += "   * @type {number}\n";
-    code += "   */\n";
-    code += "  this.bb_pos = 0;\n";
-    code += isStatement ? "}\n\n" : "};\n\n";
-  }
-
-  // Generate the __init method that sets the field in a pre-existing
-  // accessor object. This is to allow object reuse.
-  code += "/**\n";
-  code += " * @param {number} i\n";
-  code += " * @param {flatbuffers.ByteBuffer} bb\n";
-  code += " * @returns {" + object_name + "}\n";
-  code += " */\n";
-
-  if (lang_.language == IDLOptions::kTs) {
-    code += "__init(i:number, bb:flatbuffers.ByteBuffer):" + object_name +
-            " {\n";
-  } else {
-    code += object_name + ".prototype.__init = function(i, bb) {\n";
-  }
-
-  code += "  this.bb_pos = i;\n";
-  code += "  this.bb = bb;\n";
-  code += "  return this;\n";
-  code += "};\n\n";
-
-  // Generate a special accessor for the table that when used as the root of a
-  // FlatBuffer
-  if (!struct_def.fixed) {
-    GenDocComment(code_ptr,
-      "@param {flatbuffers.ByteBuffer} bb\n"
-      "@param {" + object_name + "=} obj\n"
-      "@returns {" + object_name + "}");
-    if (lang_.language == IDLOptions::kTs) {
-      code += "static getRootAs" + struct_def.name;
-      code += "(bb:flatbuffers.ByteBuffer, obj?:" + object_name + "):" +
-              object_name + " {\n";
-    } else {
-      code += object_name + ".getRootAs" + struct_def.name;
-      code += " = function(bb, obj) {\n";
-    }
-    code += "  return (obj || new " + object_name;
-    code += ").__init(bb.readInt32(bb.position()) + bb.position(), bb);\n";
-    code += "};\n\n";
-
-    // Generate the identifier check method
-    if (parser_.root_struct_def_ == &struct_def &&
-        !parser_.file_identifier_.empty()) {
-      GenDocComment(code_ptr,
-        "@param {flatbuffers.ByteBuffer} bb\n"
-        "@returns {boolean}");
-      if (lang_.language == IDLOptions::kTs) {
-        code +=
-            "static bufferHasIdentifier(bb:flatbuffers.ByteBuffer):boolean {\n";
-      } else {
-        code += object_name + ".bufferHasIdentifier = function(bb) {\n";
-      }
-
-      code += "  return bb.__has_identifier('" + parser_.file_identifier_;
-      code += "');\n};\n\n";
-    }
-  }
-
-  // Emit field accessors
-  for (auto it = struct_def.fields.vec.begin();
-       it != struct_def.fields.vec.end(); ++it) {
-    auto &field = **it;
-    if (field.deprecated) continue;
-    auto offset_prefix = "  var offset = this.bb.__offset(this.bb_pos, " +
-      NumToString(field.value.offset) + ");\n  return offset ? ";
-
-    // Emit a scalar field
-    if (IsScalar(field.value.type.base_type) ||
-        field.value.type.base_type == BASE_TYPE_STRING) {
-      GenDocComment(field.doc_comment, code_ptr,
-        std::string(field.value.type.base_type == BASE_TYPE_STRING ?
-          "@param {flatbuffers.Encoding=} optionalEncoding\n" : "") +
-        "@returns {" + GenTypeName(field.value.type, false) + "}");
-      if (lang_.language == IDLOptions::kTs) {
-        std::string prefix = MakeCamel(field.name, false) + "(";
-        if (field.value.type.base_type == BASE_TYPE_STRING) {
-          code += prefix + "):string\n";
-          code += prefix + "optionalEncoding:flatbuffers.Encoding"+"):" +
-                  GenTypeName(field.value.type, false)+"\n";
-          code += prefix + "optionalEncoding?:any";
-        } else {
-          code += prefix;
-        }
-        if (field.value.type.enum_def) {
-          code += "):" +
-                  GenPrefixedTypeName(GenTypeName(field.value.type, false),
-                                      field.value.type.enum_def->file) + " {\n";
-        } else {
-          code += "):" + GenTypeName(field.value.type, false) + " {\n";
-        }
-      } else {
-        code += object_name + ".prototype." + MakeCamel(field.name, false);
-        code += " = function(";
-        if (field.value.type.base_type == BASE_TYPE_STRING) {
-          code += "optionalEncoding";
-        }
-        code += ") {\n";
-      }
-
-      if (struct_def.fixed) {
-        code += "  return " + GenGetter(field.value.type, "(this.bb_pos" +
-          MaybeAdd(field.value.offset) + ")") + ";\n";
-      } else {
-        std::string index = "this.bb_pos + offset";
-        if (field.value.type.base_type == BASE_TYPE_STRING) {
-          index += ", optionalEncoding";
-        }
-        code += offset_prefix + GenGetter(field.value.type,
-          "(" + index + ")") + " : " + GenDefaultValue(field.value, "this.bb");
-        code += ";\n";
-      }
-    }
-
-    // Emit an object field
-    else {
-      switch (field.value.type.base_type) {
-        case BASE_TYPE_STRUCT: {
-          auto type = WrapInNameSpace(*field.value.type.struct_def);
-          GenDocComment(field.doc_comment, code_ptr,
-            "@param {" + type + "=} obj\n@returns {" + type + "}");
-          if (lang_.language == IDLOptions::kTs) {
-            type = GenPrefixedTypeName(type, field.value.type.struct_def->file);
-            code += MakeCamel(field.name, false);
-            code += "(obj?:" + type + "):" + type + " {\n";
-          } else {
-            code += object_name + ".prototype." + MakeCamel(field.name, false);
-            code += " = function(obj) {\n";
-          }
-
-          if (struct_def.fixed) {
-            code += "  return (obj || new " + type;
-            code += ").__init(this.bb_pos";
-            code += MaybeAdd(field.value.offset) + ", this.bb);\n";
-          } else {
-            code += offset_prefix + "(obj || new " + type + ").__init(";
-            code += field.value.type.struct_def->fixed
-              ? "this.bb_pos + offset"
-              : "this.bb.__indirect(this.bb_pos + offset)";
-            code += ", this.bb) : null;\n";
-          }
-
-          if (lang_.language == IDLOptions::kTs) {
-            imported_files.insert(field.value.type.struct_def->file);
-          }
-
-          break;
-        }
-
-        case BASE_TYPE_VECTOR: {
-          auto vectortype = field.value.type.VectorType();
-          auto vectortypename = GenTypeName(vectortype, false);
-          auto inline_size = InlineSize(vectortype);
-          auto index = "this.bb.__vector(this.bb_pos + offset) + index" +
-                       MaybeScale(inline_size);
-          std::string args = "@param {number} index\n";
-          if (vectortype.base_type == BASE_TYPE_STRUCT) {
-            args += "@param {" + vectortypename + "=} obj\n";
-          } else if (vectortype.base_type == BASE_TYPE_STRING) {
-            args += "@param {flatbuffers.Encoding=} optionalEncoding\n";
-          }
-          GenDocComment(field.doc_comment, code_ptr, args +
-            "@returns {" + vectortypename + "}");
-          if (lang_.language == IDLOptions::kTs) {
-            std::string prefix = MakeCamel(field.name, false);
-            prefix += "(index: number";
-            if (vectortype.base_type == BASE_TYPE_STRUCT) {
-              vectortypename = GenPrefixedTypeName(vectortypename,
-                                                   vectortype.struct_def->file);
-              code += prefix + ", obj?:" + vectortypename;
-              imported_files.insert(vectortype.struct_def->file);
-            } else if (vectortype.base_type == BASE_TYPE_STRING) {
-              code += prefix + "):string\n";
-              code += prefix + ",optionalEncoding:flatbuffers.Encoding" + "):" +
-                      vectortypename + "\n";
-              code += prefix + ",optionalEncoding?:any";
-            } else {
-              code += prefix;
-            }
-            code += "):" + vectortypename + " {\n";
-          } else {
-            code += object_name + ".prototype." + MakeCamel(field.name, false);
-            code += " = function(index";
-            if (vectortype.base_type == BASE_TYPE_STRUCT) {
-              code += ", obj";
-            } else if (vectortype.base_type == BASE_TYPE_STRING) {
-              code += ", optionalEncoding";
-            }
-            code += ") {\n";
-          }
-
-          if (vectortype.base_type == BASE_TYPE_STRUCT) {
-            code += offset_prefix + "(obj || new " + vectortypename;
-            code += ").__init(";
-            code += vectortype.struct_def->fixed
-              ? index
-              : "this.bb.__indirect(" + index + ")";
-            code += ", this.bb)";
-          } else {
-            if (vectortype.base_type == BASE_TYPE_STRING) {
-              index += ", optionalEncoding";
-            }
-            code += offset_prefix + GenGetter(vectortype, "(" + index + ")");
-          }
-          code += " : ";
-          if (field.value.type.element == BASE_TYPE_BOOL) {
-            code += "false";
-          } else if (field.value.type.element == BASE_TYPE_LONG ||
-              field.value.type.element == BASE_TYPE_ULONG) {
-            code += "this.bb.createLong(0, 0)";
-          } else if (IsScalar(field.value.type.element)) {
-            if (field.value.type.enum_def) {
-              code += "/** @type {" +
-                WrapInNameSpace(*field.value.type.enum_def) + "} */ (" +
-                field.value.constant + ")";
-            } else {
-              code += "0";
-            }
-          } else {
-            code += "null";
-          }
-          code += ";\n";
-          break;
-        }
-
-        case BASE_TYPE_UNION:
-          GenDocComment(field.doc_comment, code_ptr,
-            "@param {flatbuffers.Table} obj\n"
-            "@returns {?flatbuffers.Table}");
-          if (lang_.language == IDLOptions::kTs) {
-            code += MakeCamel(field.name, false);
-            code += "<T extends flatbuffers.Table>(obj:T):T {\n";
-          } else {
-            code += object_name + ".prototype." + MakeCamel(field.name, false);
-            code += " = function(obj) {\n";
-          }
-
-          code += offset_prefix + GenGetter(field.value.type,
-            "(obj, this.bb_pos + offset)") + " : null;\n";
-          break;
-
-        default:
-          assert(0);
-      }
-    }
-    code += "};\n\n";
-
-    if(parser_.opts.use_goog_js_export_format) {
-      exports += "goog.exportProperty(" + object_name + ".prototype, '" +
-        MakeCamel(field.name, false) + "', " + object_name + ".prototype." +
-        MakeCamel(field.name, false) + ");\n";
-    }
-
-    // Adds the mutable scalar value to the output
-    if (IsScalar(field.value.type.base_type) && parser.opts.mutable_buffer) {
-      std::string annotations =
-          "@param {" + GenTypeName(field.value.type, true) + "} value\n";
-      GenDocComment(code_ptr, annotations +
-        "@returns {boolean}");
-
-      if (lang_.language == IDLOptions::kTs) {
-        std::string type;
-        if (field.value.type.enum_def) {
-          type = GenPrefixedTypeName(GenTypeName(field.value.type, true),
-                                     field.value.type.enum_def->file);
-        } else {
-          type = GenTypeName(field.value.type, true);
-        }
-
-        code += "mutate_" + field.name + "(value:" + type + "):boolean {\n";
-      } else {
-        code += object_name + ".prototype.mutate_" + field.name +
-                " = function(value) {\n";
-      }
-
-      code += "  var offset = this.bb.__offset(this.bb_pos, " +
-              NumToString(field.value.offset) + ");\n\n";
-      code += "  if (offset === 0) {\n";
-      code += "    return false;\n";
-      code += "  }\n\n";
-
-      // special case for bools, which are treated as uint8
-      code += "  this.bb.write" + MakeCamel(GenType(field.value.type)) +
-              "(this.bb_pos + offset, ";
-      if (field.value.type.base_type == BASE_TYPE_BOOL &&
-          lang_.language == IDLOptions::kTs) {
-          code += "+";
-      }
-
-      code += "value);\n";
-      code += "  return true;\n";
-      code += "};\n\n";
-
-      if(parser_.opts.use_goog_js_export_format) {
-        exports += "goog.exportProperty(" + object_name +
-          ".prototype, 'mutate_" + field.name + "', " + object_name +
-          ".prototype.mutate_" + field.name + ");\n";
-      }
-    }
-
-    // Emit vector helpers
-    if (field.value.type.base_type == BASE_TYPE_VECTOR) {
-      // Emit a length helper
-      GenDocComment(code_ptr, "@returns {number}");
-      if (lang_.language == IDLOptions::kTs) {
-        code += MakeCamel(field.name, false);
-        code += "Length():number {\n" + offset_prefix;
-      } else {
-        code += object_name + ".prototype." + MakeCamel(field.name, false);
-        code += "Length = function() {\n" + offset_prefix;
-      }
-
-      code += "this.bb.__vector_len(this.bb_pos + offset) : 0;\n};\n\n";
-
-      if(parser_.opts.use_goog_js_export_format) {
-        exports += "goog.exportProperty(" + object_name + ".prototype, '" +
-          MakeCamel(field.name, false) + "Length', " + object_name +
-          ".prototype." + MakeCamel(field.name, false) + "Length);\n";
-      }
-
-      // For scalar types, emit a typed array helper
-      auto vectorType = field.value.type.VectorType();
-      if (IsScalar(vectorType.base_type) && !IsLong(vectorType.base_type)) {
-        GenDocComment(code_ptr, "@returns {" + GenType(vectorType) + "Array}");
-
-        if (lang_.language == IDLOptions::kTs) {
-          code += MakeCamel(field.name, false);
-          code += "Array():" + GenType(vectorType) + "Array {\n" +
-                  offset_prefix;
-        } else {
-          code += object_name + ".prototype." + MakeCamel(field.name, false);
-          code += "Array = function() {\n" + offset_prefix;
-        }
-
-        code += "new " + GenType(vectorType) + "Array(this.bb.bytes().buffer, "
-          "this.bb.bytes().byteOffset + this.bb.__vector(this.bb_pos + offset), "
-          "this.bb.__vector_len(this.bb_pos + offset)) : null;\n};\n\n";
-
-        if(parser_.opts.use_goog_js_export_format) {
-          exports += "goog.exportProperty(" + object_name + ".prototype, '" +
-            MakeCamel(field.name, false) + "Array', " + object_name +
-            ".prototype." + MakeCamel(field.name, false) + "Array);\n";
-        }
-      }
-    }
-  }
-
-  // Emit a factory constructor
-  if (struct_def.fixed) {
-    std::string annotations = "@param {flatbuffers.Builder} builder\n";
-    std::string arguments;
-    GenStructArgs(struct_def, &annotations, &arguments, "");
-    GenDocComment(code_ptr, annotations +
-      "@returns {flatbuffers.Offset}");
-
-    if (lang_.language == IDLOptions::kTs) {
-      code += "static create" + struct_def.name + "(builder:flatbuffers.Builder";
-      code += arguments + "):flatbuffers.Offset {\n";
-    } else {
-      code += object_name + ".create" + struct_def.name + " = function(builder";
-      code += arguments + ") {\n";
-    }
-
-    GenStructBody(struct_def, &code, "");
-    code += "  return builder.offset();\n};\n\n";
-  } else {
-    // Generate a method to start building a new object
-    GenDocComment(code_ptr,
-      "@param {flatbuffers.Builder} builder");
-
-    if (lang_.language == IDLOptions::kTs) {
-      code += "static start" + struct_def.name;
-      code += "(builder:flatbuffers.Builder) {\n";
-    } else {
-      code += object_name + ".start" + struct_def.name;
-      code += " = function(builder) {\n";
-    }
-
-    code += "  builder.startObject(" + NumToString(
-      struct_def.fields.vec.size()) + ");\n";
-    code += "};\n\n";
-
-    // Generate a set of static methods that allow table construction
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      auto &field = **it;
-      if (field.deprecated) continue;
-      auto argname = MakeCamel(field.name, false);
-      if (!IsScalar(field.value.type.base_type)) {
-        argname += "Offset";
-      }
-
-      // Generate the field insertion method
-      GenDocComment(code_ptr,
-        "@param {flatbuffers.Builder} builder\n"
-        "@param {" + GenTypeName(field.value.type, true) + "} " +
-        argname);
-
-      if (lang_.language == IDLOptions::kTs) {
-        std::string argType;
-        if (field.value.type.enum_def) {
-          argType = GenPrefixedTypeName(GenTypeName(field.value.type, true),
-                                        field.value.type.enum_def->file);
-        } else {
-          argType = GenTypeName(field.value.type, true);
-        }
-
-        code += "static add" + MakeCamel(field.name);
-        code += "(builder:flatbuffers.Builder, " + argname + ":" + argType +
-                ") {\n";
-      } else {
-        code += object_name + ".add" + MakeCamel(field.name);
-        code += " = function(builder, " + argname + ") {\n";
-      }
-
-      code += "  builder.addField" + GenWriteMethod(field.value.type) + "(";
-      code += NumToString(it - struct_def.fields.vec.begin()) + ", ";
-      if (field.value.type.base_type == BASE_TYPE_BOOL) {
-        code += "+";
-      }
-      code += argname + ", ";
-      if (!IsScalar(field.value.type.base_type)) {
-        code += "0";
-      } else {
-        if (field.value.type.base_type == BASE_TYPE_BOOL) {
-          code += "+";
-        }
-        code += GenDefaultValue(field.value, "builder");
-      }
-      code += ");\n};\n\n";
-
-      if (field.value.type.base_type == BASE_TYPE_VECTOR) {
-        auto vector_type = field.value.type.VectorType();
-        auto alignment = InlineAlignment(vector_type);
-        auto elem_size = InlineSize(vector_type);
-
-        // Generate a method to create a vector from a JavaScript array
-        if (!IsStruct(vector_type)) {
-          GenDocComment(code_ptr,
-            "@param {flatbuffers.Builder} builder\n"
-            "@param {Array.<" + GenTypeName(vector_type, true) +
-            ">} data\n"
-            "@returns {flatbuffers.Offset}");
-
-          if (lang_.language == IDLOptions::kTs) {
-            code += "static create" + MakeCamel(field.name);
-            std::string type = GenTypeName(vector_type, true) + "[]";
-            if (type == "number[]") {
-              type += " | Uint8Array";
-            }
-            code += "Vector(builder:flatbuffers.Builder, data:" + type +
-                    "):flatbuffers.Offset {\n";
-            code += "if(!data){\n  return null\n}\n";
-          } else {
-            code += object_name + ".create" + MakeCamel(field.name);
-            code += "Vector = function(builder, data) {\n";
-          }
-
-          code += "  builder.startVector(" + NumToString(elem_size);
-          code += ", data.length, " + NumToString(alignment) + ");\n";
-          code += "  for (var i = data.length - 1; i >= 0; i--) {\n";
-          code += "    builder.add" + GenWriteMethod(vector_type) + "(";
-          if (vector_type.base_type == BASE_TYPE_BOOL) {
-            code += "+";
-          }
-          code += "data[i]);\n";
-          code += "  }\n";
-          code += "  return builder.endVector();\n";
-          code += "};\n\n";
-        }
-
-        // Generate a method to start a vector, data to be added manually after
-        GenDocComment(code_ptr,
-          "@param {flatbuffers.Builder} builder\n"
-          "@param {number} numElems");
-
-        if (lang_.language == IDLOptions::kTs) {
-          code += "static start" + MakeCamel(field.name);
-          code += "Vector(builder:flatbuffers.Builder, numElems:number) {\n";
-        } else {
-          code += object_name + ".start" + MakeCamel(field.name);
-          code += "Vector = function(builder, numElems) {\n";
-        }
-
-        code += "  builder.startVector(" + NumToString(elem_size);
-        code += ", numElems, " + NumToString(alignment) + ");\n";
-        code += "};\n\n";
-      }
-    }
-
-    // Generate a method to stop building a new object
-    GenDocComment(code_ptr,
-      "@param {flatbuffers.Builder} builder\n"
-      "@returns {flatbuffers.Offset}");
-
-    if (lang_.language == IDLOptions::kTs) {
-      code += "static end" + struct_def.name;
-      code += "(builder:flatbuffers.Builder):flatbuffers.Offset {\n";
-    } else {
-      code += object_name + ".end" + struct_def.name;
-      code += " = function(builder) {\n";
-    }
-
-    code += "  var offset = builder.endObject();\n";
-    for (auto it = struct_def.fields.vec.begin();
-         it != struct_def.fields.vec.end(); ++it) {
-      auto &field = **it;
-      if (!field.deprecated && field.required) {
-        code += "  builder.requiredField(offset, ";
-        code += NumToString(field.value.offset);
-        code += "); // " + field.name + "\n";
-      }
-    }
-    code += "  return offset;\n";
-    code += "};\n\n";
-
-    // Generate the method to complete buffer construction
-    if (parser_.root_struct_def_ == &struct_def) {
-      GenDocComment(code_ptr,
-        "@param {flatbuffers.Builder} builder\n"
-        "@param {flatbuffers.Offset} offset");
-
-      if (lang_.language == IDLOptions::kTs) {
-        code += "static finish" + struct_def.name + "Buffer";
-        code += "(builder:flatbuffers.Builder, offset:flatbuffers.Offset) {\n";
-      } else {
-        code += object_name + ".finish" + struct_def.name + "Buffer";
-        code += " = function(builder, offset) {\n";
-      }
-
-      code += "  builder.finish(offset";
-      if (!parser_.file_identifier_.empty()) {
-        code += ", '" + parser_.file_identifier_ + "'";
-      }
-      code += ");\n";
-      code += "};\n\n";
-    }
-  }
-
-  if (lang_.language == IDLOptions::kTs) {
-    code += "}\n}\n";
-  }
-}
-};
-}  // namespace js
-
-bool GenerateJS(const Parser &parser, const std::string &path,
-                const std::string &file_name) {
-  js::JsGenerator generator(parser, path, file_name);
-  return generator.generate();
-}
-
-std::string JSMakeRule(const Parser &parser,
-                       const std::string &path,
-                       const std::string &file_name) {
-  assert(parser.opts.lang <= IDLOptions::kMAX);
-  const auto &lang = GetJsLangParams(parser.opts.lang);
-
-  std::string filebase = flatbuffers::StripPath(
-      flatbuffers::StripExtension(file_name));
-  std::string make_rule = GeneratedFileName(path, filebase, lang) + ": ";
-
-  auto included_files = parser.GetIncludedFilesRecursive(file_name);
-  for (auto it = included_files.begin();
-       it != included_files.end(); ++it) {
-    make_rule += " " + *it;
-  }
-return make_rule;
-}
-
-}  // namespace flatbuffers
diff --git a/third_party/flatbuffers/src/idl_gen_php.cpp b/third_party/flatbuffers/src/idl_gen_php.cpp
deleted file mode 100644
index a893f98..0000000
--- a/third_party/flatbuffers/src/idl_gen_php.cpp
+++ /dev/null
@@ -1,967 +0,0 @@
-/*
-* Copyright 2014 Google Inc. All rights reserved.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-// independent from idl_parser, since this code is not needed for most clients
-
-#include <string>
-
-#include "flatbuffers/flatbuffers.h"
-#include "flatbuffers/idl.h"
-#include "flatbuffers/util.h"
-#include "flatbuffers/code_generators.h"
-
-namespace flatbuffers {
-namespace php {
-    // Hardcode spaces per indentation.
-    const std::string Indent = "    ";
-    class PhpGenerator : public BaseGenerator {
-     public:
-      PhpGenerator(const Parser &parser, const std::string &path,
-                   const std::string &file_name)
-          : BaseGenerator(parser, path, file_name, "\\", "\\"){};
-      bool generate() {
-        if (!generateEnums()) return false;
-        if (!generateStructs()) return false;
-        return true;
-      }
-
-     private:
-      bool generateEnums() {
-        for (auto it = parser_.enums_.vec.begin();
-             it != parser_.enums_.vec.end(); ++it) {
-          auto &enum_def = **it;
-          std::string enumcode;
-          GenEnum(enum_def, &enumcode);
-          if (!SaveType(enum_def, enumcode, false)) return false;
-        }
-        return true;
-      }
-
-      bool generateStructs() {
-        for (auto it = parser_.structs_.vec.begin();
-             it != parser_.structs_.vec.end(); ++it) {
-          auto &struct_def = **it;
-          std::string declcode;
-          GenStruct(struct_def, &declcode);
-          if (!SaveType(struct_def, declcode, true)) return false;
-        }
-        return true;
-      }
-
-      // Begin by declaring namespace and imports.
-      void BeginFile(const std::string name_space_name,
-                     const bool needs_imports, std::string *code_ptr) {
-        std::string &code = *code_ptr;
-        code += "<?php\n";
-        code = code + "// " + FlatBuffersGeneratedWarning();
-        code += "namespace " + name_space_name + ";\n\n";
-
-        if (needs_imports) {
-          code += "use \\Google\\FlatBuffers\\Struct;\n";
-          code += "use \\Google\\FlatBuffers\\Table;\n";
-          code += "use \\Google\\FlatBuffers\\ByteBuffer;\n";
-          code += "use \\Google\\FlatBuffers\\FlatBufferBuilder;\n";
-          code += "\n";
-        }
-      }
-
-      // Save out the generated code for a Php Table type.
-      bool SaveType(const Definition &def, const std::string &classcode,
-                    bool needs_imports) {
-        if (!classcode.length()) return true;
-
-        std::string code = "";
-        BeginFile(FullNamespace("\\", *def.defined_namespace),
-                  needs_imports, &code);
-        code += classcode;
-
-        std::string filename = NamespaceDir(*def.defined_namespace) +
-                               def.name + ".php";
-        return SaveFile(filename.c_str(), code, false);
-      }
-
-    // Begin a class declaration.
-    static void BeginClass(const StructDef &struct_def, std::string *code_ptr) {
-      std::string &code = *code_ptr;
-      if (struct_def.fixed) {
-        code += "class " + struct_def.name + " extends Struct\n";
-      } else {
-        code += "class " + struct_def.name + " extends Table\n";
-      }
-      code += "{\n";
-    }
-
-    static void EndClass(std::string *code_ptr) {
-      std::string &code = *code_ptr;
-      code += "}\n";
-    }
-
-    // Begin enum code with a class declaration.
-    static void BeginEnum(const std::string class_name, std::string *code_ptr) {
-      std::string &code = *code_ptr;
-      code += "class " + class_name + "\n{\n";
-    }
-
-    // A single enum member.
-    static void EnumMember(const EnumVal ev, std::string *code_ptr) {
-      std::string &code = *code_ptr;
-      code += Indent + "const ";
-      code += ev.name;
-      code += " = ";
-      code += NumToString(ev.value) + ";\n";
-    }
-
-    // End enum code.
-    static void EndEnum(std::string *code_ptr) {
-      std::string &code = *code_ptr;
-      code += "}\n";
-    }
-
-    // Initialize a new struct or table from existing data.
-    static void NewRootTypeFromBuffer(const StructDef &struct_def,
-      std::string *code_ptr) {
-      std::string &code = *code_ptr;
-
-      code += Indent + "/**\n";
-      code += Indent + " * @param ByteBuffer $bb\n";
-      code += Indent + " * @return " + struct_def.name + "\n";
-      code += Indent + " */\n";
-      code += Indent + "public static function getRootAs";
-      code += struct_def.name;
-      code += "(ByteBuffer $bb)\n";
-      code += Indent + "{\n";
-
-      code += Indent + Indent + "$obj = new " + struct_def.name + "();\n";
-      code += Indent + Indent;
-      code += "return ($obj->init($bb->getInt($bb->getPosition())";
-      code += " + $bb->getPosition(), $bb));\n";
-      code += Indent + "}\n\n";
-    }
-
-    // Initialize an existing object with other data, to avoid an allocation.
-    static void InitializeExisting(const StructDef &struct_def,
-      std::string *code_ptr) {
-      std::string &code = *code_ptr;
-
-      code += Indent + "/**\n";
-      code += Indent + " * @param int $_i offset\n";
-      code += Indent + " * @param ByteBuffer $_bb\n";
-      code += Indent + " * @return " + struct_def.name + "\n";
-      code += Indent + " **/\n";
-      code += Indent + "public function init($_i, ByteBuffer $_bb)\n";
-      code += Indent + "{\n";
-      code += Indent + Indent + "$this->bb_pos = $_i;\n";
-      code += Indent + Indent + "$this->bb = $_bb;\n";
-      code += Indent + Indent + "return $this;\n";
-      code += Indent + "}\n\n";
-    }
-
-    // Get the length of a vector.
-    static void GetVectorLen(const FieldDef &field,
-      std::string *code_ptr) {
-      std::string &code = *code_ptr;
-
-      code += Indent + "/**\n";
-      code += Indent + " * @return int\n";
-      code += Indent + " */\n";
-      code += Indent + "public function get";
-      code += MakeCamel(field.name) + "Length()\n";
-      code += Indent + "{\n";
-      code += Indent + Indent + "$o = $this->__offset(";
-      code += NumToString(field.value.offset) + ");\n";
-      code += Indent + Indent;
-      code += "return $o != 0 ? $this->__vector_len($o) : 0;\n";
-      code += Indent + "}\n\n";
-    }
-
-    // Get a [ubyte] vector as a byte array.
-    static void GetUByte(const FieldDef &field,
-      std::string *code_ptr) {
-      std::string &code = *code_ptr;
-
-      code += Indent + "/**\n";
-      code += Indent + " * @return string\n";
-      code += Indent + " */\n";
-      code += Indent + "public function get";
-      code += MakeCamel(field.name) + "Bytes()\n";
-      code += Indent + "{\n";
-      code += Indent + Indent + "return $this->__vector_as_bytes(";
-      code += NumToString(field.value.offset) + ");\n";
-      code += Indent + "}\n\n";
-    }
-
-    // Get the value of a struct's scalar.
-    static void GetScalarFieldOfStruct(const FieldDef &field,
-      std::string *code_ptr) {
-      std::string &code = *code_ptr;
-      std::string getter = GenGetter(field.value.type);
-
-      code += Indent + "/**\n";
-      code += Indent + " * @return ";
-      code += GenTypeGet(field.value.type) + "\n";
-      code += Indent + " */\n";
-      code += Indent + "public function " + getter;
-      code += MakeCamel(field.name) + "()\n";
-      code += Indent + "{\n";
-      code += Indent + Indent + "return ";
-
-      code += "$this->bb->get";
-      code += MakeCamel(GenTypeGet(field.value.type));
-      code += "($this->bb_pos + ";
-      code += NumToString(field.value.offset) + ")";
-      code += ";\n";
-
-      code += Indent + "}\n\n";
-    }
-
-    // Get the value of a table's scalar.
-    void GetScalarFieldOfTable(const FieldDef &field, std::string *code_ptr) {
-      std::string &code = *code_ptr;
-      std::string getter = GenGetter(field.value.type);
-
-      code += Indent + "/**\n";
-      code += Indent + " * @return " + GenTypeGet(field.value.type) + "\n";
-      code += Indent + " */\n";
-      code += Indent + "public function get";
-      code += MakeCamel(field.name);
-      code += "()\n";
-      code += Indent + "{\n";
-      code += Indent + Indent +
-        "$o = $this->__offset(" +
-        NumToString(field.value.offset) +
-        ");\n" + Indent + Indent + "return $o != 0 ? ";
-      code += "$this->bb->get";
-      code += MakeCamel(GenTypeGet(field.value.type)) + "($o + $this->bb_pos)";
-      code += " : " + GenDefaultValue(field.value) + ";\n";
-      code += Indent + "}\n\n";
-    }
-
-    // Get a struct by initializing an existing struct.
-    // Specific to Struct.
-    void GetStructFieldOfStruct(const FieldDef &field, std::string *code_ptr) {
-      std::string &code = *code_ptr;
-
-      code += Indent + "/**\n";
-      code += Indent + " * @return " + GenTypeGet(field.value.type) + "\n";
-      code += Indent + " */\n";
-      code += Indent + "public function get";
-      code += MakeCamel(field.name) + "()\n";
-      code += Indent + "{\n";
-      code += Indent + Indent + "$obj = new ";
-      code += GenTypeGet(field.value.type) + "();\n";
-      code += Indent + Indent + "$obj->init($this->bb_pos + ";
-      code += NumToString(field.value.offset) + ", $this->bb);";
-      code += "\n" + Indent + Indent + "return $obj;\n";
-      code += Indent + "}\n\n";
-    }
-
-    // Get a struct by initializing an existing struct.
-    // Specific to Table.
-    void GetStructFieldOfTable(const FieldDef &field, std::string *code_ptr) {
-      std::string &code = *code_ptr;
-
-      code += Indent + "public function get";
-      code += MakeCamel(field.name);
-      code += "()\n";
-      code += Indent + "{\n";
-      code += Indent + Indent + "$obj = new ";
-      code += MakeCamel(GenTypeGet(field.value.type)) + "();\n";
-      code += Indent + Indent +
-        "$o = $this->__offset(" +
-        NumToString(field.value.offset) +
-        ");\n";
-      code += Indent + Indent;
-      code += "return $o != 0 ? $obj->init(";
-      if (field.value.type.struct_def->fixed)
-      {
-        code += "$o + $this->bb_pos, $this->bb) : ";
-      } else {
-        code += "$this->__indirect($o + $this->bb_pos), $this->bb) : ";
-      }
-      code += GenDefaultValue(field.value) + ";\n";
-      code += Indent + "}\n\n";
-    }
-
-    // Get the value of a string.
-    void GetStringField(const FieldDef &field, std::string *code_ptr) {
-      std::string &code = *code_ptr;
-      code += Indent + "public function get";
-      code += MakeCamel(field.name);
-      code += "()\n";
-      code += Indent + "{\n";
-      code += Indent + Indent +
-        "$o = $this->__offset(" +
-        NumToString(field.value.offset) +
-        ");\n";
-      code += Indent + Indent;
-      code += "return $o != 0 ? $this->__string($o + $this->bb_pos) : ";
-      code += GenDefaultValue(field.value) + ";\n";
-      code += Indent + "}\n\n";
-    }
-
-    // Get the value of a union from an object.
-    void GetUnionField(const FieldDef &field, std::string *code_ptr) {
-      std::string &code = *code_ptr;
-
-      code += Indent + "/**\n";
-      code += Indent + " * @return" + GenTypeBasic(field.value.type) + "\n";
-      code += Indent + " */\n";
-      code += Indent + "public function get";
-      code += MakeCamel(field.name) + "($obj)\n";
-      code += Indent + "{\n";
-      code += Indent + Indent +
-        "$o = $this->__offset(" +
-        NumToString(field.value.offset) +
-        ");\n";
-      code += Indent + Indent;
-      code += "return $o != 0 ? $this->__union($obj, $o) : null;\n";
-      code += Indent + "}\n\n";
-    }
-
-    // Get the value of a vector's struct member.
-    void GetMemberOfVectorOfStruct(const StructDef &struct_def,
-      const FieldDef &field, std::string *code_ptr) {
-      std::string &code = *code_ptr;
-      auto vectortype = field.value.type.VectorType();
-
-      code += Indent + "/**\n";
-      code += Indent + " * @return" + GenTypeBasic(field.value.type) + "\n";
-      code += Indent + " */\n";
-      code += Indent + "public function get";
-      code += MakeCamel(field.name);
-      code += "($j)\n";
-      code += Indent + "{\n";
-      code += Indent + Indent +
-        "$o = $this->__offset(" +
-        NumToString(field.value.offset) +
-        ");\n";
-      code += Indent + Indent + "$obj = new ";
-      code += MakeCamel(GenTypeGet(field.value.type)) + "();\n";
-
-      switch (field.value.type.base_type) {
-      case BASE_TYPE_STRUCT:
-        if (struct_def.fixed) {
-          code += Indent + Indent;
-          code += "return $o != 0 ? $obj->init($this->bb_pos +"
-            + NumToString(field.value.offset) + ", $this->bb) : null;\n";
-        } else {
-          code += Indent + Indent + "return $o != 0 ? $obj->init(";
-          code += field.value.type.struct_def->fixed
-            ? "$o + $this->bb_pos"
-            : "$this->__indirect($o + $this->bb_pos)";
-          code += ", $this->bb) : null;\n";
-        }
-        break;
-      case BASE_TYPE_STRING:
-        code += "// base_type_string\n";
-        // TODO(chobie): do we need this?
-        break;
-      case BASE_TYPE_VECTOR:
-        if (vectortype.base_type == BASE_TYPE_STRUCT) {
-          code += Indent + Indent + "return $o != 0 ? $obj->init(";
-          if (vectortype.struct_def->fixed) {
-            code += "$this->__vector($o) + $j *";
-            code += NumToString(InlineSize(vectortype));
-          } else {
-            code += "$this->__indirect($this->__vector($o) + $j * ";
-            code += NumToString(InlineSize(vectortype)) + ")";
-          }
-          code += ", $this->bb) : null;\n";
-        }
-        break;
-      case BASE_TYPE_UNION:
-        code += Indent + Indent + "return $o != 0 ? $this->";
-        code += GenGetter(field.value.type) + "($obj, $o); null;\n";
-        break;
-      default:
-        break;
-      }
-
-      code += Indent + "}\n\n";
-    }
-
-    // Get the value of a vector's non-struct member. Uses a named return
-    // argument to conveniently set the zero value for the result.
-    void GetMemberOfVectorOfNonStruct(const FieldDef &field,
-      std::string *code_ptr) {
-      std::string &code = *code_ptr;
-      auto vectortype = field.value.type.VectorType();
-
-      code += Indent + "/**\n";
-      code += Indent + " * @param int offset\n";
-      code += Indent + " * @return " + GenTypeGet(field.value.type) + "\n";
-      code += Indent + " */\n";
-      code += Indent + "public function get";
-      code += MakeCamel(field.name);
-      code += "($j)\n";
-      code += Indent + "{\n";
-      code += Indent + Indent +
-        "$o = $this->__offset(" +
-        NumToString(field.value.offset) +
-        ");\n";
-
-      if (field.value.type.VectorType().base_type == BASE_TYPE_STRING) {
-        code += Indent + Indent;
-        code += "return $o != 0 ? $this->__string($this->__vector($o) + $j * ";
-        code += NumToString(InlineSize(vectortype)) + ") : ";
-        code += GenDefaultValue(field.value) + ";\n";
-      } else {
-        code += Indent + Indent + "return $o != 0 ? $this->bb->get";
-        code += MakeCamel(GenTypeGet(field.value.type));
-        code += "($this->__vector($o) + $j * ";
-        code += NumToString(InlineSize(vectortype)) + ") : ";
-        code += GenDefaultValue(field.value) + ";\n";
-      }
-      code += Indent + "}\n\n";
-    }
-
-    // Recursively generate arguments for a constructor, to deal with nested
-    // structs.
-    static void StructBuilderArgs(const StructDef &struct_def,
-      const char *nameprefix,
-      std::string *code_ptr) {
-      for (auto it = struct_def.fields.vec.begin();
-      it != struct_def.fields.vec.end();
-        ++it) {
-        auto &field = **it;
-        if (IsStruct(field.value.type)) {
-          // Generate arguments for a struct inside a struct. To ensure names
-          // don't clash, and to make it obvious
-          // these arguments are constructing
-          // a nested struct, prefix the name with the field name.
-          StructBuilderArgs(*field.value.type.struct_def,
-            (nameprefix + (field.name + "_")).c_str(),
-            code_ptr);
-        } else {
-          std::string &code = *code_ptr;
-          code += (std::string)", $" + nameprefix;
-          code += MakeCamel(field.name, false);
-        }
-      }
-    }
-
-    // Recursively generate struct construction statements and instert manual
-    // padding.
-    static void StructBuilderBody(const StructDef &struct_def,
-      const char *nameprefix,
-      std::string *code_ptr) {
-      std::string &code = *code_ptr;
-      code += Indent + Indent + "$builder->prep(";
-      code += NumToString(struct_def.minalign) + ", ";
-      code += NumToString(struct_def.bytesize) + ");\n";
-      for (auto it = struct_def.fields.vec.rbegin();
-      it != struct_def.fields.vec.rend();
-        ++it) {
-        auto &field = **it;
-        if (field.padding) {
-          code += Indent + Indent + "$builder->pad(";
-          code += NumToString(field.padding) + ");\n";
-        }
-        if (IsStruct(field.value.type)) {
-          StructBuilderBody(*field.value.type.struct_def,
-            (nameprefix + (field.name + "_")).c_str(),
-            code_ptr);
-        } else {
-          code += Indent + Indent + "$builder->put" + GenMethod(field) + "($";
-          code += nameprefix + MakeCamel(field.name, false) + ");\n";
-        }
-      }
-    }
-
-    // Get the value of a table's starting offset.
-    static void GetStartOfTable(const StructDef &struct_def,
-      std::string *code_ptr) {
-      std::string &code = *code_ptr;
-
-      code += Indent + "/**\n";
-      code += Indent + " * @param FlatBufferBuilder $builder\n";
-      code += Indent + " * @return void\n";
-      code += Indent + " */\n";
-      code += Indent + "public static function start" + struct_def.name;
-      code += "(FlatBufferBuilder $builder)\n";
-      code += Indent + "{\n";
-      code += Indent + Indent + "$builder->StartObject(";
-      code += NumToString(struct_def.fields.vec.size());
-      code += ");\n";
-      code += Indent + "}\n\n";
-
-      code += Indent + "/**\n";
-      code += Indent + " * @param FlatBufferBuilder $builder\n";
-      code += Indent + " * @return " + struct_def.name + "\n";
-      code += Indent + " */\n";
-      code += Indent + "public static function create" + struct_def.name;
-      code += "(FlatBufferBuilder $builder, ";
-
-      for (auto it = struct_def.fields.vec.begin();
-      it != struct_def.fields.vec.end();
-        ++it) {
-        auto &field = **it;
-
-        if (field.deprecated) continue;
-        code += "$" + field.name;
-        if (!(it == (--struct_def.fields.vec.end()))) {
-          code += ", ";
-        }
-      }
-      code += ")\n";
-      code += Indent + "{\n";
-      code += Indent + Indent + "$builder->startObject(";
-      code += NumToString(struct_def.fields.vec.size());
-      code += ");\n";
-      for (auto it = struct_def.fields.vec.begin();
-      it != struct_def.fields.vec.end();
-        ++it) {
-        auto &field = **it;
-        if (field.deprecated) continue;
-
-        code += Indent + Indent + "self::add";
-        code += MakeCamel(field.name) + "($builder, $" + field.name + ");\n";
-      }
-
-      code += Indent + Indent + "$o = $builder->endObject();\n";
-
-      for (auto it = struct_def.fields.vec.begin();
-      it != struct_def.fields.vec.end();
-        ++it) {
-        auto &field = **it;
-        if (!field.deprecated && field.required) {
-          code += Indent + Indent + "$builder->required($o, ";
-          code += NumToString(field.value.offset);
-          code += ");  // " + field.name + "\n";
-        }
-      }
-      code += Indent + Indent + "return $o;\n";
-      code += Indent + "}\n\n";
-    }
-
-    // Set the value of a table's field.
-    static void BuildFieldOfTable(const FieldDef &field,
-      const size_t offset,
-      std::string *code_ptr) {
-      std::string &code = *code_ptr;
-
-
-      code += Indent + "/**\n";
-      code += Indent + " * @param FlatBufferBuilder $builder\n";
-      code += Indent + " * @param " + GenTypeBasic(field.value.type) + "\n";
-      code += Indent + " * @return void\n";
-      code += Indent + " */\n";
-      code += Indent + "public static function ";
-      code += "add" + MakeCamel(field.name);
-      code += "(FlatBufferBuilder $builder, ";
-      code += "$" + MakeCamel(field.name, false);
-      code += ")\n";
-      code += Indent + "{\n";
-      code += Indent + Indent + "$builder->add";
-      code += GenMethod(field) + "X(";
-      code += NumToString(offset) + ", ";
-
-
-      code += "$" + MakeCamel(field.name, false);
-      code += ", ";
-
-      if (field.value.type.base_type == BASE_TYPE_BOOL) {
-        code += "false";
-      } else {
-        code += field.value.constant;
-      }
-      code += ");\n";
-      code += Indent + "}\n\n";
-    }
-
-    // Set the value of one of the members of a table's vector.
-    static void BuildVectorOfTable(const FieldDef &field,
-      std::string *code_ptr) {
-      std::string &code = *code_ptr;
-
-      auto vector_type = field.value.type.VectorType();
-      auto alignment = InlineAlignment(vector_type);
-      auto elem_size = InlineSize(vector_type);
-      code += Indent + "/**\n";
-      code += Indent + " * @param FlatBufferBuilder $builder\n";
-      code += Indent + " * @param array offset array\n";
-      code += Indent + " * @return int vector offset\n";
-      code += Indent + " */\n";
-      code += Indent + "public static function create";
-      code += MakeCamel(field.name);
-      code += "Vector(FlatBufferBuilder $builder, array $data)\n";
-      code += Indent + "{\n";
-      code += Indent + Indent + "$builder->startVector(";
-      code += NumToString(elem_size);
-      code += ", count($data), " + NumToString(alignment);
-      code += ");\n";
-      code += Indent + Indent;
-      code += "for ($i = count($data) - 1; $i >= 0; $i--) {\n";
-      if (IsScalar(field.value.type.VectorType().base_type)) {
-        code += Indent + Indent + Indent;
-        code += "$builder->add";
-        code += MakeCamel(GenTypeBasic(field.value.type.VectorType()));
-        code += "($data[$i]);\n";
-      } else {
-        code += Indent + Indent + Indent;
-        code += "$builder->addOffset($data[$i]);\n";
-      }
-      code += Indent + Indent + "}\n";
-      code += Indent + Indent + "return $builder->endVector();\n";
-      code += Indent + "}\n\n";
-
-
-      code += Indent + "/**\n";
-      code += Indent + " * @param FlatBufferBuilder $builder\n";
-      code += Indent + " * @param int $numElems\n";
-      code += Indent + " * @return void\n";
-      code += Indent + " */\n";
-      code += Indent + "public static function start";
-      code += MakeCamel(field.name);
-      code += "Vector(FlatBufferBuilder $builder, $numElems)\n";
-      code += Indent + "{\n";
-      code += Indent + Indent +  "$builder->startVector(";
-      code += NumToString(elem_size);
-      code += ", $numElems, " + NumToString(alignment);
-      code += ");\n";
-      code += Indent + "}\n\n";
-    }
-
-    // Get the offset of the end of a table.
-    void GetEndOffsetOnTable(const StructDef &struct_def, std::string *code_ptr) {
-      std::string &code = *code_ptr;
-
-
-      code += Indent + "/**\n";
-      code += Indent + " * @param FlatBufferBuilder $builder\n";
-      code += Indent + " * @return int table offset\n";
-      code += Indent + " */\n";
-      code += Indent + "public static function end" + struct_def.name;
-      code += "(FlatBufferBuilder $builder)\n";
-      code += Indent + "{\n";
-      code += Indent + Indent + "$o = $builder->endObject();\n";
-
-
-      for (auto it = struct_def.fields.vec.begin();
-      it != struct_def.fields.vec.end();
-        ++it) {
-        auto &field = **it;
-        if (!field.deprecated && field.required) {
-          code += Indent + Indent + "$builder->required($o, ";
-          code += NumToString(field.value.offset);
-          code += ");  // " + field.name + "\n";
-        }
-      }
-      code += Indent + Indent + "return $o;\n";
-      code += Indent + "}\n";
-
-      if (parser_.root_struct_def_ == &struct_def) {
-        code += "\n";
-        code += Indent + "public static function finish";
-        code += struct_def.name;
-        code += "Buffer(FlatBufferBuilder $builder, $offset)\n";
-        code += Indent + "{\n";
-        code += Indent + Indent + "$builder->finish($offset";
-
-        if (parser_.file_identifier_.length())
-          code += ", \"" + parser_.file_identifier_ + "\"";
-        code += ");\n";
-        code += Indent + "}\n";
-      }
-    }
-
-  // Generate a struct field, conditioned on its child type(s).
-    void GenStructAccessor(const StructDef &struct_def, const FieldDef &field,
-      std::string *code_ptr) {
-      GenComment(field.doc_comment, code_ptr, nullptr);
-
-      if (IsScalar(field.value.type.base_type)) {
-        if (struct_def.fixed) {
-          GetScalarFieldOfStruct(field, code_ptr);
-        } else {
-          GetScalarFieldOfTable(field, code_ptr);
-        }
-      } else {
-        switch (field.value.type.base_type) {
-        case BASE_TYPE_STRUCT:
-          if (struct_def.fixed) {
-            GetStructFieldOfStruct(field, code_ptr);
-          } else {
-            GetStructFieldOfTable(field, code_ptr);
-          }
-          break;
-        case BASE_TYPE_STRING:
-          GetStringField(field, code_ptr);
-          break;
-        case BASE_TYPE_VECTOR: {
-          auto vectortype = field.value.type.VectorType();
-          if (vectortype.base_type == BASE_TYPE_STRUCT) {
-            GetMemberOfVectorOfStruct(struct_def, field, code_ptr);
-          } else {
-            GetMemberOfVectorOfNonStruct(field, code_ptr);
-          }
-          break;
-        }
-        case BASE_TYPE_UNION:
-          GetUnionField(field, code_ptr);
-          break;
-        default:
-          assert(0);
-        }
-      }
-      if (field.value.type.base_type == BASE_TYPE_VECTOR) {
-        GetVectorLen(field, code_ptr);
-        if (field.value.type.element == BASE_TYPE_UCHAR) {
-          GetUByte(field, code_ptr);
-        }
-      }
-    }
-
-    // Generate table constructors, conditioned on its members' types.
-    void GenTableBuilders(const StructDef &struct_def, std::string *code_ptr) {
-      GetStartOfTable(struct_def, code_ptr);
-
-      for (auto it = struct_def.fields.vec.begin();
-      it != struct_def.fields.vec.end();
-        ++it) {
-        auto &field = **it;
-        if (field.deprecated) continue;
-
-        auto offset = it - struct_def.fields.vec.begin();
-        if (field.value.type.base_type == BASE_TYPE_UNION) {
-          std::string &code = *code_ptr;
-          code += Indent + "public static function add";
-          code += MakeCamel(field.name);
-          code += "(FlatBufferBuilder $builder, $offset)\n";
-          code += Indent + "{\n";
-          code += Indent + Indent + "$builder->addOffsetX(";
-          code += NumToString(offset) + ", $offset, 0);\n";
-          code += Indent + "}\n\n";
-        } else {
-          BuildFieldOfTable(field, offset, code_ptr);
-        }
-        if (field.value.type.base_type == BASE_TYPE_VECTOR) {
-          BuildVectorOfTable(field, code_ptr);
-        }
-      }
-
-      GetEndOffsetOnTable(struct_def, code_ptr);
-    }
-
-    // Generate struct or table methods.
-    void GenStruct(const StructDef &struct_def,
-      std::string *code_ptr) {
-      if (struct_def.generated) return;
-
-      GenComment(struct_def.doc_comment, code_ptr, nullptr);
-      BeginClass(struct_def, code_ptr);
-
-      if (!struct_def.fixed) {
-        // Generate a special accessor for the table that has been declared as
-        // the root type.
-        NewRootTypeFromBuffer(struct_def, code_ptr);
-      }
-
-      std::string &code = *code_ptr;
-      if (!struct_def.fixed) {
-        if (parser_.file_identifier_.length()) {
-          // Return the identifier
-          code += Indent + "public static function " + struct_def.name;
-          code += "Identifier()\n";
-          code += Indent + "{\n";
-          code += Indent + Indent + "return \"";
-          code += parser_.file_identifier_ + "\";\n";
-          code += Indent + "}\n\n";
-
-          // Check if a buffer has the identifier.
-          code += Indent + "public static function " + struct_def.name;
-          code += "BufferHasIdentifier(ByteBuffer $buf)\n";
-          code += Indent + "{\n";
-          code += Indent + Indent + "return self::";
-          code += "__has_identifier($buf, self::";
-          code += struct_def.name + "Identifier());\n";
-          code += Indent + "}\n\n";
-        }
-
-        if (parser_.file_extension_.length()) {
-          // Return the extension
-          code += Indent + "public static function " + struct_def.name;
-          code += "Extension()\n";
-          code += Indent + "{\n";
-          code += Indent + Indent + "return \"" + parser_.file_extension_;
-          code += "\";\n";
-          code += Indent + "}\n\n";
-        }
-      }
-
-      // Generate the Init method that sets the field in a pre-existing
-      // accessor object. This is to allow object reuse.
-      InitializeExisting(struct_def, code_ptr);
-      for (auto it = struct_def.fields.vec.begin();
-      it != struct_def.fields.vec.end();
-        ++it) {
-        auto &field = **it;
-        if (field.deprecated) continue;
-
-        GenStructAccessor(struct_def, field, code_ptr);
-      }
-
-      if (struct_def.fixed) {
-        // create a struct constructor function
-        GenStructBuilder(struct_def, code_ptr);
-      } else {
-        // Create a set of functions that allow table construction.
-        GenTableBuilders(struct_def, code_ptr);
-      }
-      EndClass(code_ptr);
-    }
-
-    // Generate enum declarations.
-    static void GenEnum(const EnumDef &enum_def, std::string *code_ptr) {
-      if (enum_def.generated) return;
-
-      GenComment(enum_def.doc_comment, code_ptr, nullptr);
-      BeginEnum(enum_def.name, code_ptr);
-      for (auto it = enum_def.vals.vec.begin();
-      it != enum_def.vals.vec.end();
-        ++it) {
-        auto &ev = **it;
-        GenComment(ev.doc_comment, code_ptr, nullptr);
-        EnumMember(ev, code_ptr);
-      }
-
-      std::string &code = *code_ptr;
-      code += "\n";
-      code += Indent + "private static $names = array(\n";
-      for (auto it = enum_def.vals.vec.begin();
-        it != enum_def.vals.vec.end(); ++it) {
-        auto &ev = **it;
-        code += Indent + Indent + "\"" + ev.name + "\",\n";
-      }
-
-      code += Indent + ");\n\n";
-      code += Indent + "public static function Name($e)\n";
-      code += Indent + "{\n";
-      code += Indent + Indent + "if (!isset(self::$names[$e])) {\n";
-      code += Indent + Indent + Indent + "throw new \\Exception();\n";
-      code += Indent + Indent + "}\n";
-      code += Indent + Indent + "return self::$names[$e];\n";
-      code += Indent + "}\n";
-      EndEnum(code_ptr);
-    }
-
-    // Returns the function name that is able to read a value of the given type.
-    static std::string GenGetter(const Type &type) {
-      switch (type.base_type) {
-      case BASE_TYPE_STRING: return "__string";
-      case BASE_TYPE_STRUCT: return "__struct";
-      case BASE_TYPE_UNION: return "__union";
-      case BASE_TYPE_VECTOR: return GenGetter(type.VectorType());
-      default:
-        return "Get";
-      }
-    }
-
-    // Returns the method name for use with add/put calls.
-    static std::string GenMethod(const FieldDef &field) {
-      return IsScalar(field.value.type.base_type)
-        ? MakeCamel(GenTypeBasic(field.value.type))
-        : (IsStruct(field.value.type) ? "Struct" : "Offset");
-    }
-
-    static std::string GenTypeBasic(const Type &type) {
-      static const char *ctypename[] = {
-#define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE) \
-    #NTYPE,
-        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-#undef FLATBUFFERS_TD
-      };
-      return ctypename[type.base_type];
-    }
-
-    std::string GenDefaultValue(const Value &value) {
-      if (value.type.enum_def) {
-        if (auto val = value.type.enum_def->ReverseLookup(
-          atoi(value.constant.c_str()), false)) {
-          return WrapInNameSpace(*value.type.enum_def) + "::" + val->name;
-        }
-      }
-
-      switch (value.type.base_type) {
-      case BASE_TYPE_BOOL:
-        return value.constant == "0" ? "false" : "true";
-
-      case BASE_TYPE_STRING:
-        return "null";
-
-      case BASE_TYPE_LONG:
-      case BASE_TYPE_ULONG:
-        if (value.constant != "0") {
-          int64_t constant = StringToInt(value.constant.c_str());
-          return NumToString(constant);
-        }
-        return "0";
-
-      default:
-        return value.constant;
-      }
-    }
-
-    static std::string GenTypePointer(const Type &type) {
-      switch (type.base_type) {
-      case BASE_TYPE_STRING:
-        return "string";
-      case BASE_TYPE_VECTOR:
-        return GenTypeGet(type.VectorType());
-      case BASE_TYPE_STRUCT:
-        return type.struct_def->name;
-      case BASE_TYPE_UNION:
-        // fall through
-      default:
-        return "Table";
-      }
-    }
-
-    static std::string GenTypeGet(const Type &type) {
-      return IsScalar(type.base_type)
-        ? GenTypeBasic(type)
-        : GenTypePointer(type);
-    }
-
-    // Create a struct with a builder and the struct's arguments.
-    static void GenStructBuilder(const StructDef &struct_def,
-      std::string *code_ptr) {
-      std::string &code = *code_ptr;
-      code += "\n";
-      code += Indent + "/**\n";
-      code += Indent + " * @return int offset\n";
-      code += Indent + " */\n";
-      code += Indent + "public static function create" + struct_def.name;
-      code += "(FlatBufferBuilder $builder";
-      StructBuilderArgs(struct_def, "", code_ptr);
-      code += ")\n";
-      code += Indent + "{\n";
-
-      StructBuilderBody(struct_def, "", code_ptr);
-
-      code += Indent + Indent + "return $builder->offset();\n";
-      code += Indent + "}\n";
-    }
-
-    };
-    }  // namespace php
-
-    bool GeneratePhp(const Parser &parser, const std::string &path,
-                     const std::string &file_name) {
-      php::PhpGenerator generator(parser, path, file_name);
-      return generator.generate();
-    }
-    }  // namespace flatbuffers
diff --git a/third_party/flatbuffers/src/idl_gen_python.cpp b/third_party/flatbuffers/src/idl_gen_python.cpp
deleted file mode 100644
index 76fea3e..0000000
--- a/third_party/flatbuffers/src/idl_gen_python.cpp
+++ /dev/null
@@ -1,671 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// independent from idl_parser, since this code is not needed for most clients
-
-#include <string>
-
-#include "flatbuffers/flatbuffers.h"
-#include "flatbuffers/idl.h"
-#include "flatbuffers/util.h"
-#include "flatbuffers/code_generators.h"
-
-namespace flatbuffers {
-namespace python {
-
-static std::string GenGetter(const Type &type);
-static std::string GenMethod(const FieldDef &field);
-static void GenStructBuilder(const StructDef &struct_def,
-                             std::string *code_ptr);
-static void GenReceiver(const StructDef &struct_def, std::string *code_ptr);
-static std::string GenTypeBasic(const Type &type);
-static std::string GenTypeGet(const Type &type);
-static std::string TypeName(const FieldDef &field);
-
-
-// Hardcode spaces per indentation.
-const std::string Indent = "    ";
-
-// Most field accessors need to retrieve and test the field offset first,
-// this is the prefix code for that.
-std::string OffsetPrefix(const FieldDef &field) {
-  return "\n" + Indent + Indent +
-         "o = flatbuffers.number_types.UOffsetTFlags.py_type" +
-         "(self._tab.Offset(" +
-         NumToString(field.value.offset) +
-         "))\n" + Indent + Indent + "if o != 0:\n";
-}
-
-// Begin a class declaration.
-static void BeginClass(const StructDef &struct_def, std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "class " + struct_def.name + "(object):\n";
-  code += Indent + "__slots__ = ['_tab']";
-  code += "\n\n";
-}
-
-// Begin enum code with a class declaration.
-static void BeginEnum(const std::string class_name, std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "class " + class_name + "(object):\n";
-}
-
-// A single enum member.
-static void EnumMember(const EnumVal ev, std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += Indent;
-  code += ev.name;
-  code += " = ";
-  code += NumToString(ev.value) + "\n";
-}
-
-// End enum code.
-static void EndEnum(std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "\n";
-}
-
-// Initialize a new struct or table from existing data.
-static void NewRootTypeFromBuffer(const StructDef &struct_def,
-                                  std::string *code_ptr) {
-  std::string &code = *code_ptr;
-
-  code += Indent + "@classmethod\n";
-  code += Indent + "def GetRootAs";
-  code += struct_def.name;
-  code += "(cls, buf, offset):";
-  code += "\n";
-  code += Indent + Indent;
-  code += "n = flatbuffers.encode.Get";
-  code += "(flatbuffers.packer.uoffset, buf, offset)\n";
-  code += Indent + Indent + "x = " + struct_def.name + "()\n";
-  code += Indent + Indent + "x.Init(buf, n + offset)\n";
-  code += Indent + Indent + "return x\n";
-  code += "\n";
-}
-
-// Initialize an existing object with other data, to avoid an allocation.
-static void InitializeExisting(const StructDef &struct_def,
-                               std::string *code_ptr) {
-  std::string &code = *code_ptr;
-
-  GenReceiver(struct_def, code_ptr);
-  code += "Init(self, buf, pos):\n";
-  code += Indent + Indent + "self._tab = flatbuffers.table.Table(buf, pos)\n";
-  code += "\n";
-}
-
-// Get the length of a vector.
-static void GetVectorLen(const StructDef &struct_def,
-                         const FieldDef &field,
-                         std::string *code_ptr) {
-  std::string &code = *code_ptr;
-
-  GenReceiver(struct_def, code_ptr);
-  code += MakeCamel(field.name) + "Length(self";
-  code += "):" + OffsetPrefix(field);
-  code += Indent + Indent + Indent + "return self._tab.VectorLen(o)\n";
-  code += Indent + Indent + "return 0\n\n";
-}
-
-// Get the value of a struct's scalar.
-static void GetScalarFieldOfStruct(const StructDef &struct_def,
-                                   const FieldDef &field,
-                                   std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  std::string getter = GenGetter(field.value.type);
-  GenReceiver(struct_def, code_ptr);
-  code += MakeCamel(field.name);
-  code += "(self): return " + getter;
-  code += "self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(";
-  code += NumToString(field.value.offset) + "))\n";
-}
-
-// Get the value of a table's scalar.
-static void GetScalarFieldOfTable(const StructDef &struct_def,
-                                  const FieldDef &field,
-                                  std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  std::string getter = GenGetter(field.value.type);
-  GenReceiver(struct_def, code_ptr);
-  code += MakeCamel(field.name);
-  code += "(self):";
-  code += OffsetPrefix(field);
-  code += Indent + Indent + Indent + "return " + getter;
-  code += "o + self._tab.Pos)\n";
-  code += Indent + Indent + "return " + field.value.constant + "\n\n";
-}
-
-// Get a struct by initializing an existing struct.
-// Specific to Struct.
-static void GetStructFieldOfStruct(const StructDef &struct_def,
-                                   const FieldDef &field,
-                                   std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  GenReceiver(struct_def, code_ptr);
-  code += MakeCamel(field.name);
-  code += "(self, obj):\n";
-  code += Indent + Indent + "obj.Init(self._tab.Bytes, self._tab.Pos + ";
-  code += NumToString(field.value.offset) + ")";
-  code += "\n" + Indent + Indent + "return obj\n\n";
-}
-
-// Get a struct by initializing an existing struct.
-// Specific to Table.
-static void GetStructFieldOfTable(const StructDef &struct_def,
-                                  const FieldDef &field,
-                                  std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  GenReceiver(struct_def, code_ptr);
-  code += MakeCamel(field.name);
-  code += "(self):";
-  code += OffsetPrefix(field);
-  if (field.value.type.struct_def->fixed) {
-    code += Indent + Indent + Indent + "x = o + self._tab.Pos\n";
-  } else {
-    code += Indent + Indent + Indent;
-    code += "x = self._tab.Indirect(o + self._tab.Pos)\n";
-  }
-  code += Indent + Indent + Indent;
-  code += "from ." + TypeName(field) + " import " + TypeName(field) + "\n";
-  code += Indent + Indent + Indent + "obj = " + TypeName(field) + "()\n";
-  code += Indent + Indent + Indent + "obj.Init(self._tab.Bytes, x)\n";
-  code += Indent + Indent + Indent + "return obj\n";
-  code += Indent + Indent + "return None\n\n";
-}
-
-// Get the value of a string.
-static void GetStringField(const StructDef &struct_def,
-                           const FieldDef &field,
-                           std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  GenReceiver(struct_def, code_ptr);
-  code += MakeCamel(field.name);
-  code += "(self):";
-  code += OffsetPrefix(field);
-  code += Indent + Indent + Indent + "return " + GenGetter(field.value.type);
-  code += "o + self._tab.Pos)\n";
-  code += Indent + Indent + "return \"\"\n\n";
-}
-
-// Get the value of a union from an object.
-static void GetUnionField(const StructDef &struct_def,
-                          const FieldDef &field,
-                          std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  GenReceiver(struct_def, code_ptr);
-  code += MakeCamel(field.name) + "(self):";
-  code += OffsetPrefix(field);
-
-  // TODO(rw): this works and is not the good way to it:
-  bool is_native_table = TypeName(field) == "*flatbuffers.Table";
-  if (is_native_table) {
-    code += Indent + Indent + Indent + "from flatbuffers.table import Table\n";
-  } else {
-    code += Indent + Indent + Indent;
-    code += "from ." + TypeName(field) + " import " + TypeName(field) + "\n";
-  }
-  code += Indent + Indent + Indent + "obj = Table(bytearray(), 0)\n";
-  code += Indent + Indent + Indent + GenGetter(field.value.type);
-  code += "obj, o)\n" + Indent + Indent + Indent + "return obj\n";
-  code += Indent + Indent + "return None\n\n";
-}
-
-// Get the value of a vector's struct member.
-static void GetMemberOfVectorOfStruct(const StructDef &struct_def,
-                                      const FieldDef &field,
-                                      std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  auto vectortype = field.value.type.VectorType();
-
-  GenReceiver(struct_def, code_ptr);
-  code += MakeCamel(field.name);
-  code += "(self, j):" + OffsetPrefix(field);
-  code += Indent + Indent + Indent + "x = self._tab.Vector(o)\n";
-  code += Indent + Indent + Indent;
-  code += "x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * ";
-  code += NumToString(InlineSize(vectortype)) + "\n";
-  if (!(vectortype.struct_def->fixed)) {
-    code += Indent + Indent + Indent + "x = self._tab.Indirect(x)\n";
-  }
-  code += Indent + Indent + Indent;
-  code += "from ." + TypeName(field) + " import " + TypeName(field) + "\n";
-  code += Indent + Indent + Indent + "obj = " + TypeName(field) + "()\n";
-  code += Indent + Indent + Indent + "obj.Init(self._tab.Bytes, x)\n";
-  code += Indent + Indent + Indent + "return obj\n";
-  code += Indent + Indent + "return None\n\n";
-}
-
-// Get the value of a vector's non-struct member. Uses a named return
-// argument to conveniently set the zero value for the result.
-static void GetMemberOfVectorOfNonStruct(const StructDef &struct_def,
-                                         const FieldDef &field,
-                                         std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  auto vectortype = field.value.type.VectorType();
-
-  GenReceiver(struct_def, code_ptr);
-  code += MakeCamel(field.name);
-  code += "(self, j):";
-  code += OffsetPrefix(field);
-  code += Indent + Indent + Indent + "a = self._tab.Vector(o)\n";
-  code += Indent + Indent + Indent;
-  code += "return " + GenGetter(field.value.type);
-  code += "a + flatbuffers.number_types.UOffsetTFlags.py_type(j * ";
-  code += NumToString(InlineSize(vectortype)) + "))\n";
-  if (vectortype.base_type == BASE_TYPE_STRING) {
-    code += Indent + Indent + "return \"\"\n";
-  } else {
-    code += Indent + Indent + "return 0\n";
-  }
-  code += "\n";
-}
-
-// Begin the creator function signature.
-static void BeginBuilderArgs(const StructDef &struct_def,
-                             std::string *code_ptr) {
-  std::string &code = *code_ptr;
-
-  code += "\n";
-  code += "def Create" + struct_def.name;
-  code += "(builder";
-}
-
-// Recursively generate arguments for a constructor, to deal with nested
-// structs.
-static void StructBuilderArgs(const StructDef &struct_def,
-                              const char *nameprefix,
-                              std::string *code_ptr) {
-  for (auto it = struct_def.fields.vec.begin();
-       it != struct_def.fields.vec.end();
-       ++it) {
-    auto &field = **it;
-    if (IsStruct(field.value.type)) {
-      // Generate arguments for a struct inside a struct. To ensure names
-      // don't clash, and to make it obvious these arguments are constructing
-      // a nested struct, prefix the name with the field name.
-      StructBuilderArgs(*field.value.type.struct_def,
-                        (nameprefix + (field.name + "_")).c_str(),
-                        code_ptr);
-    } else {
-      std::string &code = *code_ptr;
-      code += (std::string)", " + nameprefix;
-      code += MakeCamel(field.name, false);
-    }
-  }
-}
-
-// End the creator function signature.
-static void EndBuilderArgs(std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "):\n";
-}
-
-// Recursively generate struct construction statements and instert manual
-// padding.
-static void StructBuilderBody(const StructDef &struct_def,
-                              const char *nameprefix,
-                              std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "    builder.Prep(" + NumToString(struct_def.minalign) + ", ";
-  code += NumToString(struct_def.bytesize) + ")\n";
-  for (auto it = struct_def.fields.vec.rbegin();
-       it != struct_def.fields.vec.rend();
-       ++it) {
-    auto &field = **it;
-    if (field.padding)
-      code += "    builder.Pad(" + NumToString(field.padding) + ")\n";
-    if (IsStruct(field.value.type)) {
-      StructBuilderBody(*field.value.type.struct_def,
-                        (nameprefix + (field.name + "_")).c_str(),
-                        code_ptr);
-    } else {
-      code += "    builder.Prepend" + GenMethod(field) + "(";
-      code += nameprefix + MakeCamel(field.name, false) + ")\n";
-    }
-  }
-}
-
-static void EndBuilderBody(std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "    return builder.Offset()\n";
-}
-
-// Get the value of a table's starting offset.
-static void GetStartOfTable(const StructDef &struct_def,
-                            std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "def " + struct_def.name + "Start";
-  code += "(builder): ";
-  code += "builder.StartObject(";
-  code += NumToString(struct_def.fields.vec.size());
-  code += ")\n";
-}
-
-// Set the value of a table's field.
-static void BuildFieldOfTable(const StructDef &struct_def,
-                              const FieldDef &field,
-                              const size_t offset,
-                              std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "def " + struct_def.name + "Add" + MakeCamel(field.name);
-  code += "(builder, ";
-  code += MakeCamel(field.name, false);
-  code += "): ";
-  code += "builder.Prepend";
-  code += GenMethod(field) + "Slot(";
-  code += NumToString(offset) + ", ";
-  if (!IsScalar(field.value.type.base_type) && (!struct_def.fixed)) {
-    code += "flatbuffers.number_types.UOffsetTFlags.py_type";
-    code += "(";
-    code += MakeCamel(field.name, false) + ")";
-  } else {
-    code += MakeCamel(field.name, false);
-  }
-  code += ", " + field.value.constant;
-  code += ")\n";
-}
-
-// Set the value of one of the members of a table's vector.
-static void BuildVectorOfTable(const StructDef &struct_def,
-                               const FieldDef &field,
-                               std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "def " + struct_def.name + "Start";
-  code += MakeCamel(field.name);
-  code += "Vector(builder, numElems): return builder.StartVector(";
-  auto vector_type = field.value.type.VectorType();
-  auto alignment = InlineAlignment(vector_type);
-  auto elem_size = InlineSize(vector_type);
-  code += NumToString(elem_size);
-  code += ", numElems, " + NumToString(alignment);
-  code += ")\n";
-}
-
-// Get the offset of the end of a table.
-static void GetEndOffsetOnTable(const StructDef &struct_def,
-                                std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += "def " + struct_def.name + "End";
-  code += "(builder): ";
-  code += "return builder.EndObject()\n";
-}
-
-// Generate the receiver for function signatures.
-static void GenReceiver(const StructDef &struct_def, std::string *code_ptr) {
-  std::string &code = *code_ptr;
-  code += Indent + "# " + struct_def.name + "\n";
-  code += Indent + "def ";
-}
-
-// Generate a struct field, conditioned on its child type(s).
-static void GenStructAccessor(const StructDef &struct_def,
-                              const FieldDef &field,
-                              std::string *code_ptr) {
-  GenComment(field.doc_comment, code_ptr, nullptr, "# ");
-  if (IsScalar(field.value.type.base_type)) {
-    if (struct_def.fixed) {
-      GetScalarFieldOfStruct(struct_def, field, code_ptr);
-    } else {
-      GetScalarFieldOfTable(struct_def, field, code_ptr);
-    }
-  } else {
-    switch (field.value.type.base_type) {
-      case BASE_TYPE_STRUCT:
-        if (struct_def.fixed) {
-          GetStructFieldOfStruct(struct_def, field, code_ptr);
-        } else {
-          GetStructFieldOfTable(struct_def, field, code_ptr);
-        }
-        break;
-      case BASE_TYPE_STRING:
-        GetStringField(struct_def, field, code_ptr);
-        break;
-      case BASE_TYPE_VECTOR: {
-        auto vectortype = field.value.type.VectorType();
-        if (vectortype.base_type == BASE_TYPE_STRUCT) {
-          GetMemberOfVectorOfStruct(struct_def, field, code_ptr);
-        } else {
-          GetMemberOfVectorOfNonStruct(struct_def, field, code_ptr);
-        }
-        break;
-      }
-      case BASE_TYPE_UNION:
-        GetUnionField(struct_def, field, code_ptr);
-        break;
-      default:
-        assert(0);
-    }
-  }
-  if (field.value.type.base_type == BASE_TYPE_VECTOR) {
-    GetVectorLen(struct_def, field, code_ptr);
-  }
-}
-
-// Generate table constructors, conditioned on its members' types.
-static void GenTableBuilders(const StructDef &struct_def,
-                             std::string *code_ptr) {
-  GetStartOfTable(struct_def, code_ptr);
-
-  for (auto it = struct_def.fields.vec.begin();
-       it != struct_def.fields.vec.end();
-       ++it) {
-    auto &field = **it;
-    if (field.deprecated) continue;
-
-    auto offset = it - struct_def.fields.vec.begin();
-    BuildFieldOfTable(struct_def, field, offset, code_ptr);
-    if (field.value.type.base_type == BASE_TYPE_VECTOR) {
-      BuildVectorOfTable(struct_def, field, code_ptr);
-    }
-  }
-
-  GetEndOffsetOnTable(struct_def, code_ptr);
-}
-
-// Generate struct or table methods.
-static void GenStruct(const StructDef &struct_def,
-                      std::string *code_ptr) {
-  if (struct_def.generated) return;
-
-  GenComment(struct_def.doc_comment, code_ptr, nullptr, "# ");
-  BeginClass(struct_def, code_ptr);
-  if (!struct_def.fixed) {
-    // Generate a special accessor for the table that has been declared as
-    // the root type.
-    NewRootTypeFromBuffer(struct_def, code_ptr);
-  }
-  // Generate the Init method that sets the field in a pre-existing
-  // accessor object. This is to allow object reuse.
-  InitializeExisting(struct_def, code_ptr);
-  for (auto it = struct_def.fields.vec.begin();
-       it != struct_def.fields.vec.end();
-       ++it) {
-    auto &field = **it;
-    if (field.deprecated) continue;
-
-    GenStructAccessor(struct_def, field, code_ptr);
-  }
-
-  if (struct_def.fixed) {
-    // create a struct constructor function
-    GenStructBuilder(struct_def, code_ptr);
-  } else {
-    // Create a set of functions that allow table construction.
-    GenTableBuilders(struct_def, code_ptr);
-  }
-}
-
-// Generate enum declarations.
-static void GenEnum(const EnumDef &enum_def, std::string *code_ptr) {
-  if (enum_def.generated) return;
-
-  GenComment(enum_def.doc_comment, code_ptr, nullptr, "# ");
-  BeginEnum(enum_def.name, code_ptr);
-  for (auto it = enum_def.vals.vec.begin();
-       it != enum_def.vals.vec.end();
-       ++it) {
-    auto &ev = **it;
-    GenComment(ev.doc_comment, code_ptr, nullptr, "# ");
-    EnumMember(ev, code_ptr);
-  }
-  EndEnum(code_ptr);
-}
-
-// Returns the function name that is able to read a value of the given type.
-static std::string GenGetter(const Type &type) {
-  switch (type.base_type) {
-    case BASE_TYPE_STRING: return "self._tab.String(";
-    case BASE_TYPE_UNION: return "self._tab.Union(";
-    case BASE_TYPE_VECTOR: return GenGetter(type.VectorType());
-    default:
-      return "self._tab.Get(flatbuffers.number_types." + \
-             MakeCamel(GenTypeGet(type)) + \
-             "Flags, ";
-  }
-}
-
-// Returns the method name for use with add/put calls.
-static std::string GenMethod(const FieldDef &field) {
-  return IsScalar(field.value.type.base_type)
-    ? MakeCamel(GenTypeBasic(field.value.type))
-    : (IsStruct(field.value.type) ? "Struct" : "UOffsetTRelative");
-}
-
-static std::string GenTypeBasic(const Type &type) {
-  static const char *ctypename[] = {
-    #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE) \
-      #PTYPE,
-      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-    #undef FLATBUFFERS_TD
-  };
-  return ctypename[type.base_type];
-}
-
-static std::string GenTypePointer(const Type &type) {
-  switch (type.base_type) {
-    case BASE_TYPE_STRING:
-      return "string";
-    case BASE_TYPE_VECTOR:
-      return GenTypeGet(type.VectorType());
-    case BASE_TYPE_STRUCT:
-      return type.struct_def->name;
-    case BASE_TYPE_UNION:
-      // fall through
-    default:
-      return "*flatbuffers.Table";
-  }
-}
-
-static std::string GenTypeGet(const Type &type) {
-  return IsScalar(type.base_type)
-    ? GenTypeBasic(type)
-    : GenTypePointer(type);
-}
-
-static std::string TypeName(const FieldDef &field) {
-  return GenTypeGet(field.value.type);
-}
-
-// Create a struct with a builder and the struct's arguments.
-static void GenStructBuilder(const StructDef &struct_def,
-                             std::string *code_ptr) {
-  BeginBuilderArgs(struct_def, code_ptr);
-  StructBuilderArgs(struct_def, "", code_ptr);
-  EndBuilderArgs(code_ptr);
-
-  StructBuilderBody(struct_def, "", code_ptr);
-  EndBuilderBody(code_ptr);
-}
-
-class PythonGenerator : public BaseGenerator {
- public:
-  PythonGenerator(const Parser &parser, const std::string &path,
-                  const std::string &file_name)
-      : BaseGenerator(parser, path, file_name, "" /* not used */,
-                      "" /* not used */){};
-  bool generate() {
-    if (!generateEnums()) return false;
-    if (!generateStructs()) return false;
-    return true;
-  }
-
- private:
-  bool generateEnums() {
-    for (auto it = parser_.enums_.vec.begin(); it != parser_.enums_.vec.end();
-         ++it) {
-      auto &enum_def = **it;
-      std::string enumcode;
-      GenEnum(enum_def, &enumcode);
-      if (!SaveType(enum_def, enumcode, false)) return false;
-    }
-    return true;
-  }
-
-  bool generateStructs() {
-    for (auto it = parser_.structs_.vec.begin();
-         it != parser_.structs_.vec.end(); ++it) {
-      auto &struct_def = **it;
-      std::string declcode;
-      GenStruct(struct_def, &declcode);
-      if (!SaveType(struct_def, declcode, true)) return false;
-    }
-    return true;
-  }
-
-  // Begin by declaring namespace and imports.
-  void BeginFile(const std::string name_space_name, const bool needs_imports,
-                 std::string *code_ptr) {
-    std::string &code = *code_ptr;
-    code = code + "# " + FlatBuffersGeneratedWarning();
-    code += "# namespace: " + name_space_name + "\n\n";
-    if (needs_imports) {
-      code += "import flatbuffers\n\n";
-    }
-  }
-
-  // Save out the generated code for a Python Table type.
-  bool SaveType(const Definition &def, const std::string &classcode,
-                bool needs_imports) {
-    if (!classcode.length()) return true;
-
-    std::string namespace_dir = path_;
-    auto &namespaces = parser_.namespaces_.back()->components;
-    for (auto it = namespaces.begin(); it != namespaces.end(); ++it) {
-      if (it != namespaces.begin()) namespace_dir += kPathSeparator;
-      namespace_dir += *it;
-      std::string init_py_filename = namespace_dir + "/__init__.py";
-      SaveFile(init_py_filename.c_str(), "", false);
-    }
-
-    std::string code = "";
-    BeginFile(LastNamespacePart(*def.defined_namespace), needs_imports, &code);
-    code += classcode;
-    std::string filename = NamespaceDir(*def.defined_namespace) +
-                           def.name + ".py";
-    return SaveFile(filename.c_str(), code, false);
-  }
-};
-
-}  // namespace python
-
-bool GeneratePython(const Parser &parser, const std::string &path,
-                    const std::string &file_name) {
-  python::PythonGenerator generator(parser, path, file_name);
-  return generator.generate();
-}
-
-}  // namespace flatbuffers
diff --git a/third_party/flatbuffers/src/idl_gen_text.cpp b/third_party/flatbuffers/src/idl_gen_text.cpp
deleted file mode 100644
index dc445e5..0000000
--- a/third_party/flatbuffers/src/idl_gen_text.cpp
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// independent from idl_parser, since this code is not needed for most clients
-
-#include "flatbuffers/flatbuffers.h"
-#include "flatbuffers/idl.h"
-#include "flatbuffers/util.h"
-
-namespace flatbuffers {
-
-static bool GenStruct(const StructDef &struct_def, const Table *table,
-                      int indent, const IDLOptions &opts,
-                      std::string *_text);
-
-// If indentation is less than 0, that indicates we don't want any newlines
-// either.
-const char *NewLine(const IDLOptions &opts) {
-  return opts.indent_step >= 0 ? "\n" : "";
-}
-
-int Indent(const IDLOptions &opts) {
-  return std::max(opts.indent_step, 0);
-}
-
-// Output an identifier with or without quotes depending on strictness.
-void OutputIdentifier(const std::string &name, const IDLOptions &opts,
-                      std::string *_text) {
-  std::string &text = *_text;
-  if (opts.strict_json) text += "\"";
-  text += name;
-  if (opts.strict_json) text += "\"";
-}
-
-// Print (and its template specialization below for pointers) generate text
-// for a single FlatBuffer value into JSON format.
-// The general case for scalars:
-template<typename T> bool Print(T val, Type type, int /*indent*/,
-                                Type * /*union_type*/,
-                                const IDLOptions &opts,
-                                std::string *_text) {
-  std::string &text = *_text;
-  if (type.enum_def && opts.output_enum_identifiers) {
-    auto enum_val = type.enum_def->ReverseLookup(static_cast<int>(val));
-    if (enum_val) {
-      OutputIdentifier(enum_val->name, opts, _text);
-      return true;
-    }
-  }
-
-  if (type.base_type == BASE_TYPE_BOOL) {
-    text += val != 0 ? "true" : "false";
-  } else {
-    text += NumToString(val);
-  }
-
-  return true;
-}
-
-// Print a vector a sequence of JSON values, comma separated, wrapped in "[]".
-template<typename T> bool PrintVector(const Vector<T> &v, Type type,
-                                      int indent, const IDLOptions &opts,
-                                      std::string *_text) {
-  std::string &text = *_text;
-  text += "[";
-  text += NewLine(opts);
-  for (uoffset_t i = 0; i < v.size(); i++) {
-    if (i) {
-      text += ",";
-      text += NewLine(opts);
-    }
-    text.append(indent + Indent(opts), ' ');
-    if (IsStruct(type)) {
-      if (!Print(v.GetStructFromOffset(i * type.struct_def->bytesize), type,
-                 indent + Indent(opts), nullptr, opts, _text)) {
-        return false;
-      }
-    } else {
-      if (!Print(v[i], type, indent + Indent(opts), nullptr,
-                 opts, _text)) {
-        return false;
-      }
-    }
-  }
-  text += NewLine(opts);
-  text.append(indent, ' ');
-  text += "]";
-  return true;
-}
-
-static bool EscapeString(const String &s, std::string *_text, const IDLOptions& opts) {
-  std::string &text = *_text;
-  text += "\"";
-  for (uoffset_t i = 0; i < s.size(); i++) {
-    char c = s[i];
-    switch (c) {
-      case '\n': text += "\\n"; break;
-      case '\t': text += "\\t"; break;
-      case '\r': text += "\\r"; break;
-      case '\b': text += "\\b"; break;
-      case '\f': text += "\\f"; break;
-      case '\"': text += "\\\""; break;
-      case '\\': text += "\\\\"; break;
-      default:
-        if (c >= ' ' && c <= '~') {
-          text += c;
-        } else {
-          // Not printable ASCII data. Let's see if it's valid UTF-8 first:
-          const char *utf8 = s.c_str() + i;
-          int ucc = FromUTF8(&utf8);
-          if (ucc < 0) {
-            if (opts.allow_non_utf8) {
-              text += "\\x";
-              text += IntToStringHex(static_cast<uint8_t>(c), 2);
-            } else {
-              // There are two cases here:
-              //
-              // 1) We reached here by parsing an IDL file. In that case,
-              // we previously checked for non-UTF-8, so we shouldn't reach
-              // here.
-              //
-              // 2) We reached here by someone calling GenerateText()
-              // on a previously-serialized flatbuffer. The data might have
-              // non-UTF-8 Strings, or might be corrupt.
-              //
-              // In both cases, we have to give up and inform the caller
-              // they have no JSON.
-              return false;
-            }
-          } else {
-            if (ucc <= 0xFFFF) {
-              // Parses as Unicode within JSON's \uXXXX range, so use that.
-              text += "\\u";
-              text += IntToStringHex(ucc, 4);
-            } else if (ucc <= 0x10FFFF) {
-              // Encode Unicode SMP values to a surrogate pair using two \u escapes.
-              uint32_t base = ucc - 0x10000;
-              auto high_surrogate = (base >> 10) + 0xD800;
-              auto low_surrogate = (base & 0x03FF) + 0xDC00;
-              text += "\\u";
-              text += IntToStringHex(high_surrogate, 4);
-              text += "\\u";
-              text += IntToStringHex(low_surrogate, 4);
-            }
-            // Skip past characters recognized.
-            i = static_cast<uoffset_t>(utf8 - s.c_str() - 1);
-          }
-        }
-        break;
-    }
-  }
-  text += "\"";
-  return true;
-}
-
-// Specialization of Print above for pointer types.
-template<> bool Print<const void *>(const void *val,
-                                    Type type, int indent,
-                                    Type *union_type,
-                                    const IDLOptions &opts,
-                                    std::string *_text) {
-  switch (type.base_type) {
-    case BASE_TYPE_UNION:
-      // If this assert hits, you have an corrupt buffer, a union type field
-      // was not present or was out of range.
-      assert(union_type);
-      return Print<const void *>(val, *union_type, indent, nullptr, opts,
-                                 _text);
-    case BASE_TYPE_STRUCT:
-      if (!GenStruct(*type.struct_def,
-                     reinterpret_cast<const Table *>(val),
-                     indent,
-                     opts,
-                     _text)) {
-        return false;
-      }
-      break;
-    case BASE_TYPE_STRING: {
-      if (!EscapeString(*reinterpret_cast<const String *>(val), _text, opts)) {
-        return false;
-      }
-      break;
-    }
-    case BASE_TYPE_VECTOR:
-      type = type.VectorType();
-      // Call PrintVector above specifically for each element type:
-      switch (type.base_type) {
-        #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, \
-          PTYPE) \
-          case BASE_TYPE_ ## ENUM: \
-            if (!PrintVector<CTYPE>( \
-                  *reinterpret_cast<const Vector<CTYPE> *>(val), \
-                  type, indent, opts, _text)) { \
-              return false; \
-            } \
-            break;
-          FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-        #undef FLATBUFFERS_TD
-      }
-      break;
-    default: assert(0);
-  }
-  return true;
-}
-
-// Generate text for a scalar field.
-template<typename T> static bool GenField(const FieldDef &fd,
-                                          const Table *table, bool fixed,
-                                          const IDLOptions &opts,
-                                          int indent,
-                                          std::string *_text) {
-  return Print(fixed ?
-    reinterpret_cast<const Struct *>(table)->GetField<T>(fd.value.offset) :
-    table->GetField<T>(fd.value.offset, 0), fd.value.type, indent, nullptr,
-                                            opts, _text);
-}
-
-// Generate text for non-scalar field.
-static bool GenFieldOffset(const FieldDef &fd, const Table *table, bool fixed,
-                           int indent, Type *union_type,
-                           const IDLOptions &opts, std::string *_text) {
-  const void *val = nullptr;
-  if (fixed) {
-    // The only non-scalar fields in structs are structs.
-    assert(IsStruct(fd.value.type));
-    val = reinterpret_cast<const Struct *>(table)->
-            GetStruct<const void *>(fd.value.offset);
-  } else {
-    val = IsStruct(fd.value.type)
-      ? table->GetStruct<const void *>(fd.value.offset)
-      : table->GetPointer<const void *>(fd.value.offset);
-  }
-  return Print(val, fd.value.type, indent, union_type, opts, _text);
-}
-
-// Generate text for a struct or table, values separated by commas, indented,
-// and bracketed by "{}"
-static bool GenStruct(const StructDef &struct_def, const Table *table,
-                      int indent, const IDLOptions &opts,
-                      std::string *_text) {
-  std::string &text = *_text;
-  text += "{";
-  int fieldout = 0;
-  Type *union_type = nullptr;
-  for (auto it = struct_def.fields.vec.begin();
-       it != struct_def.fields.vec.end();
-       ++it) {
-    FieldDef &fd = **it;
-    auto is_present = struct_def.fixed || table->CheckField(fd.value.offset);
-    auto output_anyway = opts.output_default_scalars_in_json &&
-                         IsScalar(fd.value.type.base_type) &&
-                         !fd.deprecated;
-    if (is_present || output_anyway) {
-      if (fieldout++) {
-        text += ",";
-      }
-      text += NewLine(opts);
-      text.append(indent + Indent(opts), ' ');
-      OutputIdentifier(fd.name, opts, _text);
-      text += ": ";
-      if (is_present) {
-        switch (fd.value.type.base_type) {
-           #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, \
-             PTYPE) \
-             case BASE_TYPE_ ## ENUM: \
-                if (!GenField<CTYPE>(fd, table, struct_def.fixed, \
-                                     opts, indent + Indent(opts), _text)) { \
-                  return false; \
-                } \
-                break;
-            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD)
-          #undef FLATBUFFERS_TD
-          // Generate drop-thru case statements for all pointer types:
-          #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, \
-            PTYPE) \
-            case BASE_TYPE_ ## ENUM:
-            FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD)
-          #undef FLATBUFFERS_TD
-              if (!GenFieldOffset(fd, table, struct_def.fixed, indent + Indent(opts),
-                                  union_type, opts, _text)) {
-                return false;
-              }
-              break;
-        }
-        if (fd.value.type.base_type == BASE_TYPE_UTYPE) {
-          auto enum_val = fd.value.type.enum_def->ReverseLookup(
-                                  table->GetField<uint8_t>(fd.value.offset, 0));
-          assert(enum_val);
-          union_type = &enum_val->union_type;
-        }
-      }
-      else
-      {
-        text += fd.value.constant;
-      }
-    }
-  }
-  text += NewLine(opts);
-  text.append(indent, ' ');
-  text += "}";
-  return true;
-}
-
-// Generate a text representation of a flatbuffer in JSON format.
-bool GenerateText(const Parser &parser, const void *flatbuffer,
-                  std::string *_text) {
-  std::string &text = *_text;
-  assert(parser.root_struct_def_);  // call SetRootType()
-  text.reserve(1024);   // Reduce amount of inevitable reallocs.
-  if (!GenStruct(*parser.root_struct_def_,
-                 GetRoot<Table>(flatbuffer),
-                 0,
-                 parser.opts,
-                 _text)) {
-    return false;
-  }
-  text += NewLine(parser.opts);
-  return true;
-}
-
-std::string TextFileName(const std::string &path,
-                         const std::string &file_name) {
-  return path + file_name + ".json";
-}
-
-bool GenerateTextFile(const Parser &parser,
-                      const std::string &path,
-                      const std::string &file_name) {
-  if (!parser.builder_.GetSize() || !parser.root_struct_def_) return true;
-  std::string text;
-  if (!GenerateText(parser, parser.builder_.GetBufferPointer(), &text)) {
-    return false;
-  }
-  return flatbuffers::SaveFile(TextFileName(path, file_name).c_str(),
-                               text,
-                               false);
-}
-
-std::string TextMakeRule(const Parser &parser,
-                         const std::string &path,
-                         const std::string &file_name) {
-  if (!parser.builder_.GetSize() || !parser.root_struct_def_) return "";
-  std::string filebase = flatbuffers::StripPath(
-      flatbuffers::StripExtension(file_name));
-  std::string make_rule = TextFileName(path, filebase) + ": " + file_name;
-  auto included_files = parser.GetIncludedFilesRecursive(
-      parser.root_struct_def_->file);
-  for (auto it = included_files.begin();
-       it != included_files.end(); ++it) {
-    make_rule += " " + *it;
-  }
-  return make_rule;
-}
-
-}  // namespace flatbuffers
-
diff --git a/third_party/flatbuffers/src/idl_parser.cpp b/third_party/flatbuffers/src/idl_parser.cpp
deleted file mode 100644
index e20c275..0000000
--- a/third_party/flatbuffers/src/idl_parser.cpp
+++ /dev/null
@@ -1,2283 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <algorithm>
-#include <list>
-
-#ifdef _WIN32
-#if !defined(_USE_MATH_DEFINES)
-#define _USE_MATH_DEFINES  // For M_PI.
-#endif                     // !defined(_USE_MATH_DEFINES)
-#endif                     // _WIN32
-
-#include <math.h>
-
-#include "flatbuffers/idl.h"
-#include "flatbuffers/util.h"
-
-namespace flatbuffers {
-
-const char *const kTypeNames[] = {
-  #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE) \
-    IDLTYPE,
-    FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-  #undef FLATBUFFERS_TD
-  nullptr
-};
-
-const char kTypeSizes[] = {
-  #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE) \
-      sizeof(CTYPE),
-    FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-  #undef FLATBUFFERS_TD
-};
-
-// The enums in the reflection schema should match the ones we use internally.
-// Compare the last element to check if these go out of sync.
-static_assert(BASE_TYPE_UNION ==
-              static_cast<BaseType>(reflection::Union),
-              "enums don't match");
-
-// Any parsing calls have to be wrapped in this macro, which automates
-// handling of recursive error checking a bit. It will check the received
-// CheckedError object, and return straight away on error.
-#define ECHECK(call) { auto ce = (call); if (ce.Check()) return ce; }
-
-// These two functions are called hundreds of times below, so define a short
-// form:
-#define NEXT() ECHECK(Next())
-#define EXPECT(tok) ECHECK(Expect(tok))
-
-static bool ValidateUTF8(const std::string &str) {
-  const char *s = &str[0];
-  const char * const sEnd = s + str.length();
-  while (s < sEnd) {
-    if (FromUTF8(&s) < 0) {
-      return false;
-    }
-  }
-  return true;
-}
-
-CheckedError Parser::Error(const std::string &msg) {
-  error_ = file_being_parsed_.length() ? AbsolutePath(file_being_parsed_) : "";
-  #ifdef _WIN32
-    error_ += "(" + NumToString(line_) + ")";  // MSVC alike
-  #else
-    if (file_being_parsed_.length()) error_ += ":";
-    error_ += NumToString(line_) + ":0";  // gcc alike
-  #endif
-  error_ += ": error: " + msg;
-  return CheckedError(true);
-}
-
-inline CheckedError NoError() { return CheckedError(false); }
-
-inline std::string OutOfRangeErrorMsg(int64_t val, const std::string &op,
-                                      int64_t limit) {
-  const std::string cause = NumToString(val) + op + NumToString(limit);
-  return "constant does not fit (" + cause + ")";
-}
-
-// Ensure that integer values we parse fit inside the declared integer type.
-CheckedError Parser::CheckInRange(int64_t val, int64_t min, int64_t max) {
-  if (val < min)
-    return Error(OutOfRangeErrorMsg(val, " < ", min));
-  else if (val > max)
-    return Error(OutOfRangeErrorMsg(val, " > ", max));
-  else
-    return NoError();
-}
-
-// atot: templated version of atoi/atof: convert a string to an instance of T.
-template<typename T> inline CheckedError atot(const char *s, Parser &parser,
-                                              T *val) {
-  int64_t i = StringToInt(s);
-  const int64_t min = std::numeric_limits<T>::min();
-  const int64_t max = std::numeric_limits<T>::max();
-  ECHECK(parser.CheckInRange(i, min, max));
-  *val = (T)i;
-  return NoError();
-}
-template<> inline CheckedError atot<uint64_t>(const char *s, Parser &parser,
-                                              uint64_t *val) {
-  (void)parser;
-  *val = StringToUInt(s);
-  return NoError();
-}
-template<> inline CheckedError atot<bool>(const char *s, Parser &parser,
-                                          bool *val) {
-  (void)parser;
-  *val = 0 != atoi(s);
-  return NoError();
-}
-template<> inline CheckedError atot<float>(const char *s, Parser &parser,
-                                           float *val) {
-  (void)parser;
-  *val = static_cast<float>(strtod(s, nullptr));
-  return NoError();
-}
-template<> inline CheckedError atot<double>(const char *s, Parser &parser,
-                                            double *val) {
-  (void)parser;
-  *val = strtod(s, nullptr);
-  return NoError();
-}
-
-template<> inline CheckedError atot<Offset<void>>(const char *s, Parser &parser,
-                                                  Offset<void> *val) {
-  (void)parser;
-  *val = Offset<void>(atoi(s));
-  return NoError();
-}
-
-std::string Namespace::GetFullyQualifiedName(const std::string &name,
-                                             size_t max_components) const {
-  // Early exit if we don't have a defined namespace.
-  if (components.size() == 0 || !max_components) {
-    return name;
-  }
-  std::stringstream stream;
-  for (size_t i = 0; i < std::min(components.size(), max_components);
-       i++) {
-    if (i) {
-      stream << ".";
-    }
-    stream << components[i];
-  }
-  if (name.length()) stream << "." << name;
-  return stream.str();
-}
-
-
-
-// Declare tokens we'll use. Single character tokens are represented by their
-// ascii character code (e.g. '{'), others above 256.
-#define FLATBUFFERS_GEN_TOKENS(TD) \
-  TD(Eof, 256, "end of file") \
-  TD(StringConstant, 257, "string constant") \
-  TD(IntegerConstant, 258, "integer constant") \
-  TD(FloatConstant, 259, "float constant") \
-  TD(Identifier, 260, "identifier") \
-  TD(Table, 261, "table") \
-  TD(Struct, 262, "struct") \
-  TD(Enum, 263, "enum") \
-  TD(Union, 264, "union") \
-  TD(NameSpace, 265, "namespace") \
-  TD(RootType, 266, "root_type") \
-  TD(FileIdentifier, 267, "file_identifier") \
-  TD(FileExtension, 268, "file_extension") \
-  TD(Include, 269, "include") \
-  TD(Attribute, 270, "attribute") \
-  TD(Null, 271, "null") \
-  TD(Service, 272, "rpc_service") \
-  TD(NativeInclude, 273, "native_include")
-#ifdef __GNUC__
-__extension__  // Stop GCC complaining about trailing comma with -Wpendantic.
-#endif
-enum {
-  #define FLATBUFFERS_TOKEN(NAME, VALUE, STRING) kToken ## NAME = VALUE,
-    FLATBUFFERS_GEN_TOKENS(FLATBUFFERS_TOKEN)
-  #undef FLATBUFFERS_TOKEN
-  #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE) \
-      kToken ## ENUM,
-    FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-  #undef FLATBUFFERS_TD
-};
-
-static std::string TokenToString(int t) {
-  static const char *tokens[] = {
-    #define FLATBUFFERS_TOKEN(NAME, VALUE, STRING) STRING,
-      FLATBUFFERS_GEN_TOKENS(FLATBUFFERS_TOKEN)
-    #undef FLATBUFFERS_TOKEN
-    #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE) \
-      IDLTYPE,
-      FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-    #undef FLATBUFFERS_TD
-  };
-  if (t < 256) {  // A single ascii char token.
-    std::string s;
-    s.append(1, static_cast<char>(t));
-    return s;
-  } else {       // Other tokens.
-    return tokens[t - 256];
-  }
-}
-
-std::string Parser::TokenToStringId(int t) {
-  return TokenToString(t) + (t == kTokenIdentifier ? ": " + attribute_ : "");
-}
-
-// Parses exactly nibbles worth of hex digits into a number, or error.
-CheckedError Parser::ParseHexNum(int nibbles, uint64_t *val) {
-  for (int i = 0; i < nibbles; i++)
-    if (!isxdigit(static_cast<const unsigned char>(cursor_[i])))
-      return Error("escape code must be followed by " + NumToString(nibbles) +
-                   " hex digits");
-  std::string target(cursor_, cursor_ + nibbles);
-  *val = StringToUInt(target.c_str(), nullptr, 16);
-  cursor_ += nibbles;
-  return NoError();
-}
-
-CheckedError Parser::SkipByteOrderMark() {
-  if (static_cast<unsigned char>(*cursor_) != 0xef) return NoError();
-  cursor_++;
-  if (static_cast<unsigned char>(*cursor_) != 0xbb) return Error("invalid utf-8 byte order mark");
-  cursor_++;
-  if (static_cast<unsigned char>(*cursor_) != 0xbf) return Error("invalid utf-8 byte order mark");
-  cursor_++;
-  return NoError();
-}
-
-bool IsIdentifierStart(char c) {
-  return isalpha(static_cast<unsigned char>(c)) || c == '_';
-}
-
-CheckedError Parser::Next() {
-  doc_comment_.clear();
-  bool seen_newline = false;
-  attribute_.clear();
-  for (;;) {
-    char c = *cursor_++;
-    token_ = c;
-    switch (c) {
-      case '\0': cursor_--; token_ = kTokenEof; return NoError();
-      case ' ': case '\r': case '\t': break;
-      case '\n': line_++; seen_newline = true; break;
-      case '{': case '}': case '(': case ')': case '[': case ']':
-      case ',': case ':': case ';': case '=': return NoError();
-      case '.':
-        if(!isdigit(static_cast<const unsigned char>(*cursor_))) return NoError();
-        return Error("floating point constant can\'t start with \".\"");
-      case '\"':
-      case '\'': {
-        int unicode_high_surrogate = -1;
-
-        while (*cursor_ != c) {
-          if (*cursor_ < ' ' && *cursor_ >= 0)
-            return Error("illegal character in string constant");
-          if (*cursor_ == '\\') {
-            cursor_++;
-            if (unicode_high_surrogate != -1 &&
-                *cursor_ != 'u') {
-              return Error(
-                "illegal Unicode sequence (unpaired high surrogate)");
-            }
-            switch (*cursor_) {
-              case 'n':  attribute_ += '\n'; cursor_++; break;
-              case 't':  attribute_ += '\t'; cursor_++; break;
-              case 'r':  attribute_ += '\r'; cursor_++; break;
-              case 'b':  attribute_ += '\b'; cursor_++; break;
-              case 'f':  attribute_ += '\f'; cursor_++; break;
-              case '\"': attribute_ += '\"'; cursor_++; break;
-              case '\'': attribute_ += '\''; cursor_++; break;
-              case '\\': attribute_ += '\\'; cursor_++; break;
-              case '/':  attribute_ += '/';  cursor_++; break;
-              case 'x': {  // Not in the JSON standard
-                cursor_++;
-                uint64_t val;
-                ECHECK(ParseHexNum(2, &val));
-                attribute_ += static_cast<char>(val);
-                break;
-              }
-              case 'u': {
-                cursor_++;
-                uint64_t val;
-                ECHECK(ParseHexNum(4, &val));
-                if (val >= 0xD800 && val <= 0xDBFF) {
-                  if (unicode_high_surrogate != -1) {
-                    return Error(
-                      "illegal Unicode sequence (multiple high surrogates)");
-                  } else {
-                    unicode_high_surrogate = static_cast<int>(val);
-                  }
-                } else if (val >= 0xDC00 && val <= 0xDFFF) {
-                  if (unicode_high_surrogate == -1) {
-                    return Error(
-                      "illegal Unicode sequence (unpaired low surrogate)");
-                  } else {
-                    int code_point = 0x10000 +
-                      ((unicode_high_surrogate & 0x03FF) << 10) +
-                      (val & 0x03FF);
-                    ToUTF8(code_point, &attribute_);
-                    unicode_high_surrogate = -1;
-                  }
-                } else {
-                  if (unicode_high_surrogate != -1) {
-                    return Error(
-                      "illegal Unicode sequence (unpaired high surrogate)");
-                  }
-                  ToUTF8(static_cast<int>(val), &attribute_);
-                }
-                break;
-              }
-              default: return Error("unknown escape code in string constant");
-            }
-          } else { // printable chars + UTF-8 bytes
-            if (unicode_high_surrogate != -1) {
-              return Error(
-                "illegal Unicode sequence (unpaired high surrogate)");
-            }
-            attribute_ += *cursor_++;
-          }
-        }
-        if (unicode_high_surrogate != -1) {
-          return Error(
-            "illegal Unicode sequence (unpaired high surrogate)");
-        }
-        cursor_++;
-        if (!opts.allow_non_utf8 && !ValidateUTF8(attribute_)) {
-          return Error("illegal UTF-8 sequence");
-        }
-        token_ = kTokenStringConstant;
-        return NoError();
-      }
-      case '/':
-        if (*cursor_ == '/') {
-          const char *start = ++cursor_;
-          while (*cursor_ && *cursor_ != '\n' && *cursor_ != '\r') cursor_++;
-          if (*start == '/') {  // documentation comment
-            if (cursor_ != source_ && !seen_newline)
-              return Error(
-                    "a documentation comment should be on a line on its own");
-            doc_comment_.push_back(std::string(start + 1, cursor_));
-          }
-          break;
-        } else if (*cursor_ == '*') {
-          cursor_++;
-          // TODO: make nested.
-          while (*cursor_ != '*' || cursor_[1] != '/') {
-            if (*cursor_ == '\n') line_++;
-            if (!*cursor_) return Error("end of file in comment");
-            cursor_++;
-          }
-          cursor_ += 2;
-          break;
-        }
-        // fall thru
-      default:
-        if (IsIdentifierStart(c)) {
-          // Collect all chars of an identifier:
-          const char *start = cursor_ - 1;
-          while (isalnum(static_cast<unsigned char>(*cursor_)) ||
-                 *cursor_ == '_')
-            cursor_++;
-          attribute_.append(start, cursor_);
-          // First, see if it is a type keyword from the table of types:
-          #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, \
-            PTYPE) \
-            if (attribute_ == IDLTYPE) { \
-              token_ = kToken ## ENUM; \
-              return NoError(); \
-            }
-            FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-          #undef FLATBUFFERS_TD
-          // If it's a boolean constant keyword, turn those into integers,
-          // which simplifies our logic downstream.
-          if (attribute_ == "true" || attribute_ == "false") {
-            attribute_ = NumToString(attribute_ == "true");
-            token_ = kTokenIntegerConstant;
-            return NoError();
-          }
-          // Check for declaration keywords:
-          if (attribute_ == "table") {
-            token_ = kTokenTable;
-            return NoError();
-          }
-          if (attribute_ == "struct") {
-            token_ = kTokenStruct;
-            return NoError();
-          }
-          if (attribute_ == "enum") {
-            token_ = kTokenEnum;
-            return NoError();
-          }
-          if (attribute_ == "union") {
-            token_ = kTokenUnion;
-            return NoError();
-          }
-          if (attribute_ == "namespace") {
-            token_ = kTokenNameSpace;
-            return NoError();
-          }
-          if (attribute_ == "root_type") {
-            token_ = kTokenRootType;
-            return NoError();
-          }
-          if (attribute_ == "include") {
-            token_ = kTokenInclude;
-            return NoError();
-          }
-          if (attribute_ == "attribute") {
-            token_ = kTokenAttribute;
-            return NoError();
-          }
-          if (attribute_ == "file_identifier") {
-            token_ = kTokenFileIdentifier;
-            return NoError();
-          }
-          if (attribute_ == "file_extension") {
-            token_ = kTokenFileExtension;
-            return NoError();
-          }
-          if (attribute_ == "null") {
-            token_ = kTokenNull;
-            return NoError();
-          }
-          if (attribute_ == "rpc_service") {
-            token_ = kTokenService;
-            return NoError();
-          }
-          if (attribute_ == "native_include") {
-            token_ = kTokenNativeInclude;
-            return NoError();
-          }
-          // If not, it is a user-defined identifier:
-          token_ = kTokenIdentifier;
-          return NoError();
-        } else if (isdigit(static_cast<unsigned char>(c)) || c == '-') {
-          const char *start = cursor_ - 1;
-          if (c == '-' && *cursor_ == '0' &&
-              (cursor_[1] == 'x' || cursor_[1] == 'X')) {
-            ++start;
-            ++cursor_;
-            attribute_.append(&c, &c + 1);
-            c = '0';
-          }
-          if (c == '0' && (*cursor_ == 'x' || *cursor_ == 'X')) {
-              cursor_++;
-              while (isxdigit(static_cast<unsigned char>(*cursor_))) cursor_++;
-              attribute_.append(start + 2, cursor_);
-              attribute_ = NumToString(static_cast<int64_t>(
-                             StringToUInt(attribute_.c_str(), nullptr, 16)));
-              token_ = kTokenIntegerConstant;
-              return NoError();
-          }
-          while (isdigit(static_cast<unsigned char>(*cursor_))) cursor_++;
-          if (*cursor_ == '.' || *cursor_ == 'e' || *cursor_ == 'E') {
-            if (*cursor_ == '.') {
-              cursor_++;
-              while (isdigit(static_cast<unsigned char>(*cursor_))) cursor_++;
-            }
-            // See if this float has a scientific notation suffix. Both JSON
-            // and C++ (through strtod() we use) have the same format:
-            if (*cursor_ == 'e' || *cursor_ == 'E') {
-              cursor_++;
-              if (*cursor_ == '+' || *cursor_ == '-') cursor_++;
-              while (isdigit(static_cast<unsigned char>(*cursor_))) cursor_++;
-            }
-            token_ = kTokenFloatConstant;
-          } else {
-            token_ = kTokenIntegerConstant;
-          }
-          attribute_.append(start, cursor_);
-          return NoError();
-        }
-        std::string ch;
-        ch = c;
-        if (c < ' ' || c > '~') ch = "code: " + NumToString(c);
-        return Error("illegal character: " + ch);
-    }
-  }
-}
-
-// Check if a given token is next.
-bool Parser::Is(int t) {
-  return t == token_;
-}
-
-// Expect a given token to be next, consume it, or error if not present.
-CheckedError Parser::Expect(int t) {
-  if (t != token_) {
-    return Error("expecting: " + TokenToString(t) + " instead got: " +
-                 TokenToStringId(token_));
-  }
-  NEXT();
-  return NoError();
-}
-
-CheckedError Parser::ParseNamespacing(std::string *id, std::string *last) {
-  while (Is('.')) {
-    NEXT();
-    *id += ".";
-    *id += attribute_;
-    if (last) *last = attribute_;
-    EXPECT(kTokenIdentifier);
-  }
-  return NoError();
-}
-
-EnumDef *Parser::LookupEnum(const std::string &id) {
-  // Search thru parent namespaces.
-  for (int components = static_cast<int>(namespaces_.back()->components.size());
-       components >= 0; components--) {
-    auto ed = enums_.Lookup(
-                namespaces_.back()->GetFullyQualifiedName(id, components));
-    if (ed) return ed;
-  }
-  return nullptr;
-}
-
-CheckedError Parser::ParseTypeIdent(Type &type) {
-  std::string id = attribute_;
-  EXPECT(kTokenIdentifier);
-  ECHECK(ParseNamespacing(&id, nullptr));
-  auto enum_def = LookupEnum(id);
-  if (enum_def) {
-    type = enum_def->underlying_type;
-    if (enum_def->is_union) type.base_type = BASE_TYPE_UNION;
-  } else {
-    type.base_type = BASE_TYPE_STRUCT;
-    type.struct_def = LookupCreateStruct(id);
-  }
-  return NoError();
-}
-
-// Parse any IDL type.
-CheckedError Parser::ParseType(Type &type) {
-  if (token_ >= kTokenBOOL && token_ <= kTokenSTRING) {
-    type.base_type = static_cast<BaseType>(token_ - kTokenNONE);
-    NEXT();
-  } else {
-    if (token_ == kTokenIdentifier) {
-      ECHECK(ParseTypeIdent(type));
-    } else if (token_ == '[') {
-      NEXT();
-      Type subtype;
-      ECHECK(ParseType(subtype));
-      if (subtype.base_type == BASE_TYPE_VECTOR) {
-        // We could support this, but it will complicate things, and it's
-        // easier to work around with a struct around the inner vector.
-        return Error(
-              "nested vector types not supported (wrap in table first).");
-      }
-      type = Type(BASE_TYPE_VECTOR, subtype.struct_def, subtype.enum_def);
-      type.element = subtype.base_type;
-      EXPECT(']');
-    } else {
-      return Error("illegal type syntax");
-    }
-  }
-  return NoError();
-}
-
-CheckedError Parser::AddField(StructDef &struct_def, const std::string &name,
-                              const Type &type, FieldDef **dest) {
-  auto &field = *new FieldDef();
-  field.value.offset =
-    FieldIndexToOffset(static_cast<voffset_t>(struct_def.fields.vec.size()));
-  field.name = name;
-  field.file = struct_def.file;
-  field.value.type = type;
-  if (struct_def.fixed) {  // statically compute the field offset
-    auto size = InlineSize(type);
-    auto alignment = InlineAlignment(type);
-    // structs_ need to have a predictable format, so we need to align to
-    // the largest scalar
-    struct_def.minalign = std::max(struct_def.minalign, alignment);
-    struct_def.PadLastField(alignment);
-    field.value.offset = static_cast<voffset_t>(struct_def.bytesize);
-    struct_def.bytesize += size;
-  }
-  if (struct_def.fields.Add(name, &field))
-    return Error("field already exists: " + name);
-  *dest = &field;
-  return NoError();
-}
-
-CheckedError Parser::ParseField(StructDef &struct_def) {
-  std::string name = attribute_;
-  std::vector<std::string> dc = doc_comment_;
-  EXPECT(kTokenIdentifier);
-  EXPECT(':');
-  Type type;
-  ECHECK(ParseType(type));
-
-  if (struct_def.fixed && !IsScalar(type.base_type) && !IsStruct(type))
-    return Error("structs_ may contain only scalar or struct fields");
-
-  FieldDef *typefield = nullptr;
-  if (type.base_type == BASE_TYPE_UNION) {
-    // For union fields, add a second auto-generated field to hold the type,
-    // with a special suffix.
-    ECHECK(AddField(struct_def, name + UnionTypeFieldSuffix(),
-                    type.enum_def->underlying_type, &typefield));
-  } else if (type.base_type == BASE_TYPE_VECTOR &&
-             type.element == BASE_TYPE_UNION) {
-    // Only cpp supports the union vector feature so far.
-    if (opts.lang_to_generate != IDLOptions::kCpp) {
-      return Error("Vectors of unions are not yet supported in all "
-                   "the specified programming languages.");
-    }
-    // For vector of union fields, add a second auto-generated vector field to
-    // hold the types, with a special suffix.
-    Type union_vector(BASE_TYPE_VECTOR, nullptr, type.enum_def);
-    union_vector.element = BASE_TYPE_UTYPE;
-    ECHECK(AddField(struct_def, name + UnionTypeFieldSuffix(),
-                    union_vector, &typefield));
-  }
-
-  FieldDef *field;
-  ECHECK(AddField(struct_def, name, type, &field));
-
-  if (token_ == '=') {
-    NEXT();
-    if (!IsScalar(type.base_type))
-      return Error("default values currently only supported for scalars");
-    ECHECK(ParseSingleValue(field->value));
-  }
-  if (IsFloat(field->value.type.base_type)) {
-    if (!strpbrk(field->value.constant.c_str(), ".eE"))
-      field->value.constant += ".0";
-  }
-
-  if (type.enum_def &&
-      IsScalar(type.base_type) &&
-      !struct_def.fixed &&
-      !type.enum_def->attributes.Lookup("bit_flags") &&
-      !type.enum_def->ReverseLookup(static_cast<int>(
-                         StringToInt(field->value.constant.c_str()))))
-    return Error("enum " + type.enum_def->name +
-          " does not have a declaration for this field\'s default of " +
-          field->value.constant);
-
-  field->doc_comment = dc;
-  ECHECK(ParseMetaData(&field->attributes));
-  field->deprecated = field->attributes.Lookup("deprecated") != nullptr;
-  auto hash_name = field->attributes.Lookup("hash");
-  if (hash_name) {
-    switch (type.base_type) {
-      case BASE_TYPE_INT:
-      case BASE_TYPE_UINT: {
-        if (FindHashFunction32(hash_name->constant.c_str()) == nullptr)
-          return Error("Unknown hashing algorithm for 32 bit types: " +
-                hash_name->constant);
-        break;
-      }
-      case BASE_TYPE_LONG:
-      case BASE_TYPE_ULONG: {
-        if (FindHashFunction64(hash_name->constant.c_str()) == nullptr)
-          return Error("Unknown hashing algorithm for 64 bit types: " +
-                hash_name->constant);
-        break;
-      }
-      default:
-        return Error(
-              "only int, uint, long and ulong data types support hashing.");
-    }
-  }
-  auto cpp_type = field->attributes.Lookup("cpp_type");
-  if (cpp_type) {
-    if (!hash_name)
-      return Error("cpp_type can only be used with a hashed field");
-  }
-  if (field->deprecated && struct_def.fixed)
-    return Error("can't deprecate fields in a struct");
-  field->required = field->attributes.Lookup("required") != nullptr;
-  if (field->required && (struct_def.fixed ||
-                         IsScalar(field->value.type.base_type)))
-    return Error("only non-scalar fields in tables may be 'required'");
-  field->key = field->attributes.Lookup("key") != nullptr;
-  if (field->key) {
-    if (struct_def.has_key)
-      return Error("only one field may be set as 'key'");
-    struct_def.has_key = true;
-    if (!IsScalar(field->value.type.base_type)) {
-      field->required = true;
-      if (field->value.type.base_type != BASE_TYPE_STRING)
-        return Error("'key' field must be string or scalar type");
-    }
-  }
-
-  field->native_inline = field->attributes.Lookup("native_inline") != nullptr;
-  if (field->native_inline && !IsStruct(field->value.type))
-    return Error("native_inline can only be defined on structs'");
-
-  auto nested = field->attributes.Lookup("nested_flatbuffer");
-  if (nested) {
-    if (nested->type.base_type != BASE_TYPE_STRING)
-      return Error(
-            "nested_flatbuffer attribute must be a string (the root type)");
-    if (field->value.type.base_type != BASE_TYPE_VECTOR ||
-        field->value.type.element != BASE_TYPE_UCHAR)
-      return Error(
-            "nested_flatbuffer attribute may only apply to a vector of ubyte");
-    // This will cause an error if the root type of the nested flatbuffer
-    // wasn't defined elsewhere.
-    LookupCreateStruct(nested->constant);
-  }
-
-  if (typefield) {
-    // If this field is a union, and it has a manually assigned id,
-    // the automatically added type field should have an id as well (of N - 1).
-    auto attr = field->attributes.Lookup("id");
-    if (attr) {
-      auto id = atoi(attr->constant.c_str());
-      auto val = new Value();
-      val->type = attr->type;
-      val->constant = NumToString(id - 1);
-      typefield->attributes.Add("id", val);
-    }
-  }
-
-  EXPECT(';');
-  return NoError();
-}
-
-CheckedError Parser::ParseString(Value &val) {
-  auto s = attribute_;
-  EXPECT(kTokenStringConstant);
-  val.constant = NumToString(builder_.CreateString(s).o);
-  return NoError();
-}
-
-CheckedError Parser::ParseAnyValue(Value &val, FieldDef *field,
-                                   size_t parent_fieldn,
-                                   const StructDef *parent_struct_def) {
-  switch (val.type.base_type) {
-    case BASE_TYPE_UNION: {
-      assert(field);
-      std::string constant;
-      // Find corresponding type field we may have already parsed.
-      for (auto elem = field_stack_.rbegin();
-           elem != field_stack_.rbegin() + parent_fieldn; ++elem) {
-        auto &type = elem->second->value.type;
-        if (type.base_type == BASE_TYPE_UTYPE &&
-            type.enum_def == val.type.enum_def) {
-          constant = elem->first.constant;
-          break;
-        }
-      }
-      if (constant.empty()) {
-        // We haven't seen the type field yet. Sadly a lot of JSON writers
-        // output these in alphabetical order, meaning it comes after this
-        // value. So we scan past the value to find it, then come back here.
-        auto type_name = field->name + UnionTypeFieldSuffix();
-        assert(parent_struct_def);
-        auto type_field = parent_struct_def->fields.Lookup(type_name);
-        assert(type_field);  // Guaranteed by ParseField().
-        // Remember where we are in the source file, so we can come back here.
-        auto backup = *static_cast<ParserState *>(this);
-        ECHECK(SkipAnyJsonValue());  // The table.
-        EXPECT(',');
-        auto next_name = attribute_;
-        if (Is(kTokenStringConstant)) {
-          NEXT();
-        } else {
-          EXPECT(kTokenIdentifier);
-        }
-        if (next_name != type_name)
-          return Error("missing type field after this union value: " +
-                       type_name);
-        EXPECT(':');
-        Value type_val = type_field->value;
-        ECHECK(ParseAnyValue(type_val, type_field, 0, nullptr));
-        constant = type_val.constant;
-        // Got the information we needed, now rewind:
-        *static_cast<ParserState *>(this) = backup;
-      }
-      uint8_t enum_idx;
-      ECHECK(atot(constant.c_str(), *this, &enum_idx));
-      auto enum_val = val.type.enum_def->ReverseLookup(enum_idx);
-      if (!enum_val) return Error("illegal type id for: " + field->name);
-      if (enum_val->union_type.base_type == BASE_TYPE_STRUCT) {
-        ECHECK(ParseTable(*enum_val->union_type.struct_def, &val.constant,
-                          nullptr));
-        if (enum_val->union_type.struct_def->fixed) {
-          // All BASE_TYPE_UNION values are offsets, so turn this into one.
-          SerializeStruct(*enum_val->union_type.struct_def, val);
-          builder_.ClearOffsets();
-          val.constant = NumToString(builder_.GetSize());
-        }
-      } else if (enum_val->union_type.base_type == BASE_TYPE_STRING) {
-        ECHECK(ParseString(val));
-      } else {
-        assert(false);
-      }
-      break;
-    }
-    case BASE_TYPE_STRUCT:
-      ECHECK(ParseTable(*val.type.struct_def, &val.constant, nullptr));
-      break;
-    case BASE_TYPE_STRING: {
-      ECHECK(ParseString(val));
-      break;
-    }
-    case BASE_TYPE_VECTOR: {
-      EXPECT('[');
-      uoffset_t off;
-      ECHECK(ParseVector(val.type.VectorType(), &off));
-      val.constant = NumToString(off);
-      break;
-    }
-    case BASE_TYPE_INT:
-    case BASE_TYPE_UINT:
-    case BASE_TYPE_LONG:
-    case BASE_TYPE_ULONG: {
-      if (field && field->attributes.Lookup("hash") &&
-          (token_ == kTokenIdentifier || token_ == kTokenStringConstant)) {
-        ECHECK(ParseHash(val, field));
-      } else {
-        ECHECK(ParseSingleValue(val));
-      }
-      break;
-    }
-    default:
-      ECHECK(ParseSingleValue(val));
-      break;
-  }
-  return NoError();
-}
-
-void Parser::SerializeStruct(const StructDef &struct_def, const Value &val) {
-  assert(val.constant.length() == struct_def.bytesize);
-  builder_.Align(struct_def.minalign);
-  builder_.PushBytes(reinterpret_cast<const uint8_t *>(val.constant.c_str()),
-                     struct_def.bytesize);
-  builder_.AddStructOffset(val.offset, builder_.GetSize());
-}
-
-CheckedError Parser::ParseTable(const StructDef &struct_def, std::string *value,
-                                uoffset_t *ovalue) {
-  EXPECT('{');
-  size_t fieldn = 0;
-  for (;;) {
-    if ((!opts.strict_json || !fieldn) && Is('}')) { NEXT(); break; }
-    std::string name = attribute_;
-    if (Is(kTokenStringConstant)) {
-      NEXT();
-    } else {
-      EXPECT(opts.strict_json ? kTokenStringConstant : kTokenIdentifier);
-    }
-    auto field = struct_def.fields.Lookup(name);
-    if (!field) {
-      if (!opts.skip_unexpected_fields_in_json) {
-        return Error("unknown field: " + name);
-      } else {
-        EXPECT(':');
-        ECHECK(SkipAnyJsonValue());
-      }
-    } else {
-      EXPECT(':');
-      if (Is(kTokenNull)) {
-        NEXT(); // Ignore this field.
-      } else {
-        Value val = field->value;
-        ECHECK(ParseAnyValue(val, field, fieldn, &struct_def));
-        // Hardcoded insertion-sort with error-check.
-        // If fields are specified in order, then this loop exits immediately.
-        auto elem = field_stack_.rbegin();
-        for (; elem != field_stack_.rbegin() + fieldn; ++elem) {
-          auto existing_field = elem->second;
-          if (existing_field == field)
-            return Error("field set more than once: " + field->name);
-          if (existing_field->value.offset < field->value.offset) break;
-        }
-        // Note: elem points to before the insertion point, thus .base() points
-        // to the correct spot.
-        field_stack_.insert(elem.base(), std::make_pair(val, field));
-        fieldn++;
-      }
-    }
-    if (Is('}')) { NEXT(); break; }
-    EXPECT(',');
-  }
-
-  if (struct_def.fixed && fieldn != struct_def.fields.vec.size())
-    return Error("struct: wrong number of initializers: " + struct_def.name);
-
-  auto start = struct_def.fixed
-                 ? builder_.StartStruct(struct_def.minalign)
-                 : builder_.StartTable();
-
-  for (size_t size = struct_def.sortbysize ? sizeof(largest_scalar_t) : 1;
-       size;
-       size /= 2) {
-    // Go through elements in reverse, since we're building the data backwards.
-    for (auto it = field_stack_.rbegin();
-             it != field_stack_.rbegin() + fieldn; ++it) {
-      auto &field_value = it->first;
-      auto field = it->second;
-      if (!struct_def.sortbysize ||
-          size == SizeOf(field_value.type.base_type)) {
-        switch (field_value.type.base_type) {
-          #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, \
-            PTYPE) \
-            case BASE_TYPE_ ## ENUM: \
-              builder_.Pad(field->padding); \
-              if (struct_def.fixed) { \
-                CTYPE val; \
-                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
-                builder_.PushElement(val); \
-              } else { \
-                CTYPE val, valdef; \
-                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
-                ECHECK(atot(field->value.constant.c_str(), *this, &valdef)); \
-                builder_.AddElement(field_value.offset, val, valdef); \
-              } \
-              break;
-            FLATBUFFERS_GEN_TYPES_SCALAR(FLATBUFFERS_TD);
-          #undef FLATBUFFERS_TD
-          #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, \
-            PTYPE) \
-            case BASE_TYPE_ ## ENUM: \
-              builder_.Pad(field->padding); \
-              if (IsStruct(field->value.type)) { \
-                SerializeStruct(*field->value.type.struct_def, field_value); \
-              } else { \
-                CTYPE val; \
-                ECHECK(atot(field_value.constant.c_str(), *this, &val)); \
-                builder_.AddOffset(field_value.offset, val); \
-              } \
-              break;
-            FLATBUFFERS_GEN_TYPES_POINTER(FLATBUFFERS_TD);
-          #undef FLATBUFFERS_TD
-        }
-      }
-    }
-  }
-  for (size_t i = 0; i < fieldn; i++) field_stack_.pop_back();
-
-  if (struct_def.fixed) {
-    builder_.ClearOffsets();
-    builder_.EndStruct();
-    assert(value);
-    // Temporarily store this struct in the value string, since it is to
-    // be serialized in-place elsewhere.
-    value->assign(
-          reinterpret_cast<const char *>(builder_.GetCurrentBufferPointer()),
-          struct_def.bytesize);
-    builder_.PopBytes(struct_def.bytesize);
-    assert(!ovalue);
-  } else {
-    auto val = builder_.EndTable(start,
-                          static_cast<voffset_t>(struct_def.fields.vec.size()));
-    if (ovalue) *ovalue = val;
-    if (value) *value = NumToString(val);
-  }
-  return NoError();
-}
-
-CheckedError Parser::ParseVector(const Type &type, uoffset_t *ovalue) {
-  int count = 0;
-  for (;;) {
-    if ((!opts.strict_json || !count) && Is(']')) { NEXT(); break; }
-    Value val;
-    val.type = type;
-    ECHECK(ParseAnyValue(val, nullptr, 0, nullptr));
-    field_stack_.push_back(std::make_pair(val, nullptr));
-    count++;
-    if (Is(']')) { NEXT(); break; }
-    EXPECT(',');
-  }
-
-  builder_.StartVector(count * InlineSize(type) / InlineAlignment(type),
-                       InlineAlignment(type));
-  for (int i = 0; i < count; i++) {
-    // start at the back, since we're building the data backwards.
-    auto &val = field_stack_.back().first;
-    switch (val.type.base_type) {
-      #define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE) \
-        case BASE_TYPE_ ## ENUM: \
-          if (IsStruct(val.type)) SerializeStruct(*val.type.struct_def, val); \
-          else { \
-             CTYPE elem; \
-             ECHECK(atot(val.constant.c_str(), *this, &elem)); \
-             builder_.PushElement(elem); \
-          } \
-          break;
-        FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
-      #undef FLATBUFFERS_TD
-    }
-    field_stack_.pop_back();
-  }
-
-  builder_.ClearOffsets();
-  *ovalue = builder_.EndVector(count);
-  return NoError();
-}
-
-CheckedError Parser::ParseMetaData(SymbolTable<Value> *attributes) {
-  if (Is('(')) {
-    NEXT();
-    for (;;) {
-      auto name = attribute_;
-      EXPECT(kTokenIdentifier);
-      if (known_attributes_.find(name) == known_attributes_.end())
-        return Error("user define attributes must be declared before use: " +
-                     name);
-      auto e = new Value();
-      attributes->Add(name, e);
-      if (Is(':')) {
-        NEXT();
-        ECHECK(ParseSingleValue(*e));
-      }
-      if (Is(')')) { NEXT(); break; }
-      EXPECT(',');
-    }
-  }
-  return NoError();
-}
-
-CheckedError Parser::TryTypedValue(int dtoken, bool check, Value &e,
-                                   BaseType req, bool *destmatch) {
-  bool match = dtoken == token_;
-  if (match) {
-    *destmatch = true;
-    e.constant = attribute_;
-    if (!check) {
-      if (e.type.base_type == BASE_TYPE_NONE) {
-        e.type.base_type = req;
-      } else {
-        return Error(std::string("type mismatch: expecting: ") +
-                     kTypeNames[e.type.base_type] +
-                     ", found: " +
-                     kTypeNames[req]);
-      }
-    }
-    NEXT();
-  }
-  return NoError();
-}
-
-CheckedError Parser::ParseEnumFromString(Type &type, int64_t *result) {
-  *result = 0;
-  // Parse one or more enum identifiers, separated by spaces.
-  const char *next = attribute_.c_str();
-  do {
-    const char *divider = strchr(next, ' ');
-    std::string word;
-    if (divider) {
-      word = std::string(next, divider);
-      next = divider + strspn(divider, " ");
-    } else {
-      word = next;
-      next += word.length();
-    }
-    if (type.enum_def) {  // The field has an enum type
-      auto enum_val = type.enum_def->vals.Lookup(word);
-      if (!enum_val)
-        return Error("unknown enum value: " + word +
-              ", for enum: " + type.enum_def->name);
-      *result |= enum_val->value;
-    } else {  // No enum type, probably integral field.
-      if (!IsInteger(type.base_type))
-        return Error("not a valid value for this field: " + word);
-      // TODO: could check if its a valid number constant here.
-      const char *dot = strrchr(word.c_str(), '.');
-      if (!dot)
-        return Error("enum values need to be qualified by an enum type");
-      std::string enum_def_str(word.c_str(), dot);
-      std::string enum_val_str(dot + 1, word.c_str() + word.length());
-      auto enum_def = LookupEnum(enum_def_str);
-      if (!enum_def) return Error("unknown enum: " + enum_def_str);
-      auto enum_val = enum_def->vals.Lookup(enum_val_str);
-      if (!enum_val) return Error("unknown enum value: " + enum_val_str);
-      *result |= enum_val->value;
-    }
-  } while(*next);
-  return NoError();
-}
-
-
-CheckedError Parser::ParseHash(Value &e, FieldDef* field) {
-  assert(field);
-  Value *hash_name = field->attributes.Lookup("hash");
-  switch (e.type.base_type) {
-    case BASE_TYPE_INT: {
-      auto hash = FindHashFunction32(hash_name->constant.c_str());
-      int32_t hashed_value = static_cast<int32_t>(hash(attribute_.c_str()));
-      e.constant = NumToString(hashed_value);
-      break;
-    }
-    case BASE_TYPE_UINT: {
-      auto hash = FindHashFunction32(hash_name->constant.c_str());
-      uint32_t hashed_value = hash(attribute_.c_str());
-      e.constant = NumToString(hashed_value);
-      break;
-    }
-    case BASE_TYPE_LONG: {
-      auto hash = FindHashFunction64(hash_name->constant.c_str());
-      int64_t hashed_value = static_cast<int64_t>(hash(attribute_.c_str()));
-      e.constant = NumToString(hashed_value);
-      break;
-    }
-    case BASE_TYPE_ULONG: {
-      auto hash = FindHashFunction64(hash_name->constant.c_str());
-      uint64_t hashed_value = hash(attribute_.c_str());
-      e.constant = NumToString(hashed_value);
-      break;
-    }
-    default:
-      assert(0);
-  }
-  NEXT();
-  return NoError();
-}
-
-CheckedError Parser::ParseSingleValue(Value &e) {
-  // First see if this could be a conversion function:
-  if (token_ == kTokenIdentifier && *cursor_ == '(') {
-    auto functionname = attribute_;
-    NEXT();
-    EXPECT('(');
-    ECHECK(ParseSingleValue(e));
-    EXPECT(')');
-    #define FLATBUFFERS_FN_DOUBLE(name, op) \
-      if (functionname == name) { \
-        auto x = strtod(e.constant.c_str(), nullptr); \
-        e.constant = NumToString(op); \
-      }
-    FLATBUFFERS_FN_DOUBLE("deg", x / M_PI * 180);
-    FLATBUFFERS_FN_DOUBLE("rad", x * M_PI / 180);
-    FLATBUFFERS_FN_DOUBLE("sin", sin(x));
-    FLATBUFFERS_FN_DOUBLE("cos", cos(x));
-    FLATBUFFERS_FN_DOUBLE("tan", tan(x));
-    FLATBUFFERS_FN_DOUBLE("asin", asin(x));
-    FLATBUFFERS_FN_DOUBLE("acos", acos(x));
-    FLATBUFFERS_FN_DOUBLE("atan", atan(x));
-    // TODO(wvo): add more useful conversion functions here.
-    #undef FLATBUFFERS_FN_DOUBLE
-  // Then check if this could be a string/identifier enum value:
-  } else if (e.type.base_type != BASE_TYPE_STRING &&
-      e.type.base_type != BASE_TYPE_NONE &&
-      (token_ == kTokenIdentifier || token_ == kTokenStringConstant)) {
-    if (IsIdentifierStart(attribute_[0])) {  // Enum value.
-      int64_t val;
-      ECHECK(ParseEnumFromString(e.type, &val));
-      e.constant = NumToString(val);
-      NEXT();
-    } else {  // Numeric constant in string.
-      if (IsInteger(e.type.base_type)) {
-        char *end;
-        e.constant = NumToString(StringToInt(attribute_.c_str(), &end));
-        if (*end)
-          return Error("invalid integer: " + attribute_);
-      } else if (IsFloat(e.type.base_type)) {
-        char *end;
-        e.constant = NumToString(strtod(attribute_.c_str(), &end));
-        if (*end)
-          return Error("invalid float: " + attribute_);
-      } else {
-        assert(0);  // Shouldn't happen, we covered all types.
-        e.constant = "0";
-      }
-      NEXT();
-    }
-  } else {
-    bool match = false;
-    ECHECK(TryTypedValue(kTokenIntegerConstant,
-                         IsScalar(e.type.base_type),
-                         e,
-                         BASE_TYPE_INT,
-                         &match));
-    ECHECK(TryTypedValue(kTokenFloatConstant,
-                         IsFloat(e.type.base_type),
-                         e,
-                         BASE_TYPE_FLOAT,
-                         &match));
-    ECHECK(TryTypedValue(kTokenStringConstant,
-                         e.type.base_type == BASE_TYPE_STRING,
-                         e,
-                         BASE_TYPE_STRING,
-                         &match));
-    if (!match)
-      return Error("cannot parse value starting with: " +
-                   TokenToStringId(token_));
-  }
-  return NoError();
-}
-
-StructDef *Parser::LookupCreateStruct(const std::string &name,
-                                      bool create_if_new, bool definition) {
-  std::string qualified_name = namespaces_.back()->GetFullyQualifiedName(name);
-  // See if it exists pre-declared by an unqualified use.
-  auto struct_def = structs_.Lookup(name);
-  if (struct_def && struct_def->predecl) {
-    if (definition) {
-      // Make sure it has the current namespace, and is registered under its
-      // qualified name.
-      struct_def->defined_namespace = namespaces_.back();
-      structs_.Move(name, qualified_name);
-    }
-    return struct_def;
-  }
-  // See if it exists pre-declared by an qualified use.
-  struct_def = structs_.Lookup(qualified_name);
-  if (struct_def && struct_def->predecl) {
-    if (definition) {
-      // Make sure it has the current namespace.
-      struct_def->defined_namespace = namespaces_.back();
-    }
-    return struct_def;
-  }
-  if (!definition) {
-    // Search thru parent namespaces.
-    for (size_t components = namespaces_.back()->components.size();
-         components && !struct_def; components--) {
-      struct_def = structs_.Lookup(
-          namespaces_.back()->GetFullyQualifiedName(name, components - 1));
-    }
-  }
-  if (!struct_def && create_if_new) {
-    struct_def = new StructDef();
-    if (definition) {
-      structs_.Add(qualified_name, struct_def);
-      struct_def->name = name;
-      struct_def->defined_namespace = namespaces_.back();
-    } else {
-      // Not a definition.
-      // Rather than failing, we create a "pre declared" StructDef, due to
-      // circular references, and check for errors at the end of parsing.
-      // It is defined in the root namespace, since we don't know what the
-      // final namespace will be.
-      // TODO: maybe safer to use special namespace?
-      structs_.Add(name, struct_def);
-      struct_def->name = name;
-      struct_def->defined_namespace = new Namespace();
-      namespaces_.insert(namespaces_.begin(), struct_def->defined_namespace);
-    }
-  }
-  return struct_def;
-}
-
-CheckedError Parser::ParseEnum(bool is_union, EnumDef **dest) {
-  std::vector<std::string> enum_comment = doc_comment_;
-  NEXT();
-  std::string enum_name = attribute_;
-  EXPECT(kTokenIdentifier);
-  auto &enum_def = *new EnumDef();
-  enum_def.name = enum_name;
-  enum_def.file = file_being_parsed_;
-  enum_def.doc_comment = enum_comment;
-  enum_def.is_union = is_union;
-  enum_def.defined_namespace = namespaces_.back();
-  if (enums_.Add(namespaces_.back()->GetFullyQualifiedName(enum_name),
-                 &enum_def))
-    return Error("enum already exists: " + enum_name);
-  if (is_union) {
-    enum_def.underlying_type.base_type = BASE_TYPE_UTYPE;
-    enum_def.underlying_type.enum_def = &enum_def;
-  } else {
-    if (opts.proto_mode) {
-      enum_def.underlying_type.base_type = BASE_TYPE_INT;
-    } else {
-      // Give specialized error message, since this type spec used to
-      // be optional in the first FlatBuffers release.
-      if (!Is(':')) {
-        return Error("must specify the underlying integer type for this"
-              " enum (e.g. \': short\', which was the default).");
-      } else {
-        NEXT();
-      }
-      // Specify the integer type underlying this enum.
-      ECHECK(ParseType(enum_def.underlying_type));
-      if (!IsInteger(enum_def.underlying_type.base_type))
-        return Error("underlying enum type must be integral");
-    }
-    // Make this type refer back to the enum it was derived from.
-    enum_def.underlying_type.enum_def = &enum_def;
-  }
-  ECHECK(ParseMetaData(&enum_def.attributes));
-  EXPECT('{');
-  if (is_union) enum_def.vals.Add("NONE", new EnumVal("NONE", 0));
-  for (;;) {
-    if (opts.proto_mode && attribute_ == "option") {
-      ECHECK(ParseProtoOption());
-    } else {
-      auto value_name = attribute_;
-      auto full_name = value_name;
-      std::vector<std::string> value_comment = doc_comment_;
-      EXPECT(kTokenIdentifier);
-      if (is_union) {
-        ECHECK(ParseNamespacing(&full_name, &value_name));
-        if (opts.union_value_namespacing) {
-          // Since we can't namespace the actual enum identifiers, turn
-          // namespace parts into part of the identifier.
-          value_name = full_name;
-          std::replace(value_name.begin(), value_name.end(), '.', '_');
-        }
-      }
-      auto prevsize = enum_def.vals.vec.size();
-      auto value = enum_def.vals.vec.size()
-        ? enum_def.vals.vec.back()->value + 1
-        : 0;
-      auto &ev = *new EnumVal(value_name, value);
-      if (enum_def.vals.Add(value_name, &ev))
-        return Error("enum value already exists: " + value_name);
-      ev.doc_comment = value_comment;
-      if (is_union) {
-        if (Is(':')) {
-          NEXT();
-          ECHECK(ParseType(ev.union_type));
-          if (ev.union_type.base_type != BASE_TYPE_STRUCT &&
-              ev.union_type.base_type != BASE_TYPE_STRING)
-            return Error("union value type may only be table/struct/string");
-          enum_def.uses_type_aliases = true;
-        } else {
-          ev.union_type = Type(BASE_TYPE_STRUCT, LookupCreateStruct(full_name));
-        }
-      }
-      if (Is('=')) {
-        NEXT();
-        ev.value = StringToInt(attribute_.c_str());
-        EXPECT(kTokenIntegerConstant);
-        if (!opts.proto_mode && prevsize &&
-            enum_def.vals.vec[prevsize - 1]->value >= ev.value)
-          return Error("enum values must be specified in ascending order");
-      }
-      if (opts.proto_mode && Is('[')) {
-        NEXT();
-        // ignore attributes on enums.
-        while (token_ != ']') NEXT();
-        NEXT();
-      }
-    }
-    if (!Is(opts.proto_mode ? ';' : ',')) break;
-    NEXT();
-    if (Is('}')) break;
-  }
-  EXPECT('}');
-  if (enum_def.attributes.Lookup("bit_flags")) {
-    for (auto it = enum_def.vals.vec.begin(); it != enum_def.vals.vec.end();
-         ++it) {
-      if (static_cast<size_t>((*it)->value) >=
-           SizeOf(enum_def.underlying_type.base_type) * 8)
-        return Error("bit flag out of range of underlying integral type");
-      (*it)->value = 1LL << (*it)->value;
-    }
-  }
-  if (dest) *dest = &enum_def;
-  types_.Add(namespaces_.back()->GetFullyQualifiedName(enum_def.name),
-             new Type(BASE_TYPE_UNION, nullptr, &enum_def));
-  return NoError();
-}
-
-CheckedError Parser::StartStruct(const std::string &name, StructDef **dest) {
-  auto &struct_def = *LookupCreateStruct(name, true, true);
-  if (!struct_def.predecl) return Error("datatype already exists: " + name);
-  struct_def.predecl = false;
-  struct_def.name = name;
-  struct_def.file = file_being_parsed_;
-  // Move this struct to the back of the vector just in case it was predeclared,
-  // to preserve declaration order.
-  *std::remove(structs_.vec.begin(), structs_.vec.end(), &struct_def) = &struct_def;
-  *dest = &struct_def;
-  return NoError();
-}
-
-CheckedError Parser::CheckClash(std::vector<FieldDef*> &fields,
-                                StructDef *struct_def,
-                                const char *suffix,
-                                BaseType basetype) {
-  auto len = strlen(suffix);
-  for (auto it = fields.begin(); it != fields.end(); ++it) {
-    auto &fname = (*it)->name;
-    if (fname.length() > len &&
-        fname.compare(fname.length() - len, len, suffix) == 0 &&
-        (*it)->value.type.base_type != BASE_TYPE_UTYPE) {
-      auto field = struct_def->fields.Lookup(
-                                             fname.substr(0, fname.length() - len));
-      if (field && field->value.type.base_type == basetype)
-        return Error("Field " + fname +
-                     " would clash with generated functions for field " +
-                     field->name);
-    }
-  }
-  return NoError();
-}
-
-static bool compareFieldDefs(const FieldDef *a, const FieldDef *b) {
-  auto a_id = atoi(a->attributes.Lookup("id")->constant.c_str());
-  auto b_id = atoi(b->attributes.Lookup("id")->constant.c_str());
-  return a_id < b_id;
-}
-
-CheckedError Parser::ParseDecl() {
-  std::vector<std::string> dc = doc_comment_;
-  bool fixed = Is(kTokenStruct);
-  if (fixed) NEXT() else EXPECT(kTokenTable);
-  std::string name = attribute_;
-  EXPECT(kTokenIdentifier);
-  StructDef *struct_def;
-  ECHECK(StartStruct(name, &struct_def));
-  struct_def->doc_comment = dc;
-  struct_def->fixed = fixed;
-  ECHECK(ParseMetaData(&struct_def->attributes));
-  struct_def->sortbysize =
-    struct_def->attributes.Lookup("original_order") == nullptr && !fixed;
-  EXPECT('{');
-  while (token_ != '}') ECHECK(ParseField(*struct_def));
-  auto force_align = struct_def->attributes.Lookup("force_align");
-  if (fixed && force_align) {
-    auto align = static_cast<size_t>(atoi(force_align->constant.c_str()));
-    if (force_align->type.base_type != BASE_TYPE_INT ||
-        align < struct_def->minalign ||
-        align > FLATBUFFERS_MAX_ALIGNMENT ||
-        align & (align - 1))
-      return Error("force_align must be a power of two integer ranging from the"
-                   "struct\'s natural alignment to " +
-                   NumToString(FLATBUFFERS_MAX_ALIGNMENT));
-    struct_def->minalign = align;
-  }
-  struct_def->PadLastField(struct_def->minalign);
-  // Check if this is a table that has manual id assignments
-  auto &fields = struct_def->fields.vec;
-  if (!struct_def->fixed && fields.size()) {
-    size_t num_id_fields = 0;
-    for (auto it = fields.begin(); it != fields.end(); ++it) {
-      if ((*it)->attributes.Lookup("id")) num_id_fields++;
-    }
-    // If any fields have ids..
-    if (num_id_fields) {
-      // Then all fields must have them.
-      if (num_id_fields != fields.size())
-        return Error(
-              "either all fields or no fields must have an 'id' attribute");
-      // Simply sort by id, then the fields are the same as if no ids had
-      // been specified.
-      std::sort(fields.begin(), fields.end(), compareFieldDefs);
-      // Verify we have a contiguous set, and reassign vtable offsets.
-      for (int i = 0; i < static_cast<int>(fields.size()); i++) {
-        if (i != atoi(fields[i]->attributes.Lookup("id")->constant.c_str()))
-          return Error("field id\'s must be consecutive from 0, id " +
-                NumToString(i) + " missing or set twice");
-        fields[i]->value.offset = FieldIndexToOffset(static_cast<voffset_t>(i));
-      }
-    }
-  }
-
-  ECHECK(CheckClash(fields, struct_def, UnionTypeFieldSuffix(),
-                    BASE_TYPE_UNION));
-  ECHECK(CheckClash(fields, struct_def, "Type", BASE_TYPE_UNION));
-  ECHECK(CheckClash(fields, struct_def, "_length", BASE_TYPE_VECTOR));
-  ECHECK(CheckClash(fields, struct_def, "Length", BASE_TYPE_VECTOR));
-  ECHECK(CheckClash(fields, struct_def, "_byte_vector", BASE_TYPE_STRING));
-  ECHECK(CheckClash(fields, struct_def, "ByteVector", BASE_TYPE_STRING));
-  EXPECT('}');
-  types_.Add(namespaces_.back()->GetFullyQualifiedName(struct_def->name),
-             new Type(BASE_TYPE_STRUCT, struct_def, nullptr));
-  return NoError();
-}
-
-CheckedError Parser::ParseService() {
-  std::vector<std::string> service_comment = doc_comment_;
-  NEXT();
-  auto service_name = attribute_;
-  EXPECT(kTokenIdentifier);
-  auto &service_def = *new ServiceDef();
-  service_def.name = service_name;
-  service_def.file = file_being_parsed_;
-  service_def.doc_comment = service_comment;
-  service_def.defined_namespace = namespaces_.back();
-  if (services_.Add(namespaces_.back()->GetFullyQualifiedName(service_name),
-                    &service_def))
-    return Error("service already exists: " + service_name);
-  ECHECK(ParseMetaData(&service_def.attributes));
-  EXPECT('{');
-  do {
-    auto rpc_name = attribute_;
-    EXPECT(kTokenIdentifier);
-    EXPECT('(');
-    Type reqtype, resptype;
-    ECHECK(ParseTypeIdent(reqtype));
-    EXPECT(')');
-    EXPECT(':');
-    ECHECK(ParseTypeIdent(resptype));
-    if (reqtype.base_type != BASE_TYPE_STRUCT || reqtype.struct_def->fixed ||
-        resptype.base_type != BASE_TYPE_STRUCT || resptype.struct_def->fixed)
-        return Error("rpc request and response types must be tables");
-    auto &rpc = *new RPCCall();
-    rpc.name = rpc_name;
-    rpc.request = reqtype.struct_def;
-    rpc.response = resptype.struct_def;
-    if (service_def.calls.Add(rpc_name, &rpc))
-      return Error("rpc already exists: " + rpc_name);
-    ECHECK(ParseMetaData(&rpc.attributes));
-    EXPECT(';');
-  } while (token_ != '}');
-  NEXT();
-  return NoError();
-}
-
-bool Parser::SetRootType(const char *name) {
-  root_struct_def_ = structs_.Lookup(name);
-  if (!root_struct_def_)
-    root_struct_def_ = structs_.Lookup(
-                         namespaces_.back()->GetFullyQualifiedName(name));
-  return root_struct_def_ != nullptr;
-}
-
-void Parser::MarkGenerated() {
-  // This function marks all existing definitions as having already
-  // been generated, which signals no code for included files should be
-  // generated.
-  for (auto it = enums_.vec.begin();
-           it != enums_.vec.end(); ++it) {
-    (*it)->generated = true;
-  }
-  for (auto it = structs_.vec.begin();
-           it != structs_.vec.end(); ++it) {
-    (*it)->generated = true;
-  }
-  for (auto it = services_.vec.begin();
-           it != services_.vec.end(); ++it) {
-    (*it)->generated = true;
-  }
-}
-
-CheckedError Parser::ParseNamespace() {
-  NEXT();
-  auto ns = new Namespace();
-  namespaces_.push_back(ns);
-  if (token_ != ';') {
-    for (;;) {
-      ns->components.push_back(attribute_);
-      EXPECT(kTokenIdentifier);
-      if (Is('.')) NEXT() else break;
-    }
-  }
-  EXPECT(';');
-  return NoError();
-}
-
-static bool compareEnumVals(const EnumVal *a, const EnumVal* b) {
-  return a->value < b->value;
-}
-
-// Best effort parsing of .proto declarations, with the aim to turn them
-// in the closest corresponding FlatBuffer equivalent.
-// We parse everything as identifiers instead of keywords, since we don't
-// want protobuf keywords to become invalid identifiers in FlatBuffers.
-CheckedError Parser::ParseProtoDecl() {
-  bool isextend = attribute_ == "extend";
-  if (attribute_ == "package") {
-    // These are identical in syntax to FlatBuffer's namespace decl.
-    ECHECK(ParseNamespace());
-  } else if (attribute_ == "message" || isextend) {
-    std::vector<std::string> struct_comment = doc_comment_;
-    NEXT();
-    StructDef *struct_def = nullptr;
-    if (isextend) {
-      if (Is('.')) NEXT();  // qualified names may start with a . ?
-      auto id = attribute_;
-      EXPECT(kTokenIdentifier);
-      ECHECK(ParseNamespacing(&id, nullptr));
-      struct_def = LookupCreateStruct(id, false);
-      if (!struct_def)
-        return Error("cannot extend unknown message type: " + id);
-    } else {
-      std::string name = attribute_;
-      EXPECT(kTokenIdentifier);
-      ECHECK(StartStruct(name, &struct_def));
-      // Since message definitions can be nested, we create a new namespace.
-      auto ns = new Namespace();
-      // Copy of current namespace.
-      *ns = *namespaces_.back();
-      // But with current message name.
-      ns->components.push_back(name);
-      namespaces_.push_back(ns);
-    }
-    struct_def->doc_comment = struct_comment;
-    ECHECK(ParseProtoFields(struct_def, isextend, false));
-    if (!isextend) {
-      // We have to remove the nested namespace, but we can't just throw it
-      // away, so put it at the beginning of the vector.
-      auto ns = namespaces_.back();
-      namespaces_.pop_back();
-      namespaces_.insert(namespaces_.begin(), ns);
-    }
-    if (Is(';')) NEXT();
-  } else if (attribute_ == "enum") {
-    // These are almost the same, just with different terminator:
-    EnumDef *enum_def;
-    ECHECK(ParseEnum(false, &enum_def));
-    if (Is(';')) NEXT();
-    // Protobuf allows them to be specified in any order, so sort afterwards.
-    auto &v = enum_def->vals.vec;
-    std::sort(v.begin(), v.end(), compareEnumVals);
-
-    // Temp: remove any duplicates, as .fbs files can't handle them.
-    for (auto it = v.begin(); it != v.end(); ) {
-      if (it != v.begin() && it[0]->value == it[-1]->value) it = v.erase(it);
-      else ++it;
-    }
-  } else if (attribute_ == "syntax") {  // Skip these.
-    NEXT();
-    EXPECT('=');
-    EXPECT(kTokenStringConstant);
-    EXPECT(';');
-  } else if (attribute_ == "option") {  // Skip these.
-    ECHECK(ParseProtoOption());
-    EXPECT(';');
-  } else if (attribute_ == "service") {  // Skip these.
-    NEXT();
-    EXPECT(kTokenIdentifier);
-    ECHECK(ParseProtoCurliesOrIdent());
-  } else {
-    return Error("don\'t know how to parse .proto declaration starting with " +
-          TokenToStringId(token_));
-  }
-  return NoError();
-}
-
-CheckedError Parser::ParseProtoFields(StructDef *struct_def, bool isextend,
-                                      bool inside_oneof) {
-  EXPECT('{');
-  while (token_ != '}') {
-    if (attribute_ == "message" || attribute_ == "extend" ||
-        attribute_ == "enum") {
-      // Nested declarations.
-      ECHECK(ParseProtoDecl());
-    } else if (attribute_ == "extensions") {  // Skip these.
-      NEXT();
-      EXPECT(kTokenIntegerConstant);
-      if (Is(kTokenIdentifier)) {
-        NEXT();  // to
-        NEXT();  // num
-      }
-      EXPECT(';');
-    } else if (attribute_ == "option") {  // Skip these.
-      ECHECK(ParseProtoOption());
-      EXPECT(';');
-    } else if (attribute_ == "reserved") {  // Skip these.
-      NEXT();
-      EXPECT(kTokenIntegerConstant);
-      while (Is(',')) { NEXT(); EXPECT(kTokenIntegerConstant); }
-      EXPECT(';');
-    } else {
-      std::vector<std::string> field_comment = doc_comment_;
-      // Parse the qualifier.
-      bool required = false;
-      bool repeated = false;
-      bool oneof = false;
-      if (!inside_oneof) {
-        if (attribute_ == "optional") {
-          // This is the default.
-          EXPECT(kTokenIdentifier);
-        } else if (attribute_ == "required") {
-          required = true;
-          EXPECT(kTokenIdentifier);
-        } else if (attribute_ == "repeated") {
-          repeated = true;
-          EXPECT(kTokenIdentifier);
-        } else if (attribute_ == "oneof") {
-          oneof = true;
-          EXPECT(kTokenIdentifier);
-        } else {
-          // can't error, proto3 allows decls without any of the above.
-        }
-      }
-      StructDef *anonymous_struct = nullptr;
-      Type type;
-      if (attribute_ == "group" || oneof) {
-        if (!oneof) EXPECT(kTokenIdentifier);
-        auto name = "Anonymous" + NumToString(anonymous_counter++);
-        ECHECK(StartStruct(name, &anonymous_struct));
-        type = Type(BASE_TYPE_STRUCT, anonymous_struct);
-      } else {
-        ECHECK(ParseTypeFromProtoType(&type));
-      }
-      // Repeated elements get mapped to a vector.
-      if (repeated) {
-        type.element = type.base_type;
-        type.base_type = BASE_TYPE_VECTOR;
-      }
-      std::string name = attribute_;
-      // Protos may use our keywords "attribute" & "namespace" as an identifier.
-      if (Is(kTokenAttribute) || Is(kTokenNameSpace)) {
-        NEXT();
-        // TODO: simpler to just not make these keywords?
-        name += "_";  // Have to make it not a keyword.
-      } else {
-        EXPECT(kTokenIdentifier);
-      }
-      if (!oneof) {
-        // Parse the field id. Since we're just translating schemas, not
-        // any kind of binary compatibility, we can safely ignore these, and
-        // assign our own.
-        EXPECT('=');
-        EXPECT(kTokenIntegerConstant);
-      }
-      FieldDef *field = nullptr;
-      if (isextend) {
-        // We allow a field to be re-defined when extending.
-        // TODO: are there situations where that is problematic?
-        field = struct_def->fields.Lookup(name);
-      }
-      if (!field) ECHECK(AddField(*struct_def, name, type, &field));
-      field->doc_comment = field_comment;
-      if (!IsScalar(type.base_type)) field->required = required;
-      // See if there's a default specified.
-      if (Is('[')) {
-        NEXT();
-        for (;;) {
-          auto key = attribute_;
-          ECHECK(ParseProtoKey());
-          EXPECT('=');
-          auto val = attribute_;
-          ECHECK(ParseProtoCurliesOrIdent());
-          if (key == "default") {
-            // Temp: skip non-numeric defaults (enums).
-            auto numeric = strpbrk(val.c_str(), "0123456789-+.");
-            if (IsScalar(type.base_type) && numeric == val.c_str())
-              field->value.constant = val;
-          } else if (key == "deprecated") {
-            field->deprecated = val == "true";
-          }
-          if (!Is(',')) break;
-          NEXT();
-        }
-        EXPECT(']');
-      }
-      if (anonymous_struct) {
-        ECHECK(ParseProtoFields(anonymous_struct, false, oneof));
-        if (Is(';')) NEXT();
-      } else {
-        EXPECT(';');
-      }
-    }
-  }
-  NEXT();
-  return NoError();
-}
-
-CheckedError Parser::ParseProtoKey() {
-  if (token_ == '(') {
-    NEXT();
-    // Skip "(a.b)" style custom attributes.
-    while (token_ == '.' || token_ == kTokenIdentifier) NEXT();
-    EXPECT(')');
-    while (Is('.')) { NEXT(); EXPECT(kTokenIdentifier); }
-  } else {
-    EXPECT(kTokenIdentifier);
-  }
-  return NoError();
-}
-
-CheckedError Parser::ParseProtoCurliesOrIdent() {
-  if (Is('{')) {
-    NEXT();
-    for (int nesting = 1; nesting; ) {
-      if (token_ == '{') nesting++;
-      else if (token_ == '}') nesting--;
-      NEXT();
-    }
-  } else {
-    NEXT();  // Any single token.
-  }
-  return NoError();
-}
-
-CheckedError Parser::ParseProtoOption() {
-  NEXT();
-  ECHECK(ParseProtoKey());
-  EXPECT('=');
-  ECHECK(ParseProtoCurliesOrIdent());
-  return NoError();
-}
-
-// Parse a protobuf type, and map it to the corresponding FlatBuffer one.
-CheckedError Parser::ParseTypeFromProtoType(Type *type) {
-  struct type_lookup { const char *proto_type; BaseType fb_type; };
-  static type_lookup lookup[] = {
-    { "float", BASE_TYPE_FLOAT },  { "double", BASE_TYPE_DOUBLE },
-    { "int32", BASE_TYPE_INT },    { "int64", BASE_TYPE_LONG },
-    { "uint32", BASE_TYPE_UINT },  { "uint64", BASE_TYPE_ULONG },
-    { "sint32", BASE_TYPE_INT },   { "sint64", BASE_TYPE_LONG },
-    { "fixed32", BASE_TYPE_UINT }, { "fixed64", BASE_TYPE_ULONG },
-    { "sfixed32", BASE_TYPE_INT }, { "sfixed64", BASE_TYPE_LONG },
-    { "bool", BASE_TYPE_BOOL },
-    { "string", BASE_TYPE_STRING },
-    { "bytes", BASE_TYPE_STRING },
-    { nullptr, BASE_TYPE_NONE }
-  };
-  for (auto tl = lookup; tl->proto_type; tl++) {
-    if (attribute_ == tl->proto_type) {
-      type->base_type = tl->fb_type;
-      NEXT();
-      return NoError();
-    }
-  }
-  if (Is('.')) NEXT();  // qualified names may start with a . ?
-  ECHECK(ParseTypeIdent(*type));
-  return NoError();
-}
-
-CheckedError Parser::SkipAnyJsonValue() {
-  switch (token_) {
-    case '{':
-      ECHECK(SkipJsonObject());
-      break;
-    case kTokenStringConstant:
-      ECHECK(SkipJsonString());
-      break;
-    case '[':
-      ECHECK(SkipJsonArray());
-      break;
-    case kTokenIntegerConstant:
-      EXPECT(kTokenIntegerConstant);
-      break;
-    case kTokenFloatConstant:
-      EXPECT(kTokenFloatConstant);
-      break;
-    default:
-      return Error(std::string("Unexpected token:") + std::string(1, static_cast<char>(token_)));
-  }
-  return NoError();
-}
-
-CheckedError Parser::SkipJsonObject() {
-  EXPECT('{');
-  size_t fieldn = 0;
-
-  for (;;) {
-    if ((!opts.strict_json || !fieldn) && Is('}')) break;
-
-    if (!Is(kTokenStringConstant)) {
-      EXPECT(opts.strict_json ? kTokenStringConstant : kTokenIdentifier);
-    }
-    else {
-      NEXT();
-    }
-
-    EXPECT(':');
-    ECHECK(SkipAnyJsonValue());
-    fieldn++;
-
-    if (Is('}')) break;
-    EXPECT(',');
-  }
-
-  NEXT();
-  return NoError();
-}
-
-CheckedError Parser::SkipJsonArray() {
-  EXPECT('[');
-
-  for (;;) {
-    if (Is(']')) break;
-
-    ECHECK(SkipAnyJsonValue());
-
-    if (Is(']')) break;
-    EXPECT(',');
-  }
-
-  NEXT();
-  return NoError();
-}
-
-CheckedError Parser::SkipJsonString() {
-  EXPECT(kTokenStringConstant);
-  return NoError();
-}
-
-bool Parser::Parse(const char *source, const char **include_paths,
-                   const char *source_filename) {
-  return !DoParse(source, include_paths, source_filename).Check();
-}
-
-CheckedError Parser::DoParse(const char *source, const char **include_paths,
-                             const char *source_filename) {
-  file_being_parsed_ = source_filename ? source_filename : "";
-  if (source_filename &&
-      included_files_.find(source_filename) == included_files_.end()) {
-    included_files_[source_filename] = true;
-    files_included_per_file_[source_filename] = std::set<std::string>();
-  }
-  if (!include_paths) {
-    static const char *current_directory[] = { "", nullptr };
-    include_paths = current_directory;
-  }
-  source_ = cursor_ = source;
-  line_ = 1;
-  error_.clear();
-  field_stack_.clear();
-  builder_.Clear();
-  // Start with a blank namespace just in case this file doesn't have one.
-  namespaces_.push_back(new Namespace());
-  ECHECK(SkipByteOrderMark());
-  NEXT();
-
-  if (Is(kTokenEof))
-      return Error("input file is empty");
-
-  // Includes must come before type declarations:
-  for (;;) {
-    // Parse pre-include proto statements if any:
-    if (opts.proto_mode &&
-        (attribute_ == "option" || attribute_ == "syntax" ||
-         attribute_ == "package")) {
-        ECHECK(ParseProtoDecl());
-    } else if (Is(kTokenNativeInclude)) {
-      NEXT();
-      native_included_files_.emplace_back(attribute_);
-      EXPECT(kTokenStringConstant);
-    } else if (Is(kTokenInclude) ||
-               (opts.proto_mode &&
-                attribute_ == "import" &&
-                Is(kTokenIdentifier))) {
-      NEXT();
-      if (opts.proto_mode && attribute_ == "public") NEXT();
-      auto name = attribute_;
-      EXPECT(kTokenStringConstant);
-      // Look for the file in include_paths.
-      std::string filepath;
-      for (auto paths = include_paths; paths && *paths; paths++) {
-        filepath = flatbuffers::ConCatPathFileName(*paths, name);
-        if(FileExists(filepath.c_str())) break;
-      }
-      if (filepath.empty())
-        return Error("unable to locate include file: " + name);
-      if (source_filename)
-        files_included_per_file_[source_filename].insert(filepath);
-      if (included_files_.find(filepath) == included_files_.end()) {
-        // We found an include file that we have not parsed yet.
-        // Load it and parse it.
-        std::string contents;
-        if (!LoadFile(filepath.c_str(), true, &contents))
-          return Error("unable to load include file: " + name);
-        ECHECK(DoParse(contents.c_str(), include_paths, filepath.c_str()));
-        // We generally do not want to output code for any included files:
-        if (!opts.generate_all) MarkGenerated();
-        // This is the easiest way to continue this file after an include:
-        // instead of saving and restoring all the state, we simply start the
-        // file anew. This will cause it to encounter the same include
-        // statement again, but this time it will skip it, because it was
-        // entered into included_files_.
-        // This is recursive, but only go as deep as the number of include
-        // statements.
-        return DoParse(source, include_paths, source_filename);
-      }
-      EXPECT(';');
-    } else {
-      break;
-    }
-  }
-  // Now parse all other kinds of declarations:
-  while (token_ != kTokenEof) {
-    if (opts.proto_mode) {
-      ECHECK(ParseProtoDecl());
-    } else if (token_ == kTokenNameSpace) {
-      ECHECK(ParseNamespace());
-    } else if (token_ == '{') {
-      if (!root_struct_def_)
-        return Error("no root type set to parse json with");
-      if (builder_.GetSize()) {
-        return Error("cannot have more than one json object in a file");
-      }
-      uoffset_t toff;
-      ECHECK(ParseTable(*root_struct_def_, nullptr, &toff));
-      builder_.Finish(Offset<Table>(toff),
-                file_identifier_.length() ? file_identifier_.c_str() : nullptr);
-    } else if (token_ == kTokenEnum) {
-      ECHECK(ParseEnum(false, nullptr));
-    } else if (token_ == kTokenUnion) {
-      ECHECK(ParseEnum(true, nullptr));
-    } else if (token_ == kTokenRootType) {
-      NEXT();
-      auto root_type = attribute_;
-      EXPECT(kTokenIdentifier);
-      ECHECK(ParseNamespacing(&root_type, nullptr));
-      if (!SetRootType(root_type.c_str()))
-        return Error("unknown root type: " + root_type);
-      if (root_struct_def_->fixed)
-        return Error("root type must be a table");
-      EXPECT(';');
-    } else if (token_ == kTokenFileIdentifier) {
-      NEXT();
-      file_identifier_ = attribute_;
-      EXPECT(kTokenStringConstant);
-      if (file_identifier_.length() !=
-          FlatBufferBuilder::kFileIdentifierLength)
-        return Error("file_identifier must be exactly " +
-              NumToString(FlatBufferBuilder::kFileIdentifierLength) +
-              " characters");
-      EXPECT(';');
-    } else if (token_ == kTokenFileExtension) {
-      NEXT();
-      file_extension_ = attribute_;
-      EXPECT(kTokenStringConstant);
-      EXPECT(';');
-    } else if(token_ == kTokenInclude) {
-      return Error("includes must come before declarations");
-    } else if(token_ == kTokenAttribute) {
-      NEXT();
-      auto name = attribute_;
-      EXPECT(kTokenStringConstant);
-      EXPECT(';');
-      known_attributes_[name] = false;
-    } else if (token_ == kTokenService) {
-      ECHECK(ParseService());
-    } else {
-      ECHECK(ParseDecl());
-    }
-  }
-  for (auto it = structs_.vec.begin(); it != structs_.vec.end(); ++it) {
-    if ((*it)->predecl) {
-      return Error("type referenced but not defined: " + (*it)->name);
-    }
-  }
-  // This check has to happen here and not earlier, because only now do we
-  // know for sure what the type of these are.
-  for (auto it = enums_.vec.begin(); it != enums_.vec.end(); ++it) {
-    auto &enum_def = **it;
-    if (enum_def.is_union) {
-      for (auto val_it = enum_def.vals.vec.begin();
-           val_it != enum_def.vals.vec.end();
-           ++val_it) {
-        auto &val = **val_it;
-        if (opts.lang_to_generate != IDLOptions::kCpp &&
-            val.union_type.struct_def && val.union_type.struct_def->fixed)
-          return Error(
-                "only tables can be union elements in the generated language: "
-                + val.name);
-      }
-    }
-  }
-  return NoError();
-}
-
-std::set<std::string> Parser::GetIncludedFilesRecursive(
-    const std::string &file_name) const {
-  std::set<std::string> included_files;
-  std::list<std::string> to_process;
-
-  if (file_name.empty()) return included_files;
-  to_process.push_back(file_name);
-
-  while (!to_process.empty()) {
-    std::string current = to_process.front();
-    to_process.pop_front();
-    included_files.insert(current);
-
-    auto new_files = files_included_per_file_.at(current);
-    for (auto it = new_files.begin(); it != new_files.end(); ++it) {
-      if (included_files.find(*it) == included_files.end())
-        to_process.push_back(*it);
-    }
-  }
-
-  return included_files;
-}
-
-// Schema serialization functionality:
-
-template<typename T> bool compareName(const T* a, const T* b) {
-    return a->defined_namespace->GetFullyQualifiedName(a->name)
-        < b->defined_namespace->GetFullyQualifiedName(b->name);
-}
-
-template<typename T> void AssignIndices(const std::vector<T *> &defvec) {
-  // Pre-sort these vectors, such that we can set the correct indices for them.
-  auto vec = defvec;
-  std::sort(vec.begin(), vec.end(), compareName<T>);
-  for (int i = 0; i < static_cast<int>(vec.size()); i++) vec[i]->index = i;
-}
-
-void Parser::Serialize() {
-  builder_.Clear();
-  AssignIndices(structs_.vec);
-  AssignIndices(enums_.vec);
-  std::vector<Offset<reflection::Object>> object_offsets;
-  for (auto it = structs_.vec.begin(); it != structs_.vec.end(); ++it) {
-    auto offset = (*it)->Serialize(&builder_, *this);
-    object_offsets.push_back(offset);
-    (*it)->serialized_location = offset.o;
-  }
-  std::vector<Offset<reflection::Enum>> enum_offsets;
-  for (auto it = enums_.vec.begin(); it != enums_.vec.end(); ++it) {
-    auto offset = (*it)->Serialize(&builder_, *this);
-    enum_offsets.push_back(offset);
-    (*it)->serialized_location = offset.o;
-  }
-  auto schema_offset = reflection::CreateSchema(
-                         builder_,
-                         builder_.CreateVectorOfSortedTables(&object_offsets),
-                         builder_.CreateVectorOfSortedTables(&enum_offsets),
-                         builder_.CreateString(file_identifier_),
-                         builder_.CreateString(file_extension_),
-                         root_struct_def_
-                           ? root_struct_def_->serialized_location
-                           : 0);
-  builder_.Finish(schema_offset, reflection::SchemaIdentifier());
-}
-
-Offset<reflection::Object> StructDef::Serialize(FlatBufferBuilder *builder,
-                                                const Parser &parser) const {
-  std::vector<Offset<reflection::Field>> field_offsets;
-  for (auto it = fields.vec.begin(); it != fields.vec.end(); ++it) {
-    field_offsets.push_back(
-      (*it)->Serialize(builder,
-                       static_cast<uint16_t>(it - fields.vec.begin()), parser));
-  }
-  auto qualified_name = defined_namespace->GetFullyQualifiedName(name);
-  return reflection::CreateObject(*builder,
-                                  builder->CreateString(qualified_name),
-                                  builder->CreateVectorOfSortedTables(
-                                    &field_offsets),
-                                  fixed,
-                                  static_cast<int>(minalign),
-                                  static_cast<int>(bytesize),
-                                  SerializeAttributes(builder, parser),
-                                  parser.opts.binary_schema_comments
-                                    ? builder->CreateVectorOfStrings(
-                                        doc_comment)
-                                    : 0);
-}
-
-Offset<reflection::Field> FieldDef::Serialize(FlatBufferBuilder *builder,
-                                              uint16_t id,
-                                              const Parser &parser) const {
-  return reflection::CreateField(*builder,
-                                 builder->CreateString(name),
-                                 value.type.Serialize(builder),
-                                 id,
-                                 value.offset,
-                                 IsInteger(value.type.base_type)
-                                   ? StringToInt(value.constant.c_str())
-                                   : 0,
-                                 IsFloat(value.type.base_type)
-                                   ? strtod(value.constant.c_str(), nullptr)
-                                   : 0.0,
-                                 deprecated,
-                                 required,
-                                 key,
-                                 SerializeAttributes(builder, parser),
-                                 parser.opts.binary_schema_comments
-                                   ? builder->CreateVectorOfStrings(doc_comment)
-                                   : 0);
-  // TODO: value.constant is almost always "0", we could save quite a bit of
-  // space by sharing it. Same for common values of value.type.
-}
-
-Offset<reflection::Enum> EnumDef::Serialize(FlatBufferBuilder *builder,
-                                            const Parser &parser) const {
-  std::vector<Offset<reflection::EnumVal>> enumval_offsets;
-  for (auto it = vals.vec.begin(); it != vals.vec.end(); ++it) {
-    enumval_offsets.push_back((*it)->Serialize(builder));
-  }
-  auto qualified_name = defined_namespace->GetFullyQualifiedName(name);
-  return reflection::CreateEnum(*builder,
-                                builder->CreateString(qualified_name),
-                                builder->CreateVector(enumval_offsets),
-                                is_union,
-                                underlying_type.Serialize(builder),
-                                SerializeAttributes(builder, parser),
-                                parser.opts.binary_schema_comments
-                                  ? builder->CreateVectorOfStrings(doc_comment)
-                                  : 0);
-}
-
-Offset<reflection::EnumVal> EnumVal::Serialize(FlatBufferBuilder *builder) const
-                                                                               {
-  return reflection::CreateEnumVal(*builder,
-                                   builder->CreateString(name),
-                                   value,
-                                   union_type.struct_def
-                                     ? union_type.struct_def->
-                                         serialized_location
-                                     : 0,
-                                   union_type.Serialize(builder));
-}
-
-Offset<reflection::Type> Type::Serialize(FlatBufferBuilder *builder) const {
-  return reflection::CreateType(*builder,
-                                static_cast<reflection::BaseType>(base_type),
-                                static_cast<reflection::BaseType>(element),
-                                struct_def ? struct_def->index :
-                                             (enum_def ? enum_def->index : -1));
-}
-
-flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<
-  reflection::KeyValue>>>
-    Definition::SerializeAttributes(FlatBufferBuilder *builder,
-                                    const Parser &parser) const {
-  std::vector<flatbuffers::Offset<reflection::KeyValue>> attrs;
-  for (auto kv = attributes.dict.begin(); kv != attributes.dict.end(); ++kv) {
-    auto it = parser.known_attributes_.find(kv->first);
-    assert(it != parser.known_attributes_.end());
-    if (!it->second) {  // Custom attribute.
-      attrs.push_back(
-          reflection::CreateKeyValue(*builder, builder->CreateString(kv->first),
-                                     builder->CreateString(
-                                         kv->second->constant)));
-    }
-  }
-  if (attrs.size()) {
-    return builder->CreateVectorOfSortedTables(&attrs);
-  } else {
-    return 0;
-  }
-}
-
-std::string Parser::ConformTo(const Parser &base) {
-  for (auto sit = structs_.vec.begin(); sit != structs_.vec.end(); ++sit) {
-    auto &struct_def = **sit;
-    auto qualified_name =
-        struct_def.defined_namespace->GetFullyQualifiedName(struct_def.name);
-    auto struct_def_base = base.structs_.Lookup(qualified_name);
-    if (!struct_def_base) continue;
-    for (auto fit = struct_def.fields.vec.begin();
-             fit != struct_def.fields.vec.end(); ++fit) {
-      auto &field = **fit;
-      auto field_base = struct_def_base->fields.Lookup(field.name);
-      if (field_base) {
-        if (field.value.offset != field_base->value.offset)
-          return "offsets differ for field: " + field.name;
-        if (field.value.constant != field_base->value.constant)
-          return "defaults differ for field: " + field.name;
-        if (!EqualByName(field.value.type, field_base->value.type))
-          return "types differ for field: " + field.name;
-      } else {
-        // Doesn't have to exist, deleting fields is fine.
-        // But we should check if there is a field that has the same offset
-        // but is incompatible (in the case of field renaming).
-        for (auto fbit = struct_def_base->fields.vec.begin();
-                 fbit != struct_def_base->fields.vec.end(); ++fbit) {
-          field_base = *fbit;
-          if (field.value.offset == field_base->value.offset) {
-            if (!EqualByName(field.value.type, field_base->value.type))
-              return "field renamed to different type: " + field.name;
-            break;
-          }
-        }
-      }
-    }
-  }
-  for (auto eit = enums_.vec.begin(); eit != enums_.vec.end(); ++eit) {
-    auto &enum_def = **eit;
-    auto qualified_name =
-        enum_def.defined_namespace->GetFullyQualifiedName(enum_def.name);
-    auto enum_def_base = base.enums_.Lookup(qualified_name);
-    if (!enum_def_base) continue;
-    for (auto evit = enum_def.vals.vec.begin();
-             evit != enum_def.vals.vec.end(); ++evit) {
-      auto &enum_val = **evit;
-      auto enum_val_base = enum_def_base->vals.Lookup(enum_val.name);
-      if (enum_val_base) {
-        if (enum_val.value != enum_val_base->value)
-          return "values differ for enum: " + enum_val.name;
-      }
-    }
-  }
-  return "";
-}
-
-}  // namespace flatbuffers
diff --git a/third_party/flatbuffers/src/reflection.cpp b/third_party/flatbuffers/src/reflection.cpp
deleted file mode 100644
index cb30c7f..0000000
--- a/third_party/flatbuffers/src/reflection.cpp
+++ /dev/null
@@ -1,710 +0,0 @@
-/*
- * Copyright 2015 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "flatbuffers/reflection.h"
-#include "flatbuffers/util.h"
-
-// Helper functionality for reflection.
-
-namespace flatbuffers {
-
-int64_t GetAnyValueI(reflection::BaseType type, const uint8_t *data) {
-# define FLATBUFFERS_GET(T) static_cast<int64_t>(ReadScalar<T>(data))
-  switch (type) {
-    case reflection::UType:
-    case reflection::Bool:
-    case reflection::UByte:  return FLATBUFFERS_GET(uint8_t);
-    case reflection::Byte:   return FLATBUFFERS_GET(int8_t);
-    case reflection::Short:  return FLATBUFFERS_GET(int16_t);
-    case reflection::UShort: return FLATBUFFERS_GET(uint16_t);
-    case reflection::Int:    return FLATBUFFERS_GET(int32_t);
-    case reflection::UInt:   return FLATBUFFERS_GET(uint32_t);
-    case reflection::Long:   return FLATBUFFERS_GET(int64_t);
-    case reflection::ULong:  return FLATBUFFERS_GET(uint64_t);
-    case reflection::Float:  return FLATBUFFERS_GET(float);
-    case reflection::Double: return FLATBUFFERS_GET(double);
-    case reflection::String: {
-      auto s = reinterpret_cast<const String *>(ReadScalar<uoffset_t>(data) +
-                                                data);
-      return s ? StringToInt(s->c_str()) : 0;
-    }
-    default: return 0;  // Tables & vectors do not make sense.
-  }
-# undef FLATBUFFERS_GET
-}
-
-double GetAnyValueF(reflection::BaseType type, const uint8_t *data) {
-  switch (type) {
-    case reflection::Float:  return static_cast<double>(ReadScalar<float>(data));
-    case reflection::Double: return ReadScalar<double>(data);
-    case reflection::String: {
-      auto s = reinterpret_cast<const String *>(ReadScalar<uoffset_t>(data) +
-                                                data);
-      return s ? strtod(s->c_str(), nullptr) : 0.0;
-    }
-    default: return static_cast<double>(GetAnyValueI(type, data));
-  }
-}
-
-std::string GetAnyValueS(reflection::BaseType type, const uint8_t *data,
-                         const reflection::Schema *schema, int type_index) {
-  switch (type) {
-    case reflection::Float:
-    case reflection::Double: return NumToString(GetAnyValueF(type, data));
-    case reflection::String: {
-      auto s = reinterpret_cast<const String *>(ReadScalar<uoffset_t>(data) +
-                                                data);
-      return s ? s->c_str() : "";
-    }
-    case reflection::Obj:
-      if (schema) {
-        // Convert the table to a string. This is mostly for debugging purposes,
-        // and does NOT promise to be JSON compliant.
-        // Also prefixes the type.
-        auto &objectdef = *schema->objects()->Get(type_index);
-        auto s = objectdef.name()->str();
-        if (objectdef.is_struct()) {
-          s += "(struct)";  // TODO: implement this as well.
-        } else {
-          auto table_field = reinterpret_cast<const Table *>(
-                               ReadScalar<uoffset_t>(data) + data);
-          s += " { ";
-          auto fielddefs = objectdef.fields();
-          for (auto it = fielddefs->begin(); it != fielddefs->end(); ++it) {
-            auto &fielddef = **it;
-            if (!table_field->CheckField(fielddef.offset())) continue;
-            auto val = GetAnyFieldS(*table_field, fielddef, schema);
-            if (fielddef.type()->base_type() == reflection::String)
-              val = "\"" + val + "\"";  // Doesn't deal with escape codes etc.
-            s += fielddef.name()->str();
-            s += ": ";
-            s += val;
-            s += ", ";
-          }
-          s += "}";
-        }
-        return s;
-      } else {
-        return "(table)";
-      }
-    case reflection::Vector:
-      return "[(elements)]";  // TODO: implement this as well.
-    case reflection::Union:
-      return "(union)";  // TODO: implement this as well.
-    default: return NumToString(GetAnyValueI(type, data));
-  }
-}
-
-void SetAnyValueI(reflection::BaseType type, uint8_t *data, int64_t val) {
-# define FLATBUFFERS_SET(T) WriteScalar(data, static_cast<T>(val))
-  switch (type) {
-    case reflection::UType:
-    case reflection::Bool:
-    case reflection::UByte:  FLATBUFFERS_SET(uint8_t ); break;
-    case reflection::Byte:   FLATBUFFERS_SET(int8_t  ); break;
-    case reflection::Short:  FLATBUFFERS_SET(int16_t ); break;
-    case reflection::UShort: FLATBUFFERS_SET(uint16_t); break;
-    case reflection::Int:    FLATBUFFERS_SET(int32_t ); break;
-    case reflection::UInt:   FLATBUFFERS_SET(uint32_t); break;
-    case reflection::Long:   FLATBUFFERS_SET(int64_t ); break;
-    case reflection::ULong:  FLATBUFFERS_SET(uint64_t); break;
-    case reflection::Float:  FLATBUFFERS_SET(float   ); break;
-    case reflection::Double: FLATBUFFERS_SET(double  ); break;
-    // TODO: support strings
-    default: break;
-  }
-# undef FLATBUFFERS_SET
-}
-
-void SetAnyValueF(reflection::BaseType type, uint8_t *data, double val) {
-  switch (type) {
-    case reflection::Float:  WriteScalar(data, static_cast<float>(val)); break;
-    case reflection::Double: WriteScalar(data, val); break;
-    // TODO: support strings.
-    default: SetAnyValueI(type, data, static_cast<int64_t>(val)); break;
-  }
-}
-
-void SetAnyValueS(reflection::BaseType type, uint8_t *data, const char *val) {
-  switch (type) {
-    case reflection::Float:
-    case reflection::Double:
-      SetAnyValueF(type, data, strtod(val, nullptr));
-      break;
-    // TODO: support strings.
-    default: SetAnyValueI(type, data, StringToInt(val)); break;
-  }
-}
-
-// Resize a FlatBuffer in-place by iterating through all offsets in the buffer
-// and adjusting them by "delta" if they straddle the start offset.
-// Once that is done, bytes can now be inserted/deleted safely.
-// "delta" may be negative (shrinking).
-// Unless "delta" is a multiple of the largest alignment, you'll create a small
-// amount of garbage space in the buffer (usually 0..7 bytes).
-// If your FlatBuffer's root table is not the schema's root table, you should
-// pass in your root_table type as well.
-class ResizeContext {
- public:
-  ResizeContext(const reflection::Schema &schema, uoffset_t start, int delta,
-                std::vector<uint8_t> *flatbuf,
-                const reflection::Object *root_table = nullptr)
-     : schema_(schema), startptr_(flatbuf->data() + start),
-       delta_(delta), buf_(*flatbuf),
-       dag_check_(flatbuf->size() / sizeof(uoffset_t), false) {
-    auto mask = static_cast<int>(sizeof(largest_scalar_t) - 1);
-    delta_ = (delta_ + mask) & ~mask;
-    if (!delta_) return;  // We can't shrink by less than largest_scalar_t.
-    // Now change all the offsets by delta_.
-    auto root = GetAnyRoot(buf_.data());
-    Straddle<uoffset_t, 1>(buf_.data(), root, buf_.data());
-    ResizeTable(root_table ? *root_table : *schema.root_table(), root);
-    // We can now add or remove bytes at start.
-    if (delta_ > 0) buf_.insert(buf_.begin() + start, delta_, 0);
-    else buf_.erase(buf_.begin() + start, buf_.begin() + start - delta_);
-  }
-
-  // Check if the range between first (lower address) and second straddles
-  // the insertion point. If it does, change the offset at offsetloc (of
-  // type T, with direction D).
-  template<typename T, int D> void Straddle(const void *first,
-                                            const void *second,
-                                            void *offsetloc) {
-    if (first <= startptr_ && second >= startptr_) {
-      WriteScalar<T>(offsetloc, ReadScalar<T>(offsetloc) + delta_ * D);
-      DagCheck(offsetloc) = true;
-    }
-  }
-
-  // This returns a boolean that records if the corresponding offset location
-  // has been modified already. If so, we can't even read the corresponding
-  // offset, since it is pointing to a location that is illegal until the
-  // resize actually happens.
-  // This must be checked for every offset, since we can't know which offsets
-  // will straddle and which won't.
-  uint8_t &DagCheck(const void *offsetloc) {
-    auto dag_idx = reinterpret_cast<const uoffset_t *>(offsetloc) -
-                   reinterpret_cast<const uoffset_t *>(buf_.data());
-    return dag_check_[dag_idx];
-  }
-
-  void ResizeTable(const reflection::Object &objectdef, Table *table) {
-    if (DagCheck(table))
-      return;  // Table already visited.
-    auto vtable = table->GetVTable();
-    // Early out: since all fields inside the table must point forwards in
-    // memory, if the insertion point is before the table we can stop here.
-    auto tableloc = reinterpret_cast<uint8_t *>(table);
-    if (startptr_ <= tableloc) {
-      // Check if insertion point is between the table and a vtable that
-      // precedes it. This can't happen in current construction code, but check
-      // just in case we ever change the way flatbuffers are built.
-      Straddle<soffset_t, -1>(vtable, table, table);
-    } else {
-      // Check each field.
-      auto fielddefs = objectdef.fields();
-      for (auto it = fielddefs->begin(); it != fielddefs->end(); ++it) {
-        auto &fielddef = **it;
-        auto base_type = fielddef.type()->base_type();
-        // Ignore scalars.
-        if (base_type <= reflection::Double) continue;
-        // Ignore fields that are not stored.
-        auto offset = table->GetOptionalFieldOffset(fielddef.offset());
-        if (!offset) continue;
-        // Ignore structs.
-        auto subobjectdef = base_type == reflection::Obj ?
-          schema_.objects()->Get(fielddef.type()->index()) : nullptr;
-        if (subobjectdef && subobjectdef->is_struct()) continue;
-        // Get this fields' offset, and read it if safe.
-        auto offsetloc = tableloc + offset;
-        if (DagCheck(offsetloc))
-          continue;  // This offset already visited.
-        auto ref = offsetloc + ReadScalar<uoffset_t>(offsetloc);
-        Straddle<uoffset_t, 1>(offsetloc, ref, offsetloc);
-        // Recurse.
-        switch (base_type) {
-          case reflection::Obj: {
-            ResizeTable(*subobjectdef, reinterpret_cast<Table *>(ref));
-            break;
-          }
-          case reflection::Vector: {
-            auto elem_type = fielddef.type()->element();
-            if (elem_type != reflection::Obj && elem_type != reflection::String)
-              break;
-            auto vec = reinterpret_cast<Vector<uoffset_t> *>(ref);
-            auto elemobjectdef = elem_type == reflection::Obj
-              ? schema_.objects()->Get(fielddef.type()->index())
-              : nullptr;
-            if (elemobjectdef && elemobjectdef->is_struct()) break;
-            for (uoffset_t i = 0; i < vec->size(); i++) {
-              auto loc = vec->Data() + i * sizeof(uoffset_t);
-              if (DagCheck(loc))
-                continue;  // This offset already visited.
-              auto dest = loc + vec->Get(i);
-              Straddle<uoffset_t, 1>(loc, dest ,loc);
-              if (elemobjectdef)
-                ResizeTable(*elemobjectdef, reinterpret_cast<Table *>(dest));
-            }
-            break;
-          }
-          case reflection::Union: {
-            ResizeTable(GetUnionType(schema_, objectdef, fielddef, *table),
-                        reinterpret_cast<Table *>(ref));
-            break;
-          }
-          case reflection::String:
-            break;
-          default:
-            assert(false);
-        }
-      }
-      // Check if the vtable offset points beyond the insertion point.
-      // Must do this last, since GetOptionalFieldOffset above still reads
-      // this value.
-      Straddle<soffset_t, -1>(table, vtable, table);
-    }
-  }
-
-  void operator=(const ResizeContext &rc);
-
- private:
-  const reflection::Schema &schema_;
-  uint8_t *startptr_;
-  int delta_;
-  std::vector<uint8_t> &buf_;
-  std::vector<uint8_t> dag_check_;
-};
-
-void SetString(const reflection::Schema &schema, const std::string &val,
-                      const String *str, std::vector<uint8_t> *flatbuf,
-                      const reflection::Object *root_table) {
-  auto delta = static_cast<int>(val.size()) - static_cast<int>(str->Length());
-  auto str_start = static_cast<uoffset_t>(
-                     reinterpret_cast<const uint8_t *>(str) - flatbuf->data());
-  auto start = str_start + static_cast<uoffset_t>(sizeof(uoffset_t));
-  if (delta) {
-    // Clear the old string, since we don't want parts of it remaining.
-    memset(flatbuf->data() + start, 0, str->Length());
-    // Different size, we must expand (or contract).
-    ResizeContext(schema, start, delta, flatbuf, root_table);
-    // Set the new length.
-    WriteScalar(flatbuf->data() + str_start,
-                static_cast<uoffset_t>(val.size()));
-  }
-  // Copy new data. Safe because we created the right amount of space.
-  memcpy(flatbuf->data() + start, val.c_str(), val.size() + 1);
-}
-
-uint8_t *ResizeAnyVector(const reflection::Schema &schema, uoffset_t newsize,
-                         const VectorOfAny *vec, uoffset_t num_elems,
-                         uoffset_t elem_size, std::vector<uint8_t> *flatbuf,
-                         const reflection::Object *root_table) {
-  auto delta_elem = static_cast<int>(newsize) - static_cast<int>(num_elems);
-  auto delta_bytes = delta_elem * static_cast<int>(elem_size);
-  auto vec_start = reinterpret_cast<const uint8_t *>(vec) - flatbuf->data();
-  auto start = static_cast<uoffset_t>(vec_start + sizeof(uoffset_t) +
-                                      elem_size * num_elems);
-  if (delta_bytes) {
-    if (delta_elem < 0) {
-      // Clear elements we're throwing away, since some might remain in the
-      // buffer.
-      auto size_clear = -delta_elem * elem_size;
-      memset(flatbuf->data() + start - size_clear, 0, size_clear);
-    }
-    ResizeContext(schema, start, delta_bytes, flatbuf, root_table);
-    WriteScalar(flatbuf->data() + vec_start, newsize);  // Length field.
-    // Set new elements to 0.. this can be overwritten by the caller.
-    if (delta_elem > 0) {
-      memset(flatbuf->data() + start, 0, delta_elem * elem_size);
-    }
-  }
-  return flatbuf->data() + start;
-}
-
-const uint8_t *AddFlatBuffer(std::vector<uint8_t> &flatbuf,
-                             const uint8_t *newbuf, size_t newlen) {
-  // Align to sizeof(uoffset_t) past sizeof(largest_scalar_t) since we're
-  // going to chop off the root offset.
-  while ((flatbuf.size() & (sizeof(uoffset_t) - 1)) ||
-         !(flatbuf.size() & (sizeof(largest_scalar_t) - 1))) {
-    flatbuf.push_back(0);
-  }
-  auto insertion_point = static_cast<uoffset_t>(flatbuf.size());
-  // Insert the entire FlatBuffer minus the root pointer.
-  flatbuf.insert(flatbuf.end(), newbuf + sizeof(uoffset_t), newbuf + newlen);
-  auto root_offset = ReadScalar<uoffset_t>(newbuf) - sizeof(uoffset_t);
-  return flatbuf.data() + insertion_point + root_offset;
-}
-
-void CopyInline(FlatBufferBuilder &fbb, const reflection::Field &fielddef,
-                const Table &table, size_t align, size_t size) {
-  fbb.Align(align);
-  fbb.PushBytes(table.GetStruct<const uint8_t *>(fielddef.offset()), size);
-  fbb.TrackField(fielddef.offset(), fbb.GetSize());
-}
-
-Offset<const Table *> CopyTable(FlatBufferBuilder &fbb,
-                                const reflection::Schema &schema,
-                                const reflection::Object &objectdef,
-                                const Table &table,
-                                bool use_string_pooling) {
-  // Before we can construct the table, we have to first generate any
-  // subobjects, and collect their offsets.
-  std::vector<uoffset_t> offsets;
-  auto fielddefs = objectdef.fields();
-  for (auto it = fielddefs->begin(); it != fielddefs->end(); ++it) {
-    auto &fielddef = **it;
-    // Skip if field is not present in the source.
-    if (!table.CheckField(fielddef.offset())) continue;
-    uoffset_t offset = 0;
-    switch (fielddef.type()->base_type()) {
-      case reflection::String: {
-        offset = use_string_pooling
-                 ? fbb.CreateSharedString(GetFieldS(table, fielddef)).o
-                 : fbb.CreateString(GetFieldS(table, fielddef)).o;
-        break;
-      }
-      case reflection::Obj: {
-        auto &subobjectdef = *schema.objects()->Get(fielddef.type()->index());
-        if (!subobjectdef.is_struct()) {
-          offset = CopyTable(fbb, schema, subobjectdef,
-                             *GetFieldT(table, fielddef)).o;
-        }
-        break;
-      }
-      case reflection::Union: {
-        auto &subobjectdef = GetUnionType(schema, objectdef, fielddef, table);
-        offset = CopyTable(fbb, schema, subobjectdef,
-                           *GetFieldT(table, fielddef)).o;
-        break;
-      }
-      case reflection::Vector: {
-        auto vec = table.GetPointer<const Vector<Offset<Table>> *>(
-                                                             fielddef.offset());
-        auto element_base_type = fielddef.type()->element();
-        auto elemobjectdef = element_base_type == reflection::Obj
-                             ? schema.objects()->Get(fielddef.type()->index())
-                             : nullptr;
-        switch (element_base_type) {
-          case reflection::String: {
-            std::vector<Offset<const String *>> elements(vec->size());
-            auto vec_s = reinterpret_cast<const Vector<Offset<String>> *>(vec);
-            for (uoffset_t i = 0; i < vec_s->size(); i++) {
-              elements[i] = use_string_pooling
-                            ? fbb.CreateSharedString(vec_s->Get(i)).o
-                            : fbb.CreateString(vec_s->Get(i)).o;
-            }
-            offset = fbb.CreateVector(elements).o;
-            break;
-          }
-          case reflection::Obj: {
-            if (!elemobjectdef->is_struct()) {
-              std::vector<Offset<const Table *>> elements(vec->size());
-              for (uoffset_t i = 0; i < vec->size(); i++) {
-                elements[i] =
-                  CopyTable(fbb, schema, *elemobjectdef, *vec->Get(i));
-              }
-              offset = fbb.CreateVector(elements).o;
-              break;
-            }
-            // FALL-THRU:
-          }
-          default: {  // Scalars and structs.
-            auto element_size = GetTypeSize(element_base_type);
-            if (elemobjectdef && elemobjectdef->is_struct())
-              element_size = elemobjectdef->bytesize();
-            fbb.StartVector(element_size, vec->size());
-            fbb.PushBytes(vec->Data(), element_size * vec->size());
-            offset = fbb.EndVector(vec->size());
-            break;
-          }
-        }
-        break;
-      }
-      default:  // Scalars.
-        break;
-    }
-    if (offset) {
-      offsets.push_back(offset);
-    }
-  }
-  // Now we can build the actual table from either offsets or scalar data.
-  auto start = objectdef.is_struct()
-                 ? fbb.StartStruct(objectdef.minalign())
-                 : fbb.StartTable();
-  size_t offset_idx = 0;
-  for (auto it = fielddefs->begin(); it != fielddefs->end(); ++it) {
-    auto &fielddef = **it;
-    if (!table.CheckField(fielddef.offset())) continue;
-    auto base_type = fielddef.type()->base_type();
-    switch (base_type) {
-      case reflection::Obj: {
-        auto &subobjectdef = *schema.objects()->Get(fielddef.type()->index());
-        if (subobjectdef.is_struct()) {
-          CopyInline(fbb, fielddef, table, subobjectdef.minalign(),
-                     subobjectdef.bytesize());
-          break;
-        }
-        // else: FALL-THRU:
-      }
-      case reflection::Union:
-      case reflection::String:
-      case reflection::Vector:
-        fbb.AddOffset(fielddef.offset(), Offset<void>(offsets[offset_idx++]));
-        break;
-      default: { // Scalars.
-        auto size = GetTypeSize(base_type);
-        CopyInline(fbb, fielddef, table, size, size);
-        break;
-      }
-    }
-  }
-  assert(offset_idx == offsets.size());
-  if (objectdef.is_struct()) {
-    fbb.ClearOffsets();
-    return fbb.EndStruct();
-  } else {
-    return fbb.EndTable(start, static_cast<voffset_t>(fielddefs->size()));
-  }
-}
-
-bool VerifyStruct(flatbuffers::Verifier &v,
-                  const flatbuffers::Table &parent_table,
-                  voffset_t field_offset,
-                  const reflection::Object &obj,
-                  bool required) {
-  auto offset = parent_table.GetOptionalFieldOffset(field_offset);
-  if (required && !offset) {
-    return false;
-  }
-
-  return !offset || v.Verify(reinterpret_cast<const uint8_t*>(&parent_table)
-                             + offset, obj.bytesize());
-}
-
-bool VerifyVectorOfStructs(flatbuffers::Verifier &v,
-                           const flatbuffers::Table &parent_table,
-                           voffset_t field_offset,
-                           const reflection::Object &obj,
-                           bool required) {
-  auto p = parent_table.GetPointer<const uint8_t*>(field_offset);
-  const uint8_t* end;
-  if (required && !p) {
-    return false;
-  }
-
-  return !p || v.VerifyVector(p, obj.bytesize(), &end);
-}
-
-// forward declare to resolve cyclic deps between VerifyObject and VerifyVector
-bool VerifyObject(flatbuffers::Verifier &v,
-                  const reflection::Schema &schema,
-                  const reflection::Object &obj,
-                  const flatbuffers::Table *table,
-                  bool isRequired);
-
-bool VerifyVector(flatbuffers::Verifier &v,
-                  const reflection::Schema &schema,
-                  const flatbuffers::Table &table,
-                  const reflection::Field &vec_field) {
-  assert(vec_field.type()->base_type() == reflection::Vector);
-  if (!table.VerifyField<uoffset_t>(v, vec_field.offset()))
-    return false;
-
-  switch (vec_field.type()->element()) {
-    case reflection::None:
-      assert(false);
-      break;
-    case reflection::UType:
-      return v.Verify(flatbuffers::GetFieldV<uint8_t>(table, vec_field));
-    case reflection::Bool:
-    case reflection::Byte:
-    case reflection::UByte:
-      return v.Verify(flatbuffers::GetFieldV<int8_t>(table, vec_field));
-    case reflection::Short:
-    case reflection::UShort:
-      return v.Verify(flatbuffers::GetFieldV<int16_t>(table, vec_field));
-    case reflection::Int:
-    case reflection::UInt:
-      return v.Verify(flatbuffers::GetFieldV<int32_t>(table, vec_field));
-    case reflection::Long:
-    case reflection::ULong:
-      return v.Verify(flatbuffers::GetFieldV<int64_t>(table, vec_field));
-    case reflection::Float:
-      return v.Verify(flatbuffers::GetFieldV<float>(table, vec_field));
-    case reflection::Double:
-      return v.Verify(flatbuffers::GetFieldV<double>(table, vec_field));
-    case reflection::String: {
-      auto vecString =
-        flatbuffers::GetFieldV<flatbuffers::
-        Offset<flatbuffers::String>>(table, vec_field);
-      if (v.Verify(vecString) && v.VerifyVectorOfStrings(vecString)) {
-        return true;
-      } else {
-        return false;
-      }
-    }
-    case reflection::Vector:
-      assert(false);
-      break;
-    case reflection::Obj: {
-      auto obj = schema.objects()->Get(vec_field.type()->index());
-      if (obj->is_struct()) {
-        if (!VerifyVectorOfStructs(v, table, vec_field.offset(), *obj,
-                                   vec_field.required())) {
-          return false;
-        }
-      } else {
-        auto vec =
-          flatbuffers::GetFieldV<flatbuffers::
-          Offset<flatbuffers::Table>>(table, vec_field);
-        if (!v.Verify(vec))
-          return false;
-        if (vec) {
-          for (uoffset_t j = 0; j < vec->size(); j++) {
-            if (!VerifyObject(v, schema, *obj, vec->Get(j), true)) {
-              return false;
-            }
-          }
-        }
-      }
-      return true;
-    }
-    case reflection::Union:
-      assert(false);
-      break;
-    default:
-      assert(false);
-      break;
-  }
-
-  return false;
-}
-
-bool VerifyObject(flatbuffers::Verifier &v,
-                  const reflection::Schema &schema,
-                  const reflection::Object &obj,
-                  const flatbuffers::Table *table,
-                  bool required) {
-  if (!table) {
-    if (!required)
-      return true;
-    else
-      return false;
-  }
-
-  if (!table->VerifyTableStart(v))
-    return false;
-
-  for (uoffset_t i = 0; i < obj.fields()->size(); i++) {
-    auto field_def = obj.fields()->Get(i);
-    switch (field_def->type()->base_type()) {
-      case reflection::None:
-        assert(false);
-        break;
-      case reflection::UType:
-        if (!table->VerifyField<uint8_t>(v, field_def->offset()))
-          return false;
-        break;
-      case reflection::Bool:
-      case reflection::Byte:
-      case reflection::UByte:
-        if (!table->VerifyField<int8_t>(v, field_def->offset()))
-          return false;
-        break;
-      case reflection::Short:
-      case reflection::UShort:
-        if (!table->VerifyField<int16_t>(v, field_def->offset()))
-          return false;
-        break;
-      case reflection::Int:
-      case reflection::UInt:
-        if (!table->VerifyField<int32_t>(v, field_def->offset()))
-          return false;
-        break;
-      case reflection::Long:
-      case reflection::ULong:
-        if (!table->VerifyField<int64_t>(v, field_def->offset()))
-          return false;
-        break;
-      case reflection::Float:
-        if (!table->VerifyField<float>(v, field_def->offset()))
-          return false;
-        break;
-      case reflection::Double:
-        if (!table->VerifyField<double>(v, field_def->offset()))
-          return false;
-        break;
-      case reflection::String:
-        if (!table->VerifyField<uoffset_t>(v, field_def->offset()) ||
-            !v.Verify(flatbuffers::GetFieldS(*table, *field_def))) {
-          return false;
-        }
-        break;
-      case reflection::Vector:
-        if (!VerifyVector(v, schema, *table, *field_def))
-          return false;
-        break;
-      case reflection::Obj: {
-        auto child_obj = schema.objects()->Get(field_def->type()->index());
-        if (child_obj->is_struct()) {
-          if (!VerifyStruct(v, *table, field_def->offset(), *child_obj,
-                            field_def->required())) {
-            return false;
-          }
-        } else {
-          if (!VerifyObject(v, schema, *child_obj,
-                            flatbuffers::GetFieldT(*table, *field_def),
-                            field_def->required())) {
-            return false;
-          }
-        }
-        break;
-      }
-      case reflection::Union: {
-        //  get union type from the prev field
-        voffset_t utype_offset = field_def->offset() - sizeof(voffset_t);
-        auto utype = table->GetField<uint8_t>(utype_offset, 0);
-        if (utype != 0) {
-          // Means we have this union field present
-          auto fb_enum = schema.enums()->Get(field_def->type()->index());
-          auto child_obj = fb_enum->values()->Get(utype)->object();
-          if (!VerifyObject(v, schema, *child_obj,
-                            flatbuffers::GetFieldT(*table, *field_def),
-                            field_def->required())) {
-            return false;
-          }
-        }
-        break;
-      }
-      default:
-        assert(false);
-        break;
-    }
-  }
-
-  return true;
-}
-
-bool Verify(const reflection::Schema &schema,
-            const reflection::Object &root,
-            const uint8_t *buf,
-            size_t length) {
-  Verifier v(buf, length);
-  return VerifyObject(v, schema, root, flatbuffers::GetAnyRoot(buf), true);
-}
-
-}  // namespace flatbuffers
diff --git a/third_party/flatbuffers/src/util.cpp b/third_party/flatbuffers/src/util.cpp
deleted file mode 100644
index f4aecb5..0000000
--- a/third_party/flatbuffers/src/util.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "flatbuffers/util.h"
-
-namespace flatbuffers {
-
-bool FileExistsRaw(const char *name) {
-  std::ifstream ifs(name);
-  return ifs.good();
-}
-
-bool LoadFileRaw(const char *name, bool binary, std::string *buf) {
-  if (DirExists(name)) return false;
-  std::ifstream ifs(name, binary ? std::ifstream::binary : std::ifstream::in);
-  if (!ifs.is_open()) return false;
-  if (binary) {
-    // The fastest way to read a file into a string.
-    ifs.seekg(0, std::ios::end);
-    auto size = ifs.tellg();
-    (*buf).resize(static_cast<size_t>(size));
-    ifs.seekg(0, std::ios::beg);
-    ifs.read(&(*buf)[0], (*buf).size());
-  } else {
-    // This is slower, but works correctly on all platforms for text files.
-    std::ostringstream oss;
-    oss << ifs.rdbuf();
-    *buf = oss.str();
-  }
-  return !ifs.bad();
-}
-
-static LoadFileFunction g_load_file_function = LoadFileRaw;
-static FileExistsFunction g_file_exists_function = FileExistsRaw;
-
-bool LoadFile(const char *name, bool binary, std::string *buf) {
-  assert(g_load_file_function);
-  return g_load_file_function(name, binary, buf);
-}
-
-bool FileExists(const char *name) {
-  assert(g_file_exists_function);
-  return g_file_exists_function(name);
-}
-
-bool DirExists(const char *name) {
-  #ifdef _WIN32
-    #define flatbuffers_stat _stat
-    #define FLATBUFFERS_S_IFDIR _S_IFDIR
-  #else
-    #define flatbuffers_stat stat
-    #define FLATBUFFERS_S_IFDIR S_IFDIR
-  #endif
-  struct flatbuffers_stat file_info;
-  if (flatbuffers_stat(name, &file_info) != 0) return false;
-  return (file_info.st_mode & FLATBUFFERS_S_IFDIR) != 0;
-}
-
-LoadFileFunction SetLoadFileFunction(LoadFileFunction load_file_function) {
-  LoadFileFunction previous_function = g_load_file_function;
-  g_load_file_function = load_file_function ? load_file_function : LoadFileRaw;
-  return previous_function;
-}
-
-FileExistsFunction SetFileExistsFunction(
-    FileExistsFunction file_exists_function) {
-  FileExistsFunction previous_function = g_file_exists_function;
-  g_file_exists_function = file_exists_function ?
-      file_exists_function : FileExistsRaw;
-  return previous_function;
-}
-
-}  // namespace flatbuffers
diff --git a/third_party/flatbuffers/tests/FlatBuffers.Test/Assert.cs b/third_party/flatbuffers/tests/FlatBuffers.Test/Assert.cs
deleted file mode 100644
index 488c338..0000000
--- a/third_party/flatbuffers/tests/FlatBuffers.Test/Assert.cs
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace FlatBuffers.Test
-{
-
-    public class AssertFailedException : Exception
-    {
-        private readonly object _expected;
-        private readonly object _actual;
-
-        public AssertFailedException(object expected, object actual)
-        {
-            _expected = expected;
-            _actual = actual;
-        }
-
-        public override string Message
-        {
-            get { return string.Format("Expected {0} but saw {1}", _expected, _actual); }
-        }
-    }
-
-    public class AssertArrayFailedException : Exception
-    {
-        private readonly int _index;
-        private readonly object _expected;
-        private readonly object _actual;
-
-        public AssertArrayFailedException(int index, object expected, object actual)
-        {
-            _index = index;
-            _expected = expected;
-            _actual = actual;
-        }
-
-        public override string Message
-        {
-            get { return string.Format("Expected {0} at index {1} but saw {2}", _expected, _index, _actual); }
-        }
-    }
-
-    public class AssertUnexpectedThrowException : Exception
-    {
-        private readonly object _expected;
-
-        public AssertUnexpectedThrowException(object expected)
-        {
-            _expected = expected;
-        }
-
-        public override string Message
-        {
-            get { return string.Format("Expected exception of type {0}", _expected); }
-        }
-    }
-
-    public static class Assert
-    {
-        public static void AreEqual<T>(T expected, T actual)
-        {
-            if (!expected.Equals(actual))
-            {
-                throw new AssertFailedException(expected, actual);
-            }
-        }
-
-        public static void ArrayEqual<T>(T[] expected, T[] actual)
-        {
-            if (expected.Length != actual.Length)
-            {
-                throw new AssertFailedException(expected, actual);
-            }
-
-            for(var i = 0; i < expected.Length; ++i)
-            {
-                if (!expected[i].Equals(actual[i]))
-                {
-                    throw new AssertArrayFailedException(i, expected, actual);
-                }
-            }
-        }
-
-        public static void IsTrue(bool value)
-        {
-            if (!value)
-            {
-                throw new AssertFailedException(true, value);
-            }
-        }
-
-        public static void IsFalse(bool value)
-        {
-            if (value)
-            {
-                throw new AssertFailedException(false, value);
-            }
-        }
-
-        public static void Throws<T>(Action action) where T : Exception
-        {
-            var caught = false;
-            try
-            {
-                action();
-            }
-            catch (T)
-            {
-                caught = true;
-            }
-
-            if (!caught)
-            {
-                throw new AssertUnexpectedThrowException(typeof (T));
-            }
-        }
-    }
-}
diff --git a/third_party/flatbuffers/tests/FlatBuffers.Test/ByteBufferTests.cs b/third_party/flatbuffers/tests/FlatBuffers.Test/ByteBufferTests.cs
deleted file mode 100644
index 3324f12..0000000
--- a/third_party/flatbuffers/tests/FlatBuffers.Test/ByteBufferTests.cs
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-
-namespace FlatBuffers.Test
-{
-    [FlatBuffersTestClass]
-    public class ByteBufferTests
-    {
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_Length_MatchesBufferLength()
-        {
-            var buffer = new byte[1000];
-            var uut = new ByteBuffer(buffer);
-            Assert.AreEqual(buffer.Length, uut.Length);
-        }
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_PutBytePopulatesBufferAtZeroOffset()
-        {
-            var buffer = new byte[1];
-            var uut = new ByteBuffer(buffer);
-            uut.PutByte(0, (byte)99);
-
-            Assert.AreEqual((byte)99, buffer[0]);
-        }
-
-#if !BYTEBUFFER_NO_BOUNDS_CHECK
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_PutByteCannotPutAtOffsetPastLength()
-        {
-            var buffer = new byte[1];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutByte(1, 99));
-        }
-#endif
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_PutShortPopulatesBufferCorrectly()
-        {
-            var buffer = new byte[2];
-            var uut = new ByteBuffer(buffer);
-            uut.PutShort(0, (short)1);
-
-            // Ensure Endianness was written correctly
-            Assert.AreEqual((byte)1, buffer[0]);
-            Assert.AreEqual((byte)0, buffer[1]);
-        }
-
-#if !BYTEBUFFER_NO_BOUNDS_CHECK
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_PutShortCannotPutAtOffsetPastLength()
-        {
-            var buffer = new byte[2];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutShort(2, 99));
-        }
-#endif
-
-#if !BYTEBUFFER_NO_BOUNDS_CHECK
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_PutShortChecksLength()
-        {
-            var buffer = new byte[1];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutShort(0, 99));
-        }
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_PutShortChecksLengthAndOffset()
-        {
-            var buffer = new byte[2];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutShort(1, 99));
-        }
-#endif
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_PutIntPopulatesBufferCorrectly()
-        {
-            var buffer = new byte[4];
-            var uut = new ByteBuffer(buffer);
-            uut.PutInt(0, 0x0A0B0C0D);
-
-            // Ensure Endianness was written correctly
-            Assert.AreEqual(0x0D, buffer[0]);
-            Assert.AreEqual(0x0C, buffer[1]);
-            Assert.AreEqual(0x0B, buffer[2]);
-            Assert.AreEqual(0x0A, buffer[3]);
-        }
-
- #if !BYTEBUFFER_NO_BOUNDS_CHECK
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_PutIntCannotPutAtOffsetPastLength()
-        {
-            var buffer = new byte[4];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutInt(2, 0x0A0B0C0D));
-        }
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_PutIntChecksLength()
-        {
-            var buffer = new byte[1];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutInt(0, 0x0A0B0C0D));
-        }
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_PutIntChecksLengthAndOffset()
-        {
-            var buffer = new byte[4];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutInt(2, 0x0A0B0C0D));
-        }
-#endif
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_PutLongPopulatesBufferCorrectly()
-        {
-            var buffer = new byte[8];
-            var uut = new ByteBuffer(buffer);
-            uut.PutLong(0, 0x010203040A0B0C0D);
-
-            // Ensure Endianness was written correctly
-            Assert.AreEqual(0x0D, buffer[0]);
-            Assert.AreEqual(0x0C, buffer[1]);
-            Assert.AreEqual(0x0B, buffer[2]);
-            Assert.AreEqual(0x0A, buffer[3]);
-            Assert.AreEqual(0x04, buffer[4]);
-            Assert.AreEqual(0x03, buffer[5]);
-            Assert.AreEqual(0x02, buffer[6]);
-            Assert.AreEqual(0x01, buffer[7]);
-        }
-
-#if !BYTEBUFFER_NO_BOUNDS_CHECK
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_PutLongCannotPutAtOffsetPastLength()
-        {
-            var buffer = new byte[8];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutLong(2, 0x010203040A0B0C0D));
-        }
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_PutLongChecksLength()
-        {
-            var buffer = new byte[1];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutLong(0, 0x010203040A0B0C0D));
-        }
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_PutLongChecksLengthAndOffset()
-        {
-            var buffer = new byte[8];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.PutLong(2, 0x010203040A0B0C0D));
-        }
-#endif
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_GetByteReturnsCorrectData()
-        {
-            var buffer = new byte[1];
-            buffer[0] = 99;
-            var uut = new ByteBuffer(buffer);
-            Assert.AreEqual((byte)99, uut.Get(0));
-        }
-
-#if !BYTEBUFFER_NO_BOUNDS_CHECK
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_GetByteChecksOffset()
-        {
-            var buffer = new byte[1];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(()=>uut.Get(1));
-        }
-#endif
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_GetShortReturnsCorrectData()
-        {
-            var buffer = new byte[2];
-            buffer[0] = 1;
-            buffer[1] = 0;
-            var uut = new ByteBuffer(buffer);
-            Assert.AreEqual(1, uut.GetShort(0));
-        }
-
-#if !BYTEBUFFER_NO_BOUNDS_CHECK
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_GetShortChecksOffset()
-        {
-            var buffer = new byte[2];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetShort(2));
-        }
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_GetShortChecksLength()
-        {
-            var buffer = new byte[2];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetShort(1));
-        }
-#endif
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_GetIntReturnsCorrectData()
-        {
-            var buffer = new byte[4];
-            buffer[0] = 0x0D;
-            buffer[1] = 0x0C;
-            buffer[2] = 0x0B;
-            buffer[3] = 0x0A;
-            var uut = new ByteBuffer(buffer);
-            Assert.AreEqual(0x0A0B0C0D, uut.GetInt(0));
-        }
-
-#if !BYTEBUFFER_NO_BOUNDS_CHECK
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_GetIntChecksOffset()
-        {
-            var buffer = new byte[4];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetInt(4));
-        }
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_GetIntChecksLength()
-        {
-            var buffer = new byte[2];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetInt(0));
-        }
-#endif
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_GetLongReturnsCorrectData()
-        {
-            var buffer = new byte[8];
-            buffer[0] = 0x0D;
-            buffer[1] = 0x0C;
-            buffer[2] = 0x0B;
-            buffer[3] = 0x0A;
-            buffer[4] = 0x04;
-            buffer[5] = 0x03;
-            buffer[6] = 0x02;
-            buffer[7] = 0x01;
-            var uut = new ByteBuffer(buffer);
-            Assert.AreEqual(0x010203040A0B0C0D, uut.GetLong(0));
-        }
-
-#if !BYTEBUFFER_NO_BOUNDS_CHECK
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_GetLongChecksOffset()
-        {
-            var buffer = new byte[8];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetLong(8));
-        }
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_GetLongChecksLength()
-        {
-            var buffer = new byte[7];
-            var uut = new ByteBuffer(buffer);
-            Assert.Throws<ArgumentOutOfRangeException>(() => uut.GetLong(0));
-        }
-#endif
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_ReverseBytesUshort()
-        {
-            const ushort original = (ushort)0x1234U;
-            var reverse = ByteBuffer.ReverseBytes(original);
-            Assert.AreEqual(0x3412U, reverse);
-
-            var rereverse = ByteBuffer.ReverseBytes(reverse);
-            Assert.AreEqual(original, rereverse);
-        }
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_ReverseBytesUint()
-        {
-            const uint original = 0x12345678;
-            var reverse = ByteBuffer.ReverseBytes(original);
-            Assert.AreEqual(0x78563412U, reverse);
-
-            var rereverse = ByteBuffer.ReverseBytes(reverse);
-            Assert.AreEqual(original, rereverse);
-        }
-
-        [FlatBuffersTestMethod]
-        public void ByteBuffer_ReverseBytesUlong()
-        {
-            const ulong original = 0x1234567890ABCDEFUL;
-            var reverse = ByteBuffer.ReverseBytes(original);
-            Assert.AreEqual(0xEFCDAB9078563412UL, reverse);
-
-            var rereverse = ByteBuffer.ReverseBytes(reverse);
-            Assert.AreEqual(original, rereverse);
-        }
-    }
-}
diff --git a/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBufferBuilderTests.cs b/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBufferBuilderTests.cs
deleted file mode 100644
index f02df44..0000000
--- a/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBufferBuilderTests.cs
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace FlatBuffers.Test
-{
-    [FlatBuffersTestClass]
-    public class FlatBufferBuilderTests
-    {
-        private FlatBufferBuilder CreateBuffer(bool forceDefaults = true)
-        {
-            var fbb = new FlatBufferBuilder(16) {ForceDefaults = forceDefaults};
-            fbb.StartObject(1);
-            return fbb;
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WithForceDefaults_WhenAddBool_AndDefaultValue_OffsetIncreasesBySize()
-        {
-            var fbb = CreateBuffer();
-            var storedOffset = fbb.Offset;
-            fbb.AddBool(0, false, false);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(sizeof(bool), endOffset-storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WithForceDefaults_WhenAddSByte_AndDefaultValue_OffsetIncreasesBySize()
-        {
-            var fbb = CreateBuffer();
-            var storedOffset = fbb.Offset;
-            fbb.AddSbyte(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(sizeof(sbyte), endOffset - storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WithForceDefaults_WhenAddByte_AndDefaultValue_OffsetIncreasesBySize()
-        {
-            var fbb = CreateBuffer();
-            var storedOffset = fbb.Offset;
-            fbb.AddByte(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(sizeof(byte), endOffset - storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WithForceDefaults_WhenAddShort_AndDefaultValue_OffsetIncreasesBySize()
-        {
-            var fbb = CreateBuffer();
-            var storedOffset = fbb.Offset;
-            fbb.AddShort(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(sizeof(short), endOffset - storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WithForceDefaults_WhenAddUShort_AndDefaultValue_OffsetIncreasesBySize()
-        {
-            var fbb = CreateBuffer();
-            var storedOffset = fbb.Offset;
-            fbb.AddUshort(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(sizeof(ushort), endOffset - storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WithForceDefaults_WhenAddInt_AndDefaultValue_OffsetIncreasesBySize()
-        {
-            var fbb = CreateBuffer();
-            var storedOffset = fbb.Offset;
-            fbb.AddInt(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(sizeof(int), endOffset - storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WithForceDefaults_WhenAddUInt_AndDefaultValue_OffsetIncreasesBySize()
-        {
-            var fbb = CreateBuffer();
-            var storedOffset = fbb.Offset;
-            fbb.AddUint(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(sizeof(uint), endOffset - storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WithForceDefaults_WhenAddLong_AndDefaultValue_OffsetIncreasesBySize()
-        {
-            var fbb = CreateBuffer();
-            var storedOffset = fbb.Offset;
-            fbb.AddLong(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(sizeof(long), endOffset - storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WithForceDefaults_WhenAddULong_AndDefaultValue_OffsetIncreasesBySize()
-        {
-            var fbb = CreateBuffer();
-            var storedOffset = fbb.Offset;
-            fbb.AddUlong(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(sizeof(ulong), endOffset - storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WithForceDefaults_WhenAddFloat_AndDefaultValue_OffsetIncreasesBySize()
-        {
-            var fbb = CreateBuffer();
-            var storedOffset = fbb.Offset;
-            fbb.AddFloat(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(sizeof(float), endOffset - storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WithForceDefaults_WhenAddDouble_AndDefaultValue_OffsetIncreasesBySize()
-        {
-            var fbb = CreateBuffer();
-            var storedOffset = fbb.Offset;
-            fbb.AddDouble(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(sizeof(double), endOffset - storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WhenAddBool_AndDefaultValue_OffsetIsUnchanged()
-        {
-            var fbb = CreateBuffer(false);
-            var storedOffset = fbb.Offset;
-            fbb.AddBool(0, false, false);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(endOffset, storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WhenAddSByte_AndDefaultValue_OffsetIsUnchanged()
-        {
-            var fbb = CreateBuffer(false);
-            var storedOffset = fbb.Offset;
-            fbb.AddSbyte(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(endOffset, storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WhenAddByte_AndDefaultValue_OffsetIsUnchanged()
-        {
-            var fbb = CreateBuffer(false);
-            var storedOffset = fbb.Offset;
-            fbb.AddByte(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(endOffset, storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WhenAddShort_AndDefaultValue_OffsetIsUnchanged()
-        {
-            var fbb = CreateBuffer(false);
-            var storedOffset = fbb.Offset;
-            fbb.AddShort(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(endOffset, storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WhenAddUShort_AndDefaultValue_OffsetIsUnchanged()
-        {
-            var fbb = CreateBuffer(false);
-            var storedOffset = fbb.Offset;
-            fbb.AddUshort(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(endOffset, storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WhenAddInt_AndDefaultValue_OffsetIsUnchanged()
-        {
-            var fbb = CreateBuffer(false);
-            var storedOffset = fbb.Offset;
-            fbb.AddInt(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(endOffset, storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WhenAddUInt_AndDefaultValue_OffsetIsUnchanged()
-        {
-            var fbb = CreateBuffer(false);
-            var storedOffset = fbb.Offset;
-            fbb.AddUint(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(endOffset, storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WhenAddLong_AndDefaultValue_OffsetIsUnchanged()
-        {
-            var fbb = CreateBuffer(false);
-            var storedOffset = fbb.Offset;
-            fbb.AddLong(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(endOffset, storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WhenAddULong_AndDefaultValue_OffsetIsUnchanged()
-        {
-            var fbb = CreateBuffer(false);
-            var storedOffset = fbb.Offset;
-            fbb.AddUlong(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(endOffset, storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WhenAddFloat_AndDefaultValue_OffsetIsUnchanged()
-        {
-            var fbb = CreateBuffer(false);
-            var storedOffset = fbb.Offset;
-            fbb.AddFloat(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(endOffset, storedOffset);
-        }
-
-        [FlatBuffersTestMethod]
-        public void FlatBufferBuilder_WhenAddDouble_AndDefaultValue_OffsetIsUnchanged()
-        {
-            var fbb = CreateBuffer(false);
-            var storedOffset = fbb.Offset;
-            fbb.AddDouble(0, 0, 0);
-            var endOffset = fbb.Offset;
-            Assert.AreEqual(endOffset, storedOffset);
-        }
-    }
-}
diff --git a/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBuffers.Test.csproj b/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBuffers.Test.csproj
deleted file mode 100644
index eda44c7..0000000
--- a/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBuffers.Test.csproj
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{9DB0B5E7-757E-4BD1-A5F6-279390331254}</ProjectGuid>
-    <OutputType>Exe</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>FlatBuffers.Test</RootNamespace>
-    <AssemblyName>FlatBuffers.Test</AssemblyName>
-    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup>
-    <StartupObject />
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="..\..\net\FlatBuffers\ByteBuffer.cs">
-      <Link>FlatBuffers\ByteBuffer.cs</Link>
-    </Compile>
-    <Compile Include="..\..\net\FlatBuffers\IFlatbufferObject.cs">
-      <Link>FlatBuffers\IFlatbufferObject.cs</Link>
-    </Compile>
-    <Compile Include="..\..\net\FlatBuffers\Offset.cs">
-      <Link>FlatBuffers\Offset.cs</Link>
-    </Compile>
-    <Compile Include="..\..\net\FlatBuffers\FlatBufferBuilder.cs">
-      <Link>FlatBuffers\FlatBufferBuilder.cs</Link>
-    </Compile>
-    <Compile Include="..\..\net\FlatBuffers\FlatBufferConstants.cs">
-      <Link>FlatBuffers\FlatBufferConstants.cs</Link>
-    </Compile>
-    <Compile Include="..\..\net\FlatBuffers\Struct.cs">
-      <Link>FlatBuffers\Struct.cs</Link>
-    </Compile>
-    <Compile Include="..\..\net\FlatBuffers\Table.cs">
-      <Link>FlatBuffers\Table.cs</Link>
-    </Compile>
-    <Compile Include="..\MyGame\Example\Any.cs">
-      <Link>MyGame\Example\Any.cs</Link>
-    </Compile>
-    <Compile Include="..\MyGame\Example\Color.cs">
-      <Link>MyGame\Example\Color.cs</Link>
-    </Compile>
-    <Compile Include="..\MyGame\Example\Monster.cs">
-      <Link>MyGame\Example\Monster.cs</Link>
-    </Compile>
-    <Compile Include="..\MyGame\Example\Stat.cs">
-      <Link>MyGame\Example\Stat.cs</Link>
-    </Compile>
-    <Compile Include="..\MyGame\Example\Test.cs">
-      <Link>MyGame\Example\Test.cs</Link>
-    </Compile>
-    <Compile Include="..\MyGame\Example\TestSimpleTableWithEnum.cs">
-      <Link>MyGame\Example\TestSimpleTableWithEnum.cs</Link>
-    </Compile>
-    <Compile Include="..\MyGame\Example\Vec3.cs">
-      <Link>MyGame\Example\Vec3.cs</Link>
-    </Compile>
-    <Compile Include="..\MyGame\Example\Ability.cs">
-      <Link>MyGame\Example\Ability.cs</Link>
-    </Compile>
-    <Compile Include="..\namespace_test\NamespaceA\NamespaceB\EnumInNestedNS.cs">
-      <Link>NamespaceA\NamespaceB\EnumInNestedNS.cs</Link>
-    </Compile>
-    <Compile Include="..\namespace_test\NamespaceA\NamespaceB\StructInNestedNS.cs">
-      <Link>NamespaceA\NamespaceB\StructInNestedNS.cs</Link>
-    </Compile>
-    <Compile Include="..\namespace_test\NamespaceA\NamespaceB\TableInNestedNS.cs">
-      <Link>NamespaceA\NamespaceB\TableInNestedNS.cs</Link>
-    </Compile>
-    <Compile Include="..\namespace_test\NamespaceA\TableInFirstNS.cs">
-      <Link>NamespaceA\TableInFirstNS.cs</Link>
-    </Compile>
-    <Compile Include="Assert.cs" />
-    <Compile Include="ByteBufferTests.cs" />
-    <Compile Include="FlatBufferBuilderTests.cs" />
-    <Compile Include="FlatBuffersFuzzTests.cs" />
-    <Compile Include="FlatBuffersTestClassAttribute.cs" />
-    <Compile Include="FlatBuffersTestMethodAttribute.cs" />
-    <Compile Include="FuzzTestData.cs" />
-    <Compile Include="Lcg.cs" />
-    <Compile Include="Program.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="FlatBuffersExampleTests.cs" />
-    <Compile Include="TestTable.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <Content Include="..\monsterdata_test.mon">
-      <Link>Resources\monsterdata_test.mon</Link>
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>
diff --git a/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBuffersExampleTests.cs b/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBuffersExampleTests.cs
deleted file mode 100644
index d032d7e..0000000
--- a/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBuffersExampleTests.cs
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System.IO;
-using System.Text;
-using MyGame.Example;
-
-namespace FlatBuffers.Test
-{
-    [FlatBuffersTestClass]
-    public class FlatBuffersExampleTests
-    {
-        public void RunTests()
-        {
-            CanCreateNewFlatBufferFromScratch();
-            CanReadCppGeneratedWireFile();
-            TestEnums();
-        }
-
-        [FlatBuffersTestMethod]
-        public void CanCreateNewFlatBufferFromScratch()
-        {
-            // Second, let's create a FlatBuffer from scratch in C#, and test it also.
-            // We use an initial size of 1 to exercise the reallocation algorithm,
-            // normally a size larger than the typical FlatBuffer you generate would be
-            // better for performance.
-            var fbb = new FlatBufferBuilder(1);
-
-            StringOffset[] names = { fbb.CreateString("Frodo"), fbb.CreateString("Barney"), fbb.CreateString("Wilma") };
-            Offset<Monster>[] off = new Offset<Monster>[3];
-            Monster.StartMonster(fbb);
-            Monster.AddName(fbb, names[0]);
-            off[0] = Monster.EndMonster(fbb);
-            Monster.StartMonster(fbb);
-            Monster.AddName(fbb, names[1]);
-            off[1] = Monster.EndMonster(fbb);
-            Monster.StartMonster(fbb);
-            Monster.AddName(fbb, names[2]);
-            off[2] = Monster.EndMonster(fbb);
-            var sortMons = Monster.CreateMySortedVectorOfTables(fbb, off);
-
-            // We set up the same values as monsterdata.json:
-
-            var str = fbb.CreateString("MyMonster");
-            var test1 = fbb.CreateString("test1");
-            var test2 = fbb.CreateString("test2");
-
-
-            Monster.StartInventoryVector(fbb, 5);
-            for (int i = 4; i >= 0; i--)
-            {
-                fbb.AddByte((byte)i);
-            }
-            var inv = fbb.EndVector();
-
-            var fred = fbb.CreateString("Fred");
-            Monster.StartMonster(fbb);
-            Monster.AddName(fbb, fred);
-            var mon2 = Monster.EndMonster(fbb);
-
-            Monster.StartTest4Vector(fbb, 2);
-            MyGame.Example.Test.CreateTest(fbb, (short)10, (sbyte)20);
-            MyGame.Example.Test.CreateTest(fbb, (short)30, (sbyte)40);
-            var test4 = fbb.EndVector();
-
-            Monster.StartTestarrayofstringVector(fbb, 2);
-            fbb.AddOffset(test2.Value);
-            fbb.AddOffset(test1.Value);
-            var testArrayOfString = fbb.EndVector();
-
-            Monster.StartMonster(fbb);
-            Monster.AddPos(fbb, Vec3.CreateVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0,
-                                                     Color.Green, (short)5, (sbyte)6));
-            Monster.AddHp(fbb, (short)80);
-            Monster.AddName(fbb, str);
-            Monster.AddInventory(fbb, inv);
-            Monster.AddTestType(fbb, Any.Monster);
-            Monster.AddTest(fbb, mon2.Value);
-            Monster.AddTest4(fbb, test4);
-            Monster.AddTestarrayofstring(fbb, testArrayOfString);
-            Monster.AddTestbool(fbb, false);
-            Monster.AddTestarrayoftables(fbb, sortMons);
-            var mon = Monster.EndMonster(fbb);
-
-            Monster.FinishMonsterBuffer(fbb, mon);
-
-
-            // Dump to output directory so we can inspect later, if needed
-            using (var ms = new MemoryStream(fbb.DataBuffer.Data, fbb.DataBuffer.Position, fbb.Offset))
-            {
-                var data = ms.ToArray();
-                File.WriteAllBytes(@"Resources/monsterdata_cstest.mon",data);
-            }
-
-            // Now assert the buffer
-            TestBuffer(fbb.DataBuffer);
-
-            //Attempt to mutate Monster fields and check whether the buffer has been mutated properly
-            // revert to original values after testing
-            Monster monster = Monster.GetRootAsMonster(fbb.DataBuffer);
-
-            // mana is optional and does not exist in the buffer so the mutation should fail
-            // the mana field should retain its default value
-            Assert.AreEqual(monster.MutateMana((short)10), false);
-            Assert.AreEqual(monster.Mana, (short)150);
-
-            // Accessing a vector of sorted by the key tables
-            Assert.AreEqual(monster.Testarrayoftables(0).Value.Name, "Barney");
-            Assert.AreEqual(monster.Testarrayoftables(1).Value.Name, "Frodo");
-            Assert.AreEqual(monster.Testarrayoftables(2).Value.Name, "Wilma");
-
-            // Example of searching for a table by the key
-            Assert.IsTrue(Monster.LookupByKey(sortMons, "Frodo", fbb.DataBuffer) != null);
-            Assert.IsTrue(Monster.LookupByKey(sortMons, "Barney", fbb.DataBuffer) != null);
-            Assert.IsTrue(Monster.LookupByKey(sortMons, "Wilma", fbb.DataBuffer)!= null);
-
-            // testType is an existing field and mutating it should succeed
-            Assert.AreEqual(monster.TestType, Any.Monster);
-            Assert.AreEqual(monster.MutateTestType(Any.NONE), true);
-            Assert.AreEqual(monster.TestType, Any.NONE);
-            Assert.AreEqual(monster.MutateTestType(Any.Monster), true);
-            Assert.AreEqual(monster.TestType, Any.Monster);
-
-            //mutate the inventory vector
-            Assert.AreEqual(monster.MutateInventory(0, 1), true);
-            Assert.AreEqual(monster.MutateInventory(1, 2), true);
-            Assert.AreEqual(monster.MutateInventory(2, 3), true);
-            Assert.AreEqual(monster.MutateInventory(3, 4), true);
-            Assert.AreEqual(monster.MutateInventory(4, 5), true);
-
-            for (int i = 0; i < monster.InventoryLength; i++)
-            {
-                Assert.AreEqual(monster.Inventory(i), i + 1);
-            }
-
-            //reverse mutation
-            Assert.AreEqual(monster.MutateInventory(0, 0), true);
-            Assert.AreEqual(monster.MutateInventory(1, 1), true);
-            Assert.AreEqual(monster.MutateInventory(2, 2), true);
-            Assert.AreEqual(monster.MutateInventory(3, 3), true);
-            Assert.AreEqual(monster.MutateInventory(4, 4), true);
-
-            // get a struct field and edit one of its fields
-            Vec3 pos = (Vec3)monster.Pos;
-            Assert.AreEqual(pos.X, 1.0f);
-            pos.MutateX(55.0f);
-            Assert.AreEqual(pos.X, 55.0f);
-            pos.MutateX(1.0f);
-            Assert.AreEqual(pos.X, 1.0f);
-
-            TestBuffer(fbb.DataBuffer);
-        }
-
-        private void TestBuffer(ByteBuffer bb)
-        {
-            var monster = Monster.GetRootAsMonster(bb);
-
-            Assert.AreEqual(80, monster.Hp);
-            Assert.AreEqual(150, monster.Mana);
-            Assert.AreEqual("MyMonster", monster.Name);
-
-            var pos = monster.Pos.Value;
-            Assert.AreEqual(1.0f, pos.X);
-            Assert.AreEqual(2.0f, pos.Y);
-            Assert.AreEqual(3.0f, pos.Z);
-
-            Assert.AreEqual(3.0f, pos.Test1);
-            Assert.AreEqual(Color.Green, pos.Test2);
-            var t = (MyGame.Example.Test)pos.Test3;
-            Assert.AreEqual((short)5, t.A);
-            Assert.AreEqual((sbyte)6, t.B);
-
-            Assert.AreEqual(Any.Monster, monster.TestType);
-
-            var monster2 = monster.Test<Monster>().Value;
-            Assert.AreEqual("Fred", monster2.Name);
-
-
-            Assert.AreEqual(5, monster.InventoryLength);
-            var invsum = 0;
-            for (var i = 0; i < monster.InventoryLength; i++)
-            {
-                invsum += monster.Inventory(i);
-            }
-            Assert.AreEqual(10, invsum);
-
-            var test0 = monster.Test4(0).Value;
-            var test1 = monster.Test4(1).Value;
-            Assert.AreEqual(2, monster.Test4Length);
-
-            Assert.AreEqual(100, test0.A + test0.B + test1.A + test1.B);
-
-            Assert.AreEqual(2, monster.TestarrayofstringLength);
-            Assert.AreEqual("test1", monster.Testarrayofstring(0));
-            Assert.AreEqual("test2", monster.Testarrayofstring(1));
-
-            Assert.AreEqual(false, monster.Testbool);
-
-            var nameBytes = monster.GetNameBytes().Value;
-            Assert.AreEqual("MyMonster", Encoding.UTF8.GetString(nameBytes.Array, nameBytes.Offset, nameBytes.Count));
-
-            if (0 == monster.TestarrayofboolsLength)
-            {
-                Assert.IsFalse(monster.GetTestarrayofboolsBytes().HasValue);
-            }
-            else
-            {
-                Assert.IsTrue(monster.GetTestarrayofboolsBytes().HasValue);
-            }
-        }
-
-        [FlatBuffersTestMethod]
-        public void CanReadCppGeneratedWireFile()
-        {
-            var data = File.ReadAllBytes(@"Resources/monsterdata_test.mon");
-            var bb = new ByteBuffer(data);
-            TestBuffer(bb);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestEnums()
-        {
-            Assert.AreEqual("Red", Color.Red.ToString());
-            Assert.AreEqual("Blue", Color.Blue.ToString());
-            Assert.AreEqual("NONE", Any.NONE.ToString());
-            Assert.AreEqual("Monster", Any.Monster.ToString());
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestNestedFlatBuffer()
-        {
-            const string nestedMonsterName = "NestedMonsterName";
-            const short nestedMonsterHp = 600;
-            const short nestedMonsterMana = 1024;
-            // Create nested buffer as a Monster type
-            var fbb1 = new FlatBufferBuilder(16);
-            var str1 = fbb1.CreateString(nestedMonsterName);
-            Monster.StartMonster(fbb1);
-            Monster.AddName(fbb1, str1);
-            Monster.AddHp(fbb1, nestedMonsterHp);
-            Monster.AddMana(fbb1, nestedMonsterMana);
-            var monster1 = Monster.EndMonster(fbb1);
-            Monster.FinishMonsterBuffer(fbb1, monster1);
-            var fbb1Bytes = fbb1.SizedByteArray();
-            fbb1 = null;
-
-            // Create a Monster which has the first buffer as a nested buffer
-            var fbb2 = new FlatBufferBuilder(16);
-            var str2 = fbb2.CreateString("My Monster");
-            var nestedBuffer = Monster.CreateTestnestedflatbufferVector(fbb2, fbb1Bytes);
-            Monster.StartMonster(fbb2);
-            Monster.AddName(fbb2, str2);
-            Monster.AddHp(fbb2, 50);
-            Monster.AddMana(fbb2, 32);
-            Monster.AddTestnestedflatbuffer(fbb2, nestedBuffer);
-            var monster = Monster.EndMonster(fbb2);
-            Monster.FinishMonsterBuffer(fbb2, monster);
-
-            // Now test the data extracted from the nested buffer
-            var mons = Monster.GetRootAsMonster(fbb2.DataBuffer);
-            var nestedMonster = mons.GetTestnestedflatbufferAsMonster().Value;
-
-            Assert.AreEqual(nestedMonsterMana, nestedMonster.Mana);
-            Assert.AreEqual(nestedMonsterHp, nestedMonster.Hp);
-            Assert.AreEqual(nestedMonsterName, nestedMonster.Name);
-        }
-    }
-}
diff --git a/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBuffersFuzzTests.cs b/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBuffersFuzzTests.cs
deleted file mode 100644
index e8182d7..0000000
--- a/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBuffersFuzzTests.cs
+++ /dev/null
@@ -1,742 +0,0 @@
-/*
- * Copyright 2015 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-
-namespace FlatBuffers.Test
-{
-    [FlatBuffersTestClass]
-    public class FlatBuffersFuzzTests
-    {
-        private readonly Lcg _lcg = new Lcg();
-
-        [FlatBuffersTestMethod]
-        public void TestObjects()
-        {
-            CheckObjects(11, 100);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestNumbers()
-        {
-            var builder = new FlatBufferBuilder(1);
-            Assert.ArrayEqual(new byte[] { 0 }, builder.DataBuffer.Data);
-            builder.AddBool(true);
-            Assert.ArrayEqual(new byte[] { 1 }, builder.DataBuffer.Data);
-            builder.AddSbyte(-127);
-            Assert.ArrayEqual(new byte[] { 129, 1 }, builder.DataBuffer.Data);
-            builder.AddByte(255);
-            Assert.ArrayEqual(new byte[] { 0, 255, 129, 1 }, builder.DataBuffer.Data); // First pad
-            builder.AddShort(-32222);
-            Assert.ArrayEqual(new byte[] { 0, 0, 0x22, 0x82, 0, 255, 129, 1 }, builder.DataBuffer.Data); // Second pad
-            builder.AddUshort(0xFEEE);
-            Assert.ArrayEqual(new byte[] { 0xEE, 0xFE, 0x22, 0x82, 0, 255, 129, 1 }, builder.DataBuffer.Data); // no pad
-            builder.AddInt(-53687092);
-            Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 204, 204, 204, 252, 0xEE, 0xFE, 0x22, 0x82, 0, 255, 129, 1 }, builder.DataBuffer.Data); // third pad
-            builder.AddUint(0x98765432);
-            Assert.ArrayEqual(new byte[] { 0x32, 0x54, 0x76, 0x98, 204, 204, 204, 252, 0xEE, 0xFE, 0x22, 0x82, 0, 255, 129, 1 }, builder.DataBuffer.Data); // no pad
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestNumbers64()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.AddUlong(0x1122334455667788);
-            Assert.ArrayEqual(new byte[] { 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11 }, builder.DataBuffer.Data);
-
-            builder = new FlatBufferBuilder(1);
-            builder.AddLong(0x1122334455667788);
-            Assert.ArrayEqual(new byte[] { 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11 }, builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestVector_1xUInt8()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartVector(sizeof(byte), 1, 1);
-            Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, builder.DataBuffer.Data);
-            builder.AddByte(1);
-            Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 1, 0, 0, 0 }, builder.DataBuffer.Data);
-            builder.EndVector();
-            Assert.ArrayEqual(new byte[] { 1, 0, 0, 0, 1, 0, 0, 0 }, builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestVector_2xUint8()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartVector(sizeof(byte), 2, 1);
-            Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, builder.DataBuffer.Data);
-            builder.AddByte(1);
-            Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 0, 1, 0, 0 }, builder.DataBuffer.Data);
-            builder.AddByte(2);
-            Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 2, 1, 0, 0 }, builder.DataBuffer.Data);
-            builder.EndVector();
-            Assert.ArrayEqual(new byte[] { 2, 0, 0, 0, 2, 1, 0, 0 }, builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestVector_1xUInt16()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartVector(sizeof(ushort), 1, 1);
-            Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, builder.DataBuffer.Data);
-            builder.AddUshort(1);
-            Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 1, 0, 0, 0 }, builder.DataBuffer.Data);
-            builder.EndVector();
-            Assert.ArrayEqual(new byte[] { 1, 0, 0, 0, 1, 0, 0, 0 }, builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestVector_2xUInt16()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartVector(sizeof(ushort), 2, 1);
-            Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, builder.DataBuffer.Data);
-            builder.AddUshort(0xABCD);
-            Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 0, 0, 0xCD, 0xAB }, builder.DataBuffer.Data);
-            builder.AddUshort(0xDCBA);
-            Assert.ArrayEqual(new byte[] { 0, 0, 0, 0, 0xBA, 0xDC, 0xCD, 0xAB }, builder.DataBuffer.Data);
-            builder.EndVector();
-            Assert.ArrayEqual(new byte[] { 2, 0, 0, 0, 0xBA, 0xDC, 0xCD, 0xAB }, builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestCreateAsciiString()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.CreateString("foo");
-            Assert.ArrayEqual(new byte[] { 3, 0, 0, 0, (byte)'f', (byte)'o', (byte)'o', 0 }, builder.DataBuffer.Data);
-
-            builder.CreateString("moop");
-            Assert.ArrayEqual(new byte[]
-            {
-                0, 0, 0, 0,
-                0, 0, 0, 0,
-                0, 0, 0, 0,  // Padding to 32 bytes
-                4, 0, 0, 0,
-                (byte)'m', (byte)'o', (byte)'o', (byte)'p',
-                0, 0, 0, 0, // zero terminator with 3 byte pad
-                3, 0, 0, 0,
-                (byte)'f', (byte)'o', (byte)'o', 0
-            }, builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestCreateArbitarytring()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.CreateString("\x01\x02\x03");
-            Assert.ArrayEqual(new byte[]
-            {
-                3, 0, 0, 0,
-                0x01, 0x02, 0x03, 0
-            }, builder.DataBuffer.Data); // No padding
-            builder.CreateString("\x04\x05\x06\x07");
-            Assert.ArrayEqual(new byte[]
-            {
-                0, 0, 0, 0,
-                0, 0, 0, 0,
-                0, 0, 0, 0,  // Padding to 32 bytes
-                4, 0, 0, 0,
-                0x04, 0x05, 0x06, 0x07,
-                0, 0, 0, 0, // zero terminator with 3 byte pad
-                3, 0, 0, 0,
-                0x01, 0x02, 0x03, 0
-            }, builder.DataBuffer.Data); // No padding
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestEmptyVTable()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartObject(0);
-            Assert.ArrayEqual(new byte[] { 0 }, builder.DataBuffer.Data);
-            builder.EndObject();
-            Assert.ArrayEqual(new byte[]
-            {
-                4, 0, 4, 0,
-                4, 0, 0, 0
-            },
-                builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestVTableWithOneBool()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartObject(1);
-            Assert.ArrayEqual(new byte[] { 0 }, builder.DataBuffer.Data);
-            builder.AddBool(0, true, false);
-            builder.EndObject();
-            Assert.ArrayEqual(new byte[]
-            {
-                0, 0, // padding to 16 bytes
-                6, 0, // vtable bytes
-                8, 0, // object length inc vtable offset
-                7, 0, // start of bool value
-                6, 0, 0, 0, // int32 offset for start of vtable
-                0, 0, 0, // padding
-                1, // value 0
-            },
-                builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestVTableWithOneBool_DefaultValue()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartObject(1);
-            Assert.ArrayEqual(new byte[] { 0 }, builder.DataBuffer.Data);
-            builder.AddBool(0, false, false);
-            builder.EndObject();
-            Assert.ArrayEqual(new byte[]
-            {
-                0, 0, 0, 0, 0, 0, // padding to 16 bytes
-                6, 0, // vtable bytes
-                4, 0, // end of object from here
-                0, 0, // entry 0 is empty (default value)
-                6, 0, 0, 0, // int32 offset for start of vtable
-            },
-                builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestVTableWithOneInt16()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartObject(1);
-            Assert.ArrayEqual(new byte[] { 0 }, builder.DataBuffer.Data);
-            builder.AddShort(0, 0x789A, 0);
-            builder.EndObject();
-            Assert.ArrayEqual(new byte[]
-            {
-                0, 0, // padding to 16 bytes
-                6, 0, // vtable bytes
-                8, 0, // object length inc vtable offset
-                6, 0, // start of int16 value
-                6, 0, 0, 0, // int32 offset for start of vtable
-                0, 0, // padding
-                0x9A, 0x78, //value 0
-            },
-                builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestVTableWithTwoInt16()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartObject(2);
-            Assert.ArrayEqual(new byte[] { 0 }, builder.DataBuffer.Data);
-            builder.AddShort(0, 0x3456, 0);
-            builder.AddShort(1, 0x789A, 0);
-            builder.EndObject();
-            Assert.ArrayEqual(new byte[]
-            {
-                8, 0, // vtable bytes
-                8, 0, // object length inc vtable offset
-                6, 0, // start of int16 value 0
-                4, 0, // start of int16 value 1
-                8, 0, 0, 0, // int32 offset for start of vtable
-                0x9A, 0x78, // value 1
-                0x56, 0x34, // value 0
-            },
-                builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestVTableWithInt16AndBool()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartObject(2);
-            Assert.ArrayEqual(new byte[] { 0 }, builder.DataBuffer.Data);
-            builder.AddShort(0, 0x3456, 0);
-            builder.AddBool(1, true, false);
-            builder.EndObject();
-            Assert.ArrayEqual(new byte[]
-            {
-                8, 0, // vtable bytes
-                8, 0, // object length inc vtable offset
-                6, 0, // start of int16 value 0
-                5, 0, // start of bool value 1
-                8, 0, 0, 0, // int32 offset for start of vtable
-                0, 1, // padding + value 1
-                0x56, 0x34, // value 0
-            },
-                builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestVTableWithEmptyVector()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartVector(sizeof(byte), 0, 1);
-            var vecEnd = builder.EndVector();
-
-            builder.StartObject(1);
-
-            builder.AddOffset(0, vecEnd.Value, 0);
-            builder.EndObject();
-            Assert.ArrayEqual(new byte[]
-            {
-                0, 0, 0, 0,
-                0, 0, 0, 0,
-                0, 0, 0, 0,
-                0, 0,       // Padding to 32 bytes
-                6, 0, // vtable bytes
-                8, 0, // object length inc vtable offset
-                4, 0, // start of vector offset value 0
-                6, 0, 0, 0, // int32 offset for start of vtable
-                4, 0, 0, 0,
-                0, 0, 0, 0,
-            },
-                builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestVTableWithEmptyVectorAndScalars()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartVector(sizeof(byte), 0, 1);
-            var vecEnd = builder.EndVector();
-
-            builder.StartObject(2);
-            builder.AddShort(0, 55, 0);
-            builder.AddOffset(1, vecEnd.Value, 0);
-            builder.EndObject();
-            Assert.ArrayEqual(new byte[]
-            {
-                0, 0, 0, 0,
-                0, 0, 0, 0, // Padding to 32 bytes
-                8, 0, // vtable bytes
-                12, 0, // object length inc vtable offset
-                10, 0,     // offset to int16 value 0
-                4, 0, // start of vector offset value 1
-                8, 0, 0, 0, // int32 offset for start of vtable
-                8, 0, 0, 0, // value 1
-                0, 0, 55, 0, // value 0
-                0, 0, 0, 0, // length of vector (not in sctruc)
-            },
-                builder.DataBuffer.Data);
-        }
-
-
-        [FlatBuffersTestMethod]
-        public void TestVTableWith_1xInt16_and_Vector_or_2xInt16()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartVector(sizeof(short), 2, 1);
-            builder.AddShort(0x1234);
-            builder.AddShort(0x5678);
-            var vecEnd = builder.EndVector();
-
-            builder.StartObject(2);
-            builder.AddOffset(1, vecEnd.Value, 0);
-            builder.AddShort(0, 55, 0);
-            builder.EndObject();
-            Assert.ArrayEqual(new byte[]
-            {
-                0, 0, 0, 0, // Padding to 32 bytes
-                8, 0, // vtable bytes
-                12, 0, // object length
-                6, 0,     // start of value 0 from end of vtable
-                8, 0,     // start of value 1 from end of buffer
-                8, 0, 0, 0, // int32 offset for start of vtable
-                0, 0, 55, 0,    // padding + value 0
-                4, 0, 0, 0, // position of vector from here
-                2, 0, 0, 0, // length of vector
-                0x78, 0x56,       // vector value 0
-                0x34, 0x12,       // vector value 1
-            },
-                builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestVTableWithAStruct_of_int8_int16_int32()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartObject(1);
-            builder.Prep(4+4+4, 0);
-            builder.AddSbyte(55);
-            builder.Pad(3);
-            builder.AddShort(0x1234);
-            builder.Pad(2);
-            builder.AddInt(0x12345678);
-            var structStart = builder.Offset;
-            builder.AddStruct(0, structStart, 0);
-            builder.EndObject();
-            Assert.ArrayEqual(new byte[]
-            {
-                0, 0, 0, 0,
-                0, 0, 0, 0,
-                0, 0, // Padding to 32 bytes
-                6, 0, // vtable bytes
-                16, 0, // object length
-                4, 0,     // start of struct from here
-                6, 0, 0, 0, // int32 offset for start of vtable
-                0x78, 0x56, 0x34, 0x12,  // struct value 2
-                0x00, 0x00, 0x34, 0x12, // struct value 1
-                0x00, 0x00, 0x00, 55, // struct value 0
-            },
-                builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestVTableWithAVectorOf_2xStructOf_2xInt8()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartVector(sizeof(byte)*2, 2, 1);
-            builder.AddByte(33);
-            builder.AddByte(44);
-            builder.AddByte(55);
-            builder.AddByte(66);
-            var vecEnd = builder.EndVector();
-
-            builder.StartObject(1);
-            builder.AddOffset(0, vecEnd.Value, 0);
-            builder.EndObject();
-
-            Assert.ArrayEqual(new byte[]
-            {
-                0, 0, 0, 0,
-                0, 0, 0, 0,
-                0, 0, // Padding to 32 bytes
-                6, 0, // vtable bytes
-                8, 0, // object length
-                4, 0,     // offset of vector offset
-                6, 0, 0, 0, // int32 offset for start of vtable
-                4, 0, 0, 0, // Vector start offset
-                2, 0, 0, 0, // Vector len
-                66, // vector 1, 1
-                55, // vector 1, 0
-                44, // vector 0, 1
-                33, // vector 0, 0
-            },
-                builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestVTableWithSomeElements()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartObject(2);
-            builder.AddByte(0, 33, 0);
-            builder.AddShort(1, 66, 0);
-            var off = builder.EndObject();
-            builder.Finish(off);
-
-            Assert.ArrayEqual(new byte[]
-            {
-                0, 0, 0, 0,
-                0, 0, 0, 0,
-                0, 0, 0, 0, //Padding to 32 bytes
-                12, 0, 0, 0,     // root of table, pointing to vtable offset
-                8, 0, // vtable bytes
-                8, 0, // object length
-                7, 0, // start of value 0
-                4, 0, // start of value 1
-                8, 0, 0, 0, // int32 offset for start of vtable
-                66, 0, // value 1
-                0, 33, // value 0
-
-            },
-                builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestTwoFinishTable()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartObject(2);
-            builder.AddByte(0, 33, 0);
-            builder.AddByte(1, 44, 0);
-            var off0 = builder.EndObject();
-            builder.Finish(off0);
-
-            builder.StartObject(3);
-            builder.AddByte(0, 55, 0);
-            builder.AddByte(1, 66, 0);
-            builder.AddByte(2, 77, 0);
-            var off1 = builder.EndObject();
-            builder.Finish(off1);
-
-            Assert.ArrayEqual(new byte[]
-            {
-                0, 0, 0, 0,
-                0, 0, 0, 0,
-                0, 0, 0, 0,
-                0, 0, 0, 0,
-                0, 0, 0, 0,       // padding to 64 bytes
-                16, 0, 0, 0,     // root of table, pointing to vtable offset (obj1)
-                0, 0, // padding
-
-                10, 0, // vtable bytes
-                8, 0, // object length
-                7, 0, // start of value 0
-                6, 0, // start of value 1
-                5, 0, // start of value 2
-                10, 0, 0, 0, // int32 offset for start of vtable
-                0, // pad
-                77, // values 2, 1, 0
-                66,
-                55,
-
-                12, 0, 0, 0,     // root of table, pointing to vtable offset (obj0)
-                8, 0, // vtable bytes
-                8, 0, // object length
-                7, 0, // start of value 0
-                6, 0, // start of value 1
-                8, 0, 0, 0, // int32 offset for start of vtable
-                0, 0, // pad
-                44, // value 1, 0
-                33,
-            },
-                builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestBunchOfBools()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartObject(8);
-            for (var i = 0; i < 8; i++)
-            {
-                builder.AddBool(i, true, false);
-            }
-            var off = builder.EndObject();
-            builder.Finish(off);
-
-            Assert.ArrayEqual(new byte[]
-            {
-                0, 0, 0, 0,
-                0, 0, 0, 0,
-                0, 0, 0, 0,
-                0, 0, 0, 0,
-                0, 0, 0, 0,
-                0, 0, 0, 0,
-                0, 0, 0, 0,       // padding to 64 bytes
-
-                24, 0, 0, 0,     // root of table, pointing to vtable offset (obj0)
-                20, 0, // vtable bytes
-                12, 0, // object length
-                11, 0, // start of value 0
-                10, 0, // start of value 1
-                9, 0, // start of value 2
-                8, 0, // start of value 3
-                7, 0, // start of value 4
-                6, 0, // start of value 5
-                5, 0, // start of value 6
-                4, 0, // start of value 7
-
-                20, 0, 0, 0, // int32 offset for start of vtable
-
-                1, 1, 1, 1,  // values
-                1, 1, 1, 1,
-
-            },
-                builder.DataBuffer.Data);
-        }
-
-        [FlatBuffersTestMethod]
-        public void TestWithFloat()
-        {
-            var builder = new FlatBufferBuilder(1);
-            builder.StartObject(1);
-            builder.AddFloat(0, 1, 0);
-            builder.EndObject();
-
-
-            Assert.ArrayEqual(new byte[]
-            {
-                0, 0,
-                6, 0, // vtable bytes
-                8, 0, // object length
-                4, 0, // start of value 0
-                6, 0, 0, 0, // int32 offset for start of vtable
-                0, 0, 128, 63,  // value
-
-            },
-                builder.DataBuffer.Data);
-        }
-
-        private void CheckObjects(int fieldCount, int objectCount)
-        {
-            _lcg.Reset();
-
-            const int testValuesMax = 11;
-
-            var builder = new FlatBufferBuilder(1);
-
-            var objects = new int[objectCount];
-
-            for (var i = 0; i < objectCount; ++i)
-            {
-                builder.StartObject(fieldCount);
-
-                for (var j = 0; j < fieldCount; ++j)
-                {
-                    var fieldType = _lcg.Next()%testValuesMax;
-
-                    switch (fieldType)
-                    {
-                        case 0:
-                        {
-                            builder.AddBool(j, FuzzTestData.BoolValue, false);
-                            break;
-                        }
-                        case 1:
-                        {
-                            builder.AddSbyte(j, FuzzTestData.Int8Value, 0);
-                            break;
-                        }
-                        case 2:
-                        {
-                            builder.AddByte(j, FuzzTestData.UInt8Value, 0);
-                            break;
-                        }
-                        case 3:
-                        {
-                            builder.AddShort(j, FuzzTestData.Int16Value, 0);
-                            break;
-                        }
-                        case 4:
-                        {
-                            builder.AddUshort(j, FuzzTestData.UInt16Value, 0);
-                            break;
-                        }
-                        case 5:
-                        {
-                            builder.AddInt(j, FuzzTestData.Int32Value, 0);
-                            break;
-                        }
-                        case 6:
-                        {
-                            builder.AddUint(j, FuzzTestData.UInt32Value, 0);
-                            break;
-                        }
-                        case 7:
-                        {
-                            builder.AddLong(j, FuzzTestData.Int64Value, 0);
-                            break;
-                        }
-                        case 8:
-                        {
-                            builder.AddUlong(j, FuzzTestData.UInt64Value, 0);
-                            break;
-                        }
-                        case 9:
-                        {
-                            builder.AddFloat(j, FuzzTestData.Float32Value, 0);
-                            break;
-                        }
-                        case 10:
-                        {
-                            builder.AddDouble(j, FuzzTestData.Float64Value, 0);
-                            break;
-                        }
-                        default:
-                            throw new Exception("Unreachable");
-                    }
-
-                }
-
-                var offset = builder.EndObject();
-
-                // Store the object offset
-                objects[i] = offset;
-            }
-
-            _lcg.Reset();
-
-            // Test all objects are readable and return expected values...
-            for (var i = 0; i < objectCount; ++i)
-            {
-                var table = new TestTable(builder.DataBuffer, builder.DataBuffer.Length - objects[i]);
-
-                for (var j = 0; j < fieldCount; ++j)
-                {
-                    var fieldType = _lcg.Next() % testValuesMax;
-                    var fc = 2 + j; // 2 == VtableMetadataFields
-                    var f = fc * 2;
-
-                    switch (fieldType)
-                    {
-                        case 0:
-                        {
-                            Assert.AreEqual(FuzzTestData.BoolValue, table.GetSlot(f, false));
-                            break;
-                        }
-                        case 1:
-                        {
-                            Assert.AreEqual(FuzzTestData.Int8Value, table.GetSlot(f, (sbyte)0));
-                            break;
-                        }
-                        case 2:
-                        {
-                            Assert.AreEqual(FuzzTestData.UInt8Value, table.GetSlot(f, (byte)0));
-                            break;
-                        }
-                        case 3:
-                        {
-                            Assert.AreEqual(FuzzTestData.Int16Value, table.GetSlot(f, (short)0));
-                            break;
-                        }
-                        case 4:
-                        {
-                            Assert.AreEqual(FuzzTestData.UInt16Value, table.GetSlot(f, (ushort)0));
-                            break;
-                        }
-                        case 5:
-                        {
-                            Assert.AreEqual(FuzzTestData.Int32Value, table.GetSlot(f, (int)0));
-                            break;
-                        }
-                        case 6:
-                        {
-                            Assert.AreEqual(FuzzTestData.UInt32Value, table.GetSlot(f, (uint)0));
-                            break;
-                        }
-                        case 7:
-                        {
-                            Assert.AreEqual(FuzzTestData.Int64Value, table.GetSlot(f, (long)0));
-                            break;
-                        }
-                        case 8:
-                        {
-                            Assert.AreEqual(FuzzTestData.UInt64Value, table.GetSlot(f, (ulong)0));
-                            break;
-                        }
-                        case 9:
-                        {
-                            Assert.AreEqual(FuzzTestData.Float32Value, table.GetSlot(f, (float)0));
-                            break;
-                        }
-                        case 10:
-                        {
-                            Assert.AreEqual(FuzzTestData.Float64Value, table.GetSlot(f, (double)0));
-                            break;
-                        }
-                        default:
-                            throw new Exception("Unreachable");
-                    }
-
-                }
-
-            }
-
-        }
-    }
-}
diff --git a/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBuffersTestClassAttribute.cs b/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBuffersTestClassAttribute.cs
deleted file mode 100644
index f31e38b..0000000
--- a/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBuffersTestClassAttribute.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace FlatBuffers.Test
-{
-    [AttributeUsage(AttributeTargets.Class)]
-    public class FlatBuffersTestClassAttribute : Attribute
-    {
-    }
-}
diff --git a/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBuffersTestMethodAttribute.cs b/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBuffersTestMethodAttribute.cs
deleted file mode 100644
index 989dae5..0000000
--- a/third_party/flatbuffers/tests/FlatBuffers.Test/FlatBuffersTestMethodAttribute.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- using System;
-
-namespace FlatBuffers.Test
-{
-    [AttributeUsage(AttributeTargets.Method)]
-    public class FlatBuffersTestMethodAttribute : Attribute
-    {
-    }
-}
\ No newline at end of file
diff --git a/third_party/flatbuffers/tests/FlatBuffers.Test/FuzzTestData.cs b/third_party/flatbuffers/tests/FlatBuffers.Test/FuzzTestData.cs
deleted file mode 100644
index 119e44e..0000000
--- a/third_party/flatbuffers/tests/FlatBuffers.Test/FuzzTestData.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-
-namespace FlatBuffers.Test
-{
-    internal static class FuzzTestData
-    {
-        private static readonly byte[] _overflowInt32 = new byte[] {0x83, 0x33, 0x33, 0x33};
-        private static readonly byte[] _overflowInt64 = new byte[] { 0x84, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 };
-
-        public static readonly bool BoolValue = true;
-        public static readonly  sbyte Int8Value = -127;        // 0x81
-        public static readonly  byte UInt8Value = 255;         // 0xFF
-        public static readonly  short Int16Value = -32222;     // 0x8222;
-        public static readonly  ushort UInt16Value = 65262;      // 0xFEEE
-        public static readonly int Int32Value = BitConverter.ToInt32(_overflowInt32, 0);
-        public static readonly uint UInt32Value = 0xFDDDDDDD;
-        public static readonly long Int64Value = BitConverter.ToInt64(_overflowInt64, 0);
-        public static readonly ulong UInt64Value = 0xFCCCCCCCCCCCCCCC;
-        public static readonly float Float32Value = 3.14159f;
-        public static readonly double Float64Value = 3.14159265359;
-    }
-}
\ No newline at end of file
diff --git a/third_party/flatbuffers/tests/FlatBuffers.Test/Lcg.cs b/third_party/flatbuffers/tests/FlatBuffers.Test/Lcg.cs
deleted file mode 100644
index c329ed8..0000000
--- a/third_party/flatbuffers/tests/FlatBuffers.Test/Lcg.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace FlatBuffers.Test
-{
-    /// <summary>
-    /// Lcg Pseudo RNG
-    /// </summary>
-    internal sealed class Lcg
-    {
-        private const uint InitialValue = 10000;
-        private uint _state;
-
-        public Lcg()
-        {
-            _state = InitialValue;
-        }
-
-        public uint Next()
-        {
-            return (_state = 69069 * _state + 362437);
-        }
-
-        public void Reset()
-        {
-            _state = InitialValue;
-        }
-    }
-}
\ No newline at end of file
diff --git a/third_party/flatbuffers/tests/FlatBuffers.Test/Program.cs b/third_party/flatbuffers/tests/FlatBuffers.Test/Program.cs
deleted file mode 100644
index f8cec4e..0000000
--- a/third_party/flatbuffers/tests/FlatBuffers.Test/Program.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-
-namespace FlatBuffers.Test
-{
-    static class Program
-    {
-        public static int Main(string[] args)
-        {
-            var testResults = new List<bool>();
-
-            var testClasses = Assembly.GetExecutingAssembly().GetExportedTypes()
-                .Where(t => t.IsClass && t.GetCustomAttributes(typeof (FlatBuffersTestClassAttribute), false).Length > 0);
-
-            foreach (var testClass in testClasses)
-            {
-                var methods = testClass.GetMethods(BindingFlags.Public |
-                                                         BindingFlags.Instance)
-                          .Where(m => m.GetCustomAttributes(typeof(FlatBuffersTestMethodAttribute), false).Length > 0);
-
-                var inst = Activator.CreateInstance(testClass);
-
-                foreach (var method in methods)
-                {
-                    try
-                    {
-                        method.Invoke(inst, new object[] { });
-                        testResults.Add(true);
-                    }
-                    catch (Exception ex)
-                    {
-                        Console.WriteLine("{0}: FAILED when invoking {1} with error {2}",
-                            testClass.Name ,method.Name, ex.GetBaseException());
-                        testResults.Add(false);
-                    }
-                }
-            }
-
-            var failedCount = testResults.Count(i => i == false);
-
-            Console.WriteLine("{0} tests run, {1} failed", testResults.Count, failedCount);
-
-            if (failedCount > 0)
-            {
-                return -1;
-            }
-            return 0;
-        }
-    }
-}
diff --git a/third_party/flatbuffers/tests/FlatBuffers.Test/Properties/AssemblyInfo.cs b/third_party/flatbuffers/tests/FlatBuffers.Test/Properties/AssemblyInfo.cs
deleted file mode 100644
index 2e33f08..0000000
--- a/third_party/flatbuffers/tests/FlatBuffers.Test/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("FlatBuffers.Test")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("FlatBuffers.Test")]
-[assembly: AssemblyCopyright("Copyright (c) 2014  Google Inc")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components.  If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("a1d58a51-3e74-4ae9-aac7-5a399c9eed1a")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/third_party/flatbuffers/tests/FlatBuffers.Test/Resources/monsterdata_test.mon b/third_party/flatbuffers/tests/FlatBuffers.Test/Resources/monsterdata_test.mon
deleted file mode 100644
index 2bf6d15..0000000
--- a/third_party/flatbuffers/tests/FlatBuffers.Test/Resources/monsterdata_test.mon
+++ /dev/null
Binary files differ
diff --git a/third_party/flatbuffers/tests/FlatBuffers.Test/TestTable.cs b/third_party/flatbuffers/tests/FlatBuffers.Test/TestTable.cs
deleted file mode 100644
index 2b506b6..0000000
--- a/third_party/flatbuffers/tests/FlatBuffers.Test/TestTable.cs
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace FlatBuffers.Test
-{
-    /// <summary>
-    /// A test Table object that gives easy access to the slot data
-    /// </summary>
-    internal struct TestTable
-    {
-        Table t;
-
-        public TestTable(ByteBuffer bb, int pos)
-        {
-            t.bb = bb;
-            t.bb_pos = pos;
-        }
-
-        public bool GetSlot(int slot, bool def)
-        {
-            var off = t.__offset(slot);
-
-            if (off == 0)
-            {
-                return def;
-            }
-            return t.bb.GetSbyte(t.bb_pos + off) != 0;
-        }
-
-        public sbyte GetSlot(int slot, sbyte def)
-        {
-            var off = t.__offset(slot);
-
-            if (off == 0)
-            {
-                return def;
-            }
-            return t.bb.GetSbyte(t.bb_pos + off);
-        }
-
-        public byte GetSlot(int slot, byte def)
-        {
-            var off = t.__offset(slot);
-
-            if (off == 0)
-            {
-                return def;
-            }
-            return t.bb.Get(t.bb_pos + off);
-        }
-
-        public short GetSlot(int slot, short def)
-        {
-            var off = t.__offset(slot);
-
-            if (off == 0)
-            {
-                return def;
-            }
-            return t.bb.GetShort(t.bb_pos + off);
-        }
-
-        public ushort GetSlot(int slot, ushort def)
-        {
-            var off = t.__offset(slot);
-
-            if (off == 0)
-            {
-                return def;
-            }
-            return t.bb.GetUshort(t.bb_pos + off);
-        }
-
-        public int GetSlot(int slot, int def)
-        {
-            var off = t.__offset(slot);
-
-            if (off == 0)
-            {
-                return def;
-            }
-            return t.bb.GetInt(t.bb_pos + off);
-        }
-
-        public uint GetSlot(int slot, uint def)
-        {
-            var off = t.__offset(slot);
-
-            if (off == 0)
-            {
-                return def;
-            }
-            return t.bb.GetUint(t.bb_pos + off);
-        }
-
-        public long GetSlot(int slot, long def)
-        {
-            var off = t.__offset(slot);
-
-            if (off == 0)
-            {
-                return def;
-            }
-            return t.bb.GetLong(t.bb_pos + off);
-        }
-
-        public ulong GetSlot(int slot, ulong def)
-        {
-            var off = t.__offset(slot);
-
-            if (off == 0)
-            {
-                return def;
-            }
-            return t.bb.GetUlong(t.bb_pos + off);
-        }
-
-        public float GetSlot(int slot, float def)
-        {
-            var off = t.__offset(slot);
-
-            if (off == 0)
-            {
-                return def;
-            }
-            return t.bb.GetFloat(t.bb_pos + off);
-        }
-
-        public double GetSlot(int slot, double def)
-        {
-            var off = t.__offset(slot);
-
-            if (off == 0)
-            {
-                return def;
-            }
-            return t.bb.GetDouble(t.bb_pos + off);
-        }
-    }
-}
diff --git a/third_party/flatbuffers/tests/GoTest.sh b/third_party/flatbuffers/tests/GoTest.sh
deleted file mode 100755
index 7be4aff..0000000
--- a/third_party/flatbuffers/tests/GoTest.sh
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/bash -eu
-#
-# Copyright 2014 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-pushd "$(dirname $0)" >/dev/null
-test_dir="$(pwd)"
-go_path=${test_dir}/go_gen
-go_src=${go_path}/src
-
-# Emit Go code for the example schema in the test dir:
-../flatc -g monster_test.fbs
-
-# Go requires a particular layout of files in order to link multiple packages.
-# Copy flatbuffer Go files to their own package directories to compile the
-# test binary:
-mkdir -p ${go_src}/MyGame/Example
-mkdir -p ${go_src}/github.com/google/flatbuffers/go
-mkdir -p ${go_src}/flatbuffers_test
-
-cp -a MyGame/Example/*.go ./go_gen/src/MyGame/Example/
-cp -a ../go/* ./go_gen/src/github.com/google/flatbuffers/go
-cp -a ./go_test.go ./go_gen/src/flatbuffers_test/
-
-# Run tests with necessary flags.
-# Developers may wish to see more detail by appending the verbosity flag
-# -test.v to arguments for this command, as in:
-#   go -test -test.v ...
-# Developers may also wish to run benchmarks, which may be achieved with the
-# flag -test.bench and the wildcard regexp ".":
-#   go -test -test.bench=. ...
-GOPATH=${go_path} go test flatbuffers_test \
-                     --test.coverpkg=github.com/google/flatbuffers/go \
-                     --cpp_data=${test_dir}/monsterdata_test.mon \
-                     --out_data=${test_dir}/monsterdata_go_wire.mon \
-                     --test.bench=. \
-                     --test.benchtime=3s \
-                     --fuzz=true \
-                     --fuzz_fields=4 \
-                     --fuzz_objects=10000
-
-GO_TEST_RESULT=$?
-rm -rf ${go_path}/{pkg,src}
-if [[ $GO_TEST_RESULT  == 0 ]]; then
-    echo "OK: Go tests passed."
-else
-    echo "KO: Go tests failed."
-    exit 1
-fi
-
-NOT_FMT_FILES=$(gofmt -l MyGame)
-if [[ ${NOT_FMT_FILES} != "" ]]; then
-    echo "These files are not well gofmt'ed:\n\n${NOT_FMT_FILES}"
-    # enable this when enums are properly formated
-    # exit 1
-fi
diff --git a/third_party/flatbuffers/tests/JavaScriptTest.js b/third_party/flatbuffers/tests/JavaScriptTest.js
deleted file mode 100644
index 7ed313a..0000000
--- a/third_party/flatbuffers/tests/JavaScriptTest.js
+++ /dev/null
@@ -1,350 +0,0 @@
-// Run this using JavaScriptTest.sh
-var assert = require('assert');
-var fs = require('fs');
-
-var flatbuffers = require('../js/flatbuffers').flatbuffers;
-var MyGame = require(process.argv[2]).MyGame;
-
-function main() {
-
-  // First, let's test reading a FlatBuffer generated by C++ code:
-  // This file was generated from monsterdata_test.json
-  var data = new Uint8Array(fs.readFileSync('monsterdata_test.mon'));
-
-  // Now test it:
-
-  var bb = new flatbuffers.ByteBuffer(data);
-  testBuffer(bb);
-
-  // Second, let's create a FlatBuffer from scratch in JavaScript, and test it also.
-  // We use an initial size of 1 to exercise the reallocation algorithm,
-  // normally a size larger than the typical FlatBuffer you generate would be
-  // better for performance.
-  var fbb = new flatbuffers.Builder(1);
-
-  // We set up the same values as monsterdata.json:
-
-  var str = fbb.createString('MyMonster');
-
-  var inv = MyGame.Example.Monster.createInventoryVector(fbb, [0, 1, 2, 3, 4]);
-
-  var fred = fbb.createString('Fred');
-  MyGame.Example.Monster.startMonster(fbb);
-  MyGame.Example.Monster.addName(fbb, fred);
-  var mon2 = MyGame.Example.Monster.endMonster(fbb);
-
-  MyGame.Example.Monster.startTest4Vector(fbb, 2);
-  MyGame.Example.Test.createTest(fbb, 10, 20);
-  MyGame.Example.Test.createTest(fbb, 30, 40);
-  var test4 = fbb.endVector();
-
-  var testArrayOfString = MyGame.Example.Monster.createTestarrayofstringVector(fbb, [
-    fbb.createString('test1'),
-    fbb.createString('test2')
-  ]);
-
-  MyGame.Example.Monster.startMonster(fbb);
-  MyGame.Example.Monster.addPos(fbb, MyGame.Example.Vec3.createVec3(fbb, 1, 2, 3, 3, MyGame.Example.Color.Green, 5, 6));
-  MyGame.Example.Monster.addHp(fbb, 80);
-  MyGame.Example.Monster.addName(fbb, str);
-  MyGame.Example.Monster.addInventory(fbb, inv);
-  MyGame.Example.Monster.addTestType(fbb, MyGame.Example.Any.Monster);
-  MyGame.Example.Monster.addTest(fbb, mon2);
-  MyGame.Example.Monster.addTest4(fbb, test4);
-  MyGame.Example.Monster.addTestarrayofstring(fbb, testArrayOfString);
-  MyGame.Example.Monster.addTestbool(fbb, false);
-  var mon = MyGame.Example.Monster.endMonster(fbb);
-
-  MyGame.Example.Monster.finishMonsterBuffer(fbb, mon);
-
-  // Write the result to a file for debugging purposes:
-  // Note that the binaries are not necessarily identical, since the JSON
-  // parser may serialize in a slightly different order than the above
-  // JavaScript code. They are functionally equivalent though.
-
-  fs.writeFileSync('monsterdata_javascript_wire.mon', new Buffer(fbb.asUint8Array()));
-
-  // Tests mutation first.  This will verify that we did not trample any other
-  // part of the byte buffer.
-  testMutation(fbb.dataBuffer());
-
-  testBuffer(fbb.dataBuffer());
-
-  test64bit();
-  testUnicode();
-  fuzzTest1();
-
-  console.log('FlatBuffers test: completed successfully');
-}
-
-function testMutation(bb) {
-  var monster = MyGame.Example.Monster.getRootAsMonster(bb);
-
-  monster.mutate_hp(120);
-  assert.strictEqual(monster.hp(), 120);
-
-  monster.mutate_hp(80);
-  assert.strictEqual(monster.hp(), 80);
-
-  var manaRes = monster.mutate_mana(10);
-  assert.strictEqual(manaRes, false);  // Field was NOT present, because default value.
-
-  // TODO: There is not the availability to mutate structs or vectors.
-}
-
-function testBuffer(bb) {
-  assert.ok(MyGame.Example.Monster.bufferHasIdentifier(bb));
-
-  var monster = MyGame.Example.Monster.getRootAsMonster(bb);
-
-  assert.strictEqual(monster.hp(), 80);
-  assert.strictEqual(monster.mana(), 150); // default
-
-  assert.strictEqual(monster.name(), 'MyMonster');
-
-  var pos = monster.pos();
-  assert.strictEqual(pos.x(), 1);
-  assert.strictEqual(pos.y(), 2);
-  assert.strictEqual(pos.z(), 3);
-  assert.strictEqual(pos.test1(), 3);
-  assert.strictEqual(pos.test2(), MyGame.Example.Color.Green);
-  var t = pos.test3();
-  assert.strictEqual(t.a(), 5);
-  assert.strictEqual(t.b(), 6);
-
-  assert.strictEqual(monster.testType(), MyGame.Example.Any.Monster);
-  var monster2 = new MyGame.Example.Monster();
-  assert.strictEqual(monster.test(monster2) != null, true);
-  assert.strictEqual(monster2.name(), 'Fred');
-
-  assert.strictEqual(monster.inventoryLength(), 5);
-  var invsum = 0;
-  for (var i = 0; i < monster.inventoryLength(); i++) {
-    invsum += monster.inventory(i);
-  }
-  assert.strictEqual(invsum, 10);
-
-  var invsum2 = 0;
-  var invArr = monster.inventoryArray();
-  for (var i = 0; i < invArr.length; i++) {
-    invsum2 += invArr[i];
-  }
-  assert.strictEqual(invsum2, 10);
-
-  var test_0 = monster.test4(0);
-  var test_1 = monster.test4(1);
-  assert.strictEqual(monster.test4Length(), 2);
-  assert.strictEqual(test_0.a() + test_0.b() + test_1.a() + test_1.b(), 100);
-
-  assert.strictEqual(monster.testarrayofstringLength(), 2);
-  assert.strictEqual(monster.testarrayofstring(0), 'test1');
-  assert.strictEqual(monster.testarrayofstring(1), 'test2');
-
-  assert.strictEqual(monster.testbool(), false);
-}
-
-function test64bit() {
-  var fbb = new flatbuffers.Builder();
-  var required = fbb.createString('required');
-
-  MyGame.Example.Stat.startStat(fbb);
-  var stat2 = MyGame.Example.Stat.endStat(fbb);
-
-  MyGame.Example.Monster.startMonster(fbb);
-  MyGame.Example.Monster.addName(fbb, required);
-  MyGame.Example.Monster.addTestempty(fbb, stat2);
-  var mon2 = MyGame.Example.Monster.endMonster(fbb);
-
-  MyGame.Example.Stat.startStat(fbb);
-  // 2541551405100253985 = 0x87654321(low part) + 0x23456789 * 0x100000000(high part);
-  MyGame.Example.Stat.addVal(fbb, new flatbuffers.Long(0x87654321, 0x23456789));    // the low part is Uint32
-  var stat = MyGame.Example.Stat.endStat(fbb);
-
-  MyGame.Example.Monster.startMonster(fbb);
-  MyGame.Example.Monster.addName(fbb, required);
-  MyGame.Example.Monster.addEnemy(fbb, mon2);
-  MyGame.Example.Monster.addTestempty(fbb, stat);
-  var mon = MyGame.Example.Monster.endMonster(fbb);
-
-  MyGame.Example.Monster.finishMonsterBuffer(fbb, mon);
-  var bytes = fbb.asUint8Array();
-
-  ////////////////////////////////////////////////////////////////
-
-  var bb = new flatbuffers.ByteBuffer(bytes);
-  assert.ok(MyGame.Example.Monster.bufferHasIdentifier(bb));
-  var mon = MyGame.Example.Monster.getRootAsMonster(bb);
-
-  var stat = mon.testempty();
-  assert.strictEqual(stat != null, true);
-  assert.strictEqual(stat.val() != null, true);
-  assert.strictEqual(stat.val().toFloat64(), 2541551405100253985);
-
-  var mon2 = mon.enemy();
-  assert.strictEqual(mon2 != null, true);
-  stat = mon2.testempty();
-  assert.strictEqual(stat != null, true);
-  assert.strictEqual(stat.val() != null, true);
-  assert.strictEqual(stat.val().low, 0); // default value
-  assert.strictEqual(stat.val().high, 0);
-}
-
-function testUnicode() {
-  var correct = fs.readFileSync('unicode_test.mon');
-  var json = JSON.parse(fs.readFileSync('unicode_test.json', 'utf8'));
-
-  // Test reading
-  function testReadingUnicode(bb) {
-    var monster = MyGame.Example.Monster.getRootAsMonster(bb);
-    assert.strictEqual(monster.name(), json.name);
-    assert.deepEqual(new Buffer(monster.name(flatbuffers.Encoding.UTF8_BYTES)), new Buffer(json.name));
-    assert.strictEqual(monster.testarrayoftablesLength(), json.testarrayoftables.length);
-    json.testarrayoftables.forEach(function(table, i) {
-      var value = monster.testarrayoftables(i);
-      assert.strictEqual(value.name(), table.name);
-      assert.deepEqual(new Buffer(value.name(flatbuffers.Encoding.UTF8_BYTES)), new Buffer(table.name));
-    });
-    assert.strictEqual(monster.testarrayofstringLength(), json.testarrayofstring.length);
-    json.testarrayofstring.forEach(function(string, i) {
-      assert.strictEqual(monster.testarrayofstring(i), string);
-      assert.deepEqual(new Buffer(monster.testarrayofstring(i, flatbuffers.Encoding.UTF8_BYTES)), new Buffer(string));
-    });
-  }
-  testReadingUnicode(new flatbuffers.ByteBuffer(new Uint8Array(correct)));
-
-  // Test writing
-  var fbb = new flatbuffers.Builder();
-  var name = fbb.createString(json.name);
-  var testarrayoftablesOffsets = json.testarrayoftables.map(function(table) {
-    var name = fbb.createString(new Uint8Array(new Buffer(table.name)));
-    MyGame.Example.Monster.startMonster(fbb);
-    MyGame.Example.Monster.addName(fbb, name);
-    return MyGame.Example.Monster.endMonster(fbb);
-  });
-  var testarrayoftablesOffset = MyGame.Example.Monster.createTestarrayoftablesVector(fbb,
-    testarrayoftablesOffsets);
-  var testarrayofstringOffset = MyGame.Example.Monster.createTestarrayofstringVector(fbb,
-    json.testarrayofstring.map(function(string) { return fbb.createString(string); }));
-  MyGame.Example.Monster.startMonster(fbb);
-  MyGame.Example.Monster.addTestarrayofstring(fbb, testarrayofstringOffset);
-  MyGame.Example.Monster.addTestarrayoftables(fbb, testarrayoftablesOffset);
-  MyGame.Example.Monster.addName(fbb, name);
-  MyGame.Example.Monster.finishMonsterBuffer(fbb, MyGame.Example.Monster.endMonster(fbb));
-  testReadingUnicode(new flatbuffers.ByteBuffer(fbb.asUint8Array()));
-}
-
-var __imul = Math.imul ? Math.imul : function(a, b) {
-  var ah = a >> 16 & 65535;
-  var bh = b >> 16 & 65535;
-  var al = a & 65535;
-  var bl = b & 65535;
-  return al * bl + (ah * bl + al * bh << 16) | 0;
-};
-
-// Include simple random number generator to ensure results will be the
-// same cross platform.
-// http://en.wikipedia.org/wiki/Park%E2%80%93Miller_random_number_generator
-var lcg_seed = 48271;
-
-function lcg_rand() {
-  return lcg_seed = (__imul(lcg_seed, 279470273) >>> 0) % 4294967291;
-}
-
-function lcg_reset() {
-  lcg_seed = 48271;
-}
-
-// Converts a Field ID to a virtual table offset.
-function fieldIndexToOffset(field_id) {
-  // Should correspond to what EndTable() below builds up.
-  var fixed_fields = 2;  // Vtable size and Object Size.
-  return (field_id + fixed_fields) * 2;
-}
-
-// Low level stress/fuzz test: serialize/deserialize a variety of
-// different kinds of data in different combinations
-function fuzzTest1() {
-
-  // Values we're testing against: chosen to ensure no bits get chopped
-  // off anywhere, and also be different from eachother.
-  var bool_val   = true;
-  var char_val   = -127;  // 0x81
-  var uchar_val  = 0xFF;
-  var short_val  = -32222; // 0x8222;
-  var ushort_val = 0xFEEE;
-  var int_val    = 0x83333333 | 0;
-  var uint_val   = 0xFDDDDDDD;
-  var long_val   = new flatbuffers.Long(0x44444444, 0x84444444);
-  var ulong_val  = new flatbuffers.Long(0xCCCCCCCC, 0xFCCCCCCC);
-  var float_val  = new Float32Array([3.14159])[0];
-  var double_val = 3.14159265359;
-
-  var test_values_max = 11;
-  var fields_per_object = 4;
-  var num_fuzz_objects = 10000;  // The higher, the more thorough :)
-
-  var builder = new flatbuffers.Builder();
-
-  lcg_reset();  // Keep it deterministic.
-
-  var objects = [];
-
-  // Generate num_fuzz_objects random objects each consisting of
-  // fields_per_object fields, each of a random type.
-  for (var i = 0; i < num_fuzz_objects; i++) {
-    builder.startObject(fields_per_object);
-    for (var f = 0; f < fields_per_object; f++) {
-      var choice = lcg_rand() % test_values_max;
-      switch (choice) {
-        case 0:  builder.addFieldInt8(f, bool_val,   0); break;
-        case 1:  builder.addFieldInt8(f, char_val,   0); break;
-        case 2:  builder.addFieldInt8(f, uchar_val,  0); break;
-        case 3:  builder.addFieldInt16(f, short_val,  0); break;
-        case 4:  builder.addFieldInt16(f, ushort_val, 0); break;
-        case 5:  builder.addFieldInt32(f, int_val,    0); break;
-        case 6:  builder.addFieldInt32(f, uint_val,   0); break;
-        case 7:  builder.addFieldInt64(f, long_val,   flatbuffers.Long.ZERO); break;
-        case 8:  builder.addFieldInt64(f, ulong_val,  flatbuffers.Long.ZERO); break;
-        case 9:  builder.addFieldFloat32(f, float_val,  0); break;
-        case 10: builder.addFieldFloat64(f, double_val, 0); break;
-      }
-    }
-    objects.push(builder.endObject());
-  }
-  builder.prep(8, 0);  // Align whole buffer.
-
-  lcg_reset();  // Reset.
-
-  builder.finish(objects[objects.length - 1]);
-  var bytes = new Uint8Array(builder.asUint8Array());
-  var view = new DataView(bytes.buffer);
-
-  // Test that all objects we generated are readable and return the
-  // expected values. We generate random objects in the same order
-  // so this is deterministic.
-  for (var i = 0; i < num_fuzz_objects; i++) {
-    var offset = bytes.length - objects[i];
-    for (var f = 0; f < fields_per_object; f++) {
-      var choice = lcg_rand() % test_values_max;
-      var vtable_offset = fieldIndexToOffset(f);
-      var vtable = offset - view.getInt32(offset, true);
-      assert.ok(vtable_offset < view.getInt16(vtable, true));
-      var field_offset = offset + view.getInt16(vtable + vtable_offset, true);
-      switch (choice) {
-        case 0:  assert.strictEqual(!!view.getInt8(field_offset), bool_val); break;
-        case 1:  assert.strictEqual(view.getInt8(field_offset), char_val); break;
-        case 2:  assert.strictEqual(view.getUint8(field_offset), uchar_val); break;
-        case 3:  assert.strictEqual(view.getInt16(field_offset, true), short_val); break;
-        case 4:  assert.strictEqual(view.getUint16(field_offset, true), ushort_val); break;
-        case 5:  assert.strictEqual(view.getInt32(field_offset, true), int_val); break;
-        case 6:  assert.strictEqual(view.getUint32(field_offset, true), uint_val); break;
-        case 7:  assert.strictEqual(view.getInt32(field_offset, true), long_val.low); assert.strictEqual(view.getInt32(field_offset + 4, true), long_val.high); break;
-        case 8:  assert.strictEqual(view.getInt32(field_offset, true), ulong_val.low); assert.strictEqual(view.getInt32(field_offset + 4, true), ulong_val.high); break;
-        case 9:  assert.strictEqual(view.getFloat32(field_offset, true), float_val); break;
-        case 10: assert.strictEqual(view.getFloat64(field_offset, true), double_val); break;
-      }
-    }
-  }
-}
-
-main();
diff --git a/third_party/flatbuffers/tests/JavaScriptTest.sh b/third_party/flatbuffers/tests/JavaScriptTest.sh
deleted file mode 100755
index cdba5fa..0000000
--- a/third_party/flatbuffers/tests/JavaScriptTest.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2016 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-pushd "$(dirname $0)" >/dev/null
-../flatc -b monster_test.fbs unicode_test.json
-node JavaScriptTest ./monster_test_generated
diff --git a/third_party/flatbuffers/tests/JavaTest.bat b/third_party/flatbuffers/tests/JavaTest.bat
deleted file mode 100755
index aa72613..0000000
--- a/third_party/flatbuffers/tests/JavaTest.bat
+++ /dev/null
@@ -1,21 +0,0 @@
-@echo off
-rem Copyright 2014 Google Inc. All rights reserved.
-rem
-rem Licensed under the Apache License, Version 2.0 (the "License");
-rem you may not use this file except in compliance with the License.
-rem You may obtain a copy of the License at
-rem
-rem     http://www.apache.org/licenses/LICENSE-2.0
-rem
-rem Unless required by applicable law or agreed to in writing, software
-rem distributed under the License is distributed on an "AS IS" BASIS,
-rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-rem See the License for the specific language governing permissions and
-rem limitations under the License.
-
-rem Compile then run the Java test.
-
-set batch_file_dir=%~d0%~p0
-
-javac -g -classpath %batch_file_dir%\..\java;%batch_file_dir%;%batch_file_dir%\namespace_test JavaTest.java
-java -classpath %batch_file_dir%\..\java;%batch_file_dir%;%batch_file_dir%\namespace_test JavaTest
diff --git a/third_party/flatbuffers/tests/JavaTest.java b/third_party/flatbuffers/tests/JavaTest.java
deleted file mode 100755
index d53e973..0000000
--- a/third_party/flatbuffers/tests/JavaTest.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.io.*;
-import java.nio.ByteBuffer;
-import MyGame.Example.*;
-import NamespaceA.*;
-import NamespaceA.NamespaceB.*;
-import com.google.flatbuffers.FlatBufferBuilder;
-
-class JavaTest {
-    public static void main(String[] args) {
-
-        // First, let's test reading a FlatBuffer generated by C++ code:
-        // This file was generated from monsterdata_test.json
-
-        byte[] data = null;
-        File file = new File("monsterdata_test.mon");
-        RandomAccessFile f = null;
-        try {
-            f = new RandomAccessFile(file, "r");
-            data = new byte[(int)f.length()];
-            f.readFully(data);
-            f.close();
-        } catch(java.io.IOException e) {
-            System.out.println("FlatBuffers test: couldn't read file");
-            return;
-        }
-
-        // Now test it:
-
-        ByteBuffer bb = ByteBuffer.wrap(data);
-        TestBuffer(bb);
-
-        // Second, let's create a FlatBuffer from scratch in Java, and test it also.
-        // We use an initial size of 1 to exercise the reallocation algorithm,
-        // normally a size larger than the typical FlatBuffer you generate would be
-        // better for performance.
-        FlatBufferBuilder fbb = new FlatBufferBuilder(1);
-
-        int[] names = {fbb.createString("Frodo"), fbb.createString("Barney"), fbb.createString("Wilma")};
-        int[] off = new int[3];
-        Monster.startMonster(fbb);
-        Monster.addName(fbb, names[0]);
-        off[0] = Monster.endMonster(fbb);
-        Monster.startMonster(fbb);
-        Monster.addName(fbb, names[1]);
-        off[1] = Monster.endMonster(fbb);
-        Monster.startMonster(fbb);
-        Monster.addName(fbb, names[2]);
-        off[2] = Monster.endMonster(fbb);
-        int sortMons = fbb.createSortedVectorOfTables(new Monster(), off);
-		
-        // We set up the same values as monsterdata.json:
-
-        int str = fbb.createString("MyMonster");
-
-        int inv = Monster.createInventoryVector(fbb, new byte[] { 0, 1, 2, 3, 4 });
-
-        int fred = fbb.createString("Fred");
-        Monster.startMonster(fbb);
-        Monster.addName(fbb, fred);
-        int mon2 = Monster.endMonster(fbb);
-
-        Monster.startTest4Vector(fbb, 2);
-        Test.createTest(fbb, (short)10, (byte)20);
-        Test.createTest(fbb, (short)30, (byte)40);
-        int test4 = fbb.endVector();
-
-        int testArrayOfString = Monster.createTestarrayofstringVector(fbb, new int[] {
-            fbb.createString("test1"),
-            fbb.createString("test2")
-        });
-
-        Monster.startMonster(fbb);
-        Monster.addPos(fbb, Vec3.createVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0,
-                                                 Color.Green, (short)5, (byte)6));
-        Monster.addHp(fbb, (short)80);
-        Monster.addName(fbb, str);
-        Monster.addInventory(fbb, inv);
-        Monster.addTestType(fbb, (byte)Any.Monster);
-        Monster.addTest(fbb, mon2);
-        Monster.addTest4(fbb, test4);
-        Monster.addTestarrayofstring(fbb, testArrayOfString);
-        Monster.addTestbool(fbb, false);
-        Monster.addTesthashu32Fnv1(fbb, Integer.MAX_VALUE + 1L);
-        Monster.addTestarrayoftables(fbb, sortMons);
-        int mon = Monster.endMonster(fbb);
-
-        Monster.finishMonsterBuffer(fbb, mon);
-
-        // Write the result to a file for debugging purposes:
-        // Note that the binaries are not necessarily identical, since the JSON
-        // parser may serialize in a slightly different order than the above
-        // Java code. They are functionally equivalent though.
-
-        try {
-            DataOutputStream os = new DataOutputStream(new FileOutputStream(
-                                           "monsterdata_java_wire.mon"));
-            os.write(fbb.dataBuffer().array(), fbb.dataBuffer().position(), fbb.offset());
-            os.close();
-        } catch(java.io.IOException e) {
-            System.out.println("FlatBuffers test: couldn't write file");
-            return;
-        }
-
-        // Test it:
-        TestExtendedBuffer(fbb.dataBuffer());
-
-        // Make sure it also works with read only ByteBuffers. This is slower,
-        // since creating strings incurs an additional copy
-        // (see Table.__string).
-        TestExtendedBuffer(fbb.dataBuffer().asReadOnlyBuffer());
-
-        TestEnums();
-
-        //Attempt to mutate Monster fields and check whether the buffer has been mutated properly
-        // revert to original values after testing
-        Monster monster = Monster.getRootAsMonster(fbb.dataBuffer());
-
-        // mana is optional and does not exist in the buffer so the mutation should fail
-        // the mana field should retain its default value
-        TestEq(monster.mutateMana((short)10), false);
-        TestEq(monster.mana(), (short)150);
-		
-		// Accessing a vector of sorted by the key tables
-        TestEq(monster.testarrayoftables(0).name(), "Barney");
-        TestEq(monster.testarrayoftables(1).name(), "Frodo");
-        TestEq(monster.testarrayoftables(2).name(), "Wilma");
-		
-		// Example of searching for a table by the key
-        TestEq(Monster.lookupByKey(sortMons, "Frodo", fbb.dataBuffer()).name(), "Frodo");
-        TestEq(Monster.lookupByKey(sortMons, "Barney", fbb.dataBuffer()).name(), "Barney");
-        TestEq(Monster.lookupByKey(sortMons, "Wilma", fbb.dataBuffer()).name(), "Wilma");
-
-        // testType is an existing field and mutating it should succeed
-        TestEq(monster.testType(), (byte)Any.Monster);
-        TestEq(monster.mutateTestType(Any.NONE), true);
-        TestEq(monster.testType(), (byte)Any.NONE);
-        TestEq(monster.mutateTestType(Any.Monster), true);
-        TestEq(monster.testType(), (byte)Any.Monster);
-
-        //mutate the inventory vector
-        TestEq(monster.mutateInventory(0, 1), true);
-        TestEq(monster.mutateInventory(1, 2), true);
-        TestEq(monster.mutateInventory(2, 3), true);
-        TestEq(monster.mutateInventory(3, 4), true);
-        TestEq(monster.mutateInventory(4, 5), true);
-
-        for (int i = 0; i < monster.inventoryLength(); i++) {
-            TestEq(monster.inventory(i), i + 1);
-        }
-
-        //reverse mutation
-        TestEq(monster.mutateInventory(0, 0), true);
-        TestEq(monster.mutateInventory(1, 1), true);
-        TestEq(monster.mutateInventory(2, 2), true);
-        TestEq(monster.mutateInventory(3, 3), true);
-        TestEq(monster.mutateInventory(4, 4), true);
-
-        // get a struct field and edit one of its fields
-        Vec3 pos = monster.pos();
-        TestEq(pos.x(), 1.0f);
-        pos.mutateX(55.0f);
-        TestEq(pos.x(), 55.0f);
-        pos.mutateX(1.0f);
-        TestEq(pos.x(), 1.0f);
-
-        TestExtendedBuffer(fbb.dataBuffer().asReadOnlyBuffer());
-
-        TestNamespaceNesting();
-
-        TestNestedFlatBuffer();
-
-        TestCreateByteVector();
-
-        TestCreateUninitializedVector();
-
-        System.out.println("FlatBuffers test: completed successfully");
-    }
-
-    static void TestEnums() {
-      TestEq(Color.name(Color.Red), "Red");
-      TestEq(Color.name(Color.Blue), "Blue");
-      TestEq(Any.name(Any.NONE), "NONE");
-      TestEq(Any.name(Any.Monster), "Monster");
-    }
-
-    static void TestBuffer(ByteBuffer bb) {
-        TestEq(Monster.MonsterBufferHasIdentifier(bb), true);
-        
-        Monster monster = Monster.getRootAsMonster(bb);
-
-        TestEq(monster.hp(), (short)80);
-        TestEq(monster.mana(), (short)150);  // default
-
-        TestEq(monster.name(), "MyMonster");
-        // monster.friendly() // can't access, deprecated
-
-        Vec3 pos = monster.pos();
-        TestEq(pos.x(), 1.0f);
-        TestEq(pos.y(), 2.0f);
-        TestEq(pos.z(), 3.0f);
-        TestEq(pos.test1(), 3.0);
-        TestEq(pos.test2(), Color.Green);
-        Test t = pos.test3();
-        TestEq(t.a(), (short)5);
-        TestEq(t.b(), (byte)6);
-
-        TestEq(monster.testType(), (byte)Any.Monster);
-        Monster monster2 = new Monster();
-        TestEq(monster.test(monster2) != null, true);
-        TestEq(monster2.name(), "Fred");
-
-        TestEq(monster.inventoryLength(), 5);
-        int invsum = 0;
-        for (int i = 0; i < monster.inventoryLength(); i++)
-            invsum += monster.inventory(i);
-        TestEq(invsum, 10);
-
-        // Alternative way of accessing a vector:
-        ByteBuffer ibb = monster.inventoryAsByteBuffer();
-        invsum = 0;
-        while (ibb.position() < ibb.limit())
-            invsum += ibb.get();
-        TestEq(invsum, 10);
-
-        Test test_0 = monster.test4(0);
-        Test test_1 = monster.test4(1);
-        TestEq(monster.test4Length(), 2);
-        TestEq(test_0.a() + test_0.b() + test_1.a() + test_1.b(), 100);
-
-        TestEq(monster.testarrayofstringLength(), 2);
-        TestEq(monster.testarrayofstring(0),"test1");
-        TestEq(monster.testarrayofstring(1),"test2");
-
-        TestEq(monster.testbool(), false);
-    }
-
-    // this method checks additional fields not present in the binary buffer read from file
-    // these new tests are performed on top of the regular tests
-    static void TestExtendedBuffer(ByteBuffer bb) {
-        TestBuffer(bb);
-
-        Monster monster = Monster.getRootAsMonster(bb);
-
-        TestEq(monster.testhashu32Fnv1(), Integer.MAX_VALUE + 1L);
-    }
-    
-    static void TestNamespaceNesting() {
-        // reference / manipulate these to verify compilation
-        FlatBufferBuilder fbb = new FlatBufferBuilder(1);
-        
-        TableInNestedNS.startTableInNestedNS(fbb);
-        TableInNestedNS.addFoo(fbb, 1234);
-        int nestedTableOff = TableInNestedNS.endTableInNestedNS(fbb);
-        
-        TableInFirstNS.startTableInFirstNS(fbb);      
-        TableInFirstNS.addFooTable(fbb, nestedTableOff);
-        int off = TableInFirstNS.endTableInFirstNS(fbb);
-    }
-    
-    static void TestNestedFlatBuffer() {
-        final String nestedMonsterName = "NestedMonsterName";
-        final short nestedMonsterHp = 600;
-        final short nestedMonsterMana = 1024;
-        
-        FlatBufferBuilder fbb1 = new FlatBufferBuilder(16);
-        int str1 = fbb1.createString(nestedMonsterName);
-        Monster.startMonster(fbb1);
-        Monster.addName(fbb1, str1);
-        Monster.addHp(fbb1, nestedMonsterHp);
-        Monster.addMana(fbb1, nestedMonsterMana);
-        int monster1 = Monster.endMonster(fbb1);
-        Monster.finishMonsterBuffer(fbb1, monster1);
-        byte[] fbb1Bytes = fbb1.sizedByteArray();
-        fbb1 = null;
-        
-        FlatBufferBuilder fbb2 = new FlatBufferBuilder(16);        
-        int str2 = fbb2.createString("My Monster");
-        int nestedBuffer = Monster.createTestnestedflatbufferVector(fbb2, fbb1Bytes);
-        Monster.startMonster(fbb2);
-        Monster.addName(fbb2, str2);
-        Monster.addHp(fbb2, (short)50);
-        Monster.addMana(fbb2, (short)32);
-        Monster.addTestnestedflatbuffer(fbb2, nestedBuffer);
-        int monster = Monster.endMonster(fbb2);
-        Monster.finishMonsterBuffer(fbb2, monster);
-        
-        // Now test the data extracted from the nested buffer
-        Monster mons = Monster.getRootAsMonster(fbb2.dataBuffer());
-        Monster nestedMonster = mons.testnestedflatbufferAsMonster();
-
-        TestEq(nestedMonsterMana, nestedMonster.mana());
-        TestEq(nestedMonsterHp, nestedMonster.hp());
-        TestEq(nestedMonsterName, nestedMonster.name());
-    }
-
-    static void TestCreateByteVector() {
-        FlatBufferBuilder fbb = new FlatBufferBuilder(16);
-        int str = fbb.createString("MyMonster");
-        byte[] inventory = new byte[] { 0, 1, 2, 3, 4 };
-        int vec = fbb.createByteVector(inventory);
-        Monster.startMonster(fbb);
-        Monster.addInventory(fbb, vec);
-        Monster.addName(fbb, str);
-        int monster1 = Monster.endMonster(fbb);
-        Monster.finishMonsterBuffer(fbb, monster1);
-        Monster monsterObject = Monster.getRootAsMonster(fbb.dataBuffer());
-
-        TestEq(monsterObject.inventory(1), (int)inventory[1]);
-        TestEq(monsterObject.inventoryLength(), inventory.length);
-        TestEq(ByteBuffer.wrap(inventory), monsterObject.inventoryAsByteBuffer());
-    }
-
-    static void TestCreateUninitializedVector() {
-        FlatBufferBuilder fbb = new FlatBufferBuilder(16);
-        int str = fbb.createString("MyMonster");
-        byte[] inventory = new byte[] { 0, 1, 2, 3, 4 };
-        ByteBuffer bb = fbb.createUnintializedVector(1, inventory.length, 1);
-        for (byte i:inventory) {
-            bb.put(i);
-        }
-        int vec = fbb.endVector();
-        Monster.startMonster(fbb);
-        Monster.addInventory(fbb, vec);
-        Monster.addName(fbb, str);
-        int monster1 = Monster.endMonster(fbb);
-        Monster.finishMonsterBuffer(fbb, monster1);
-        Monster monsterObject = Monster.getRootAsMonster(fbb.dataBuffer());
-
-        TestEq(monsterObject.inventory(1), (int)inventory[1]);
-        TestEq(monsterObject.inventoryLength(), inventory.length);
-        TestEq(ByteBuffer.wrap(inventory), monsterObject.inventoryAsByteBuffer());
-    }
-
-    static <T> void TestEq(T a, T b) {
-        if (!a.equals(b)) {
-            System.out.println("" + a.getClass().getName() + " " + b.getClass().getName());
-            System.out.println("FlatBuffers test FAILED: \'" + a + "\' != \'" + b + "\'");
-            assert false;
-            System.exit(1);
-        }
-    }
-}
diff --git a/third_party/flatbuffers/tests/JavaTest.sh b/third_party/flatbuffers/tests/JavaTest.sh
deleted file mode 100755
index 40e854b..0000000
--- a/third_party/flatbuffers/tests/JavaTest.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2014 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-echo Compile then run the Java test.
-
-java -version
-
-testdir=$(readlink -fn `dirname $0`)
-thisdir=$(readlink -fn `pwd`)
-
-targetdir=${testdir}/target
-
-if [[ "$testdir" != "$thisdir" ]]; then
-	echo error: must be run from inside the ${testdir} directory
-	echo you ran it from ${thisdir}
-	exit 1
-fi
-
-find .. -type f -name "*.class" -exec rm  {} \;
-
-if [[ -e "${targetdir}" ]]; then
-    echo "clean target"
-    rm -rf ${targetdir}
-fi
-
-mkdir ${targetdir}
-
-javac -d ${targetdir} -classpath ${testdir}/../java:${testdir}:${testdir}/namespace_test JavaTest.java
-java -classpath ${targetdir} JavaTest
-
-rm -rf ${targetdir}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Ability.cs b/third_party/flatbuffers/tests/MyGame/Example/Ability.cs
deleted file mode 100644
index ec08ed8..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Ability.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame.Example
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct Ability : IFlatbufferObject
-{
-  private Struct __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public Ability __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public uint Id { get { return __p.bb.GetUint(__p.bb_pos + 0); } }
-  public void MutateId(uint id) { __p.bb.PutUint(__p.bb_pos + 0, id); }
-  public uint Distance { get { return __p.bb.GetUint(__p.bb_pos + 4); } }
-  public void MutateDistance(uint distance) { __p.bb.PutUint(__p.bb_pos + 4, distance); }
-
-  public static Offset<Ability> CreateAbility(FlatBufferBuilder builder, uint Id, uint Distance) {
-    builder.Prep(4, 8);
-    builder.PutUint(Distance);
-    builder.PutUint(Id);
-    return new Offset<Ability>(builder.Offset);
-  }
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Ability.go b/third_party/flatbuffers/tests/MyGame/Example/Ability.go
deleted file mode 100644
index 2ea8665..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Ability.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package Example
-
-import (
-	flatbuffers "github.com/google/flatbuffers/go"
-)
-
-type Ability struct {
-	_tab flatbuffers.Struct
-}
-
-func (rcv *Ability) Init(buf []byte, i flatbuffers.UOffsetT) {
-	rcv._tab.Bytes = buf
-	rcv._tab.Pos = i
-}
-
-func (rcv *Ability) Table() flatbuffers.Table {
-	return rcv._tab.Table
-}
-
-func (rcv *Ability) Id() uint32 {
-	return rcv._tab.GetUint32(rcv._tab.Pos + flatbuffers.UOffsetT(0))
-}
-func (rcv *Ability) MutateId(n uint32) bool {
-	return rcv._tab.MutateUint32(rcv._tab.Pos+flatbuffers.UOffsetT(0), n)
-}
-
-func (rcv *Ability) Distance() uint32 {
-	return rcv._tab.GetUint32(rcv._tab.Pos + flatbuffers.UOffsetT(4))
-}
-func (rcv *Ability) MutateDistance(n uint32) bool {
-	return rcv._tab.MutateUint32(rcv._tab.Pos+flatbuffers.UOffsetT(4), n)
-}
-
-func CreateAbility(builder *flatbuffers.Builder, id uint32, distance uint32) flatbuffers.UOffsetT {
-	builder.Prep(4, 8)
-	builder.PrependUint32(distance)
-	builder.PrependUint32(id)
-	return builder.Offset()
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Ability.java b/third_party/flatbuffers/tests/MyGame/Example/Ability.java
deleted file mode 100644
index 5e1c90e..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Ability.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package MyGame.Example;
-
-import java.nio.*;
-import java.lang.*;
-import java.util.*;
-import com.google.flatbuffers.*;
-
-@SuppressWarnings("unused")
-public final class Ability extends Struct {
-  public void __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; }
-  public Ability __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public long id() { return (long)bb.getInt(bb_pos + 0) & 0xFFFFFFFFL; }
-  public void mutateId(long id) { bb.putInt(bb_pos + 0, (int)id); }
-  public long distance() { return (long)bb.getInt(bb_pos + 4) & 0xFFFFFFFFL; }
-  public void mutateDistance(long distance) { bb.putInt(bb_pos + 4, (int)distance); }
-
-  public static int createAbility(FlatBufferBuilder builder, long id, long distance) {
-    builder.prep(4, 8);
-    builder.putInt((int)distance);
-    builder.putInt((int)id);
-    return builder.offset();
-  }
-}
-
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Ability.php b/third_party/flatbuffers/tests/MyGame/Example/Ability.php
deleted file mode 100644
index c09eca3..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Ability.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame\Example;
-
-use \Google\FlatBuffers\Struct;
-use \Google\FlatBuffers\Table;
-use \Google\FlatBuffers\ByteBuffer;
-use \Google\FlatBuffers\FlatBufferBuilder;
-
-class Ability extends Struct
-{
-    /**
-     * @param int $_i offset
-     * @param ByteBuffer $_bb
-     * @return Ability
-     **/
-    public function init($_i, ByteBuffer $_bb)
-    {
-        $this->bb_pos = $_i;
-        $this->bb = $_bb;
-        return $this;
-    }
-
-    /**
-     * @return uint
-     */
-    public function GetId()
-    {
-        return $this->bb->getUint($this->bb_pos + 0);
-    }
-
-    /**
-     * @return uint
-     */
-    public function GetDistance()
-    {
-        return $this->bb->getUint($this->bb_pos + 4);
-    }
-
-
-    /**
-     * @return int offset
-     */
-    public static function createAbility(FlatBufferBuilder $builder, $id, $distance)
-    {
-        $builder->prep(4, 8);
-        $builder->putUint($distance);
-        $builder->putUint($id);
-        return $builder->offset();
-    }
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Ability.py b/third_party/flatbuffers/tests/MyGame/Example/Ability.py
deleted file mode 100644
index 3c4776e..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Ability.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: Example
-
-import flatbuffers
-
-class Ability(object):
-    __slots__ = ['_tab']
-
-    # Ability
-    def Init(self, buf, pos):
-        self._tab = flatbuffers.table.Table(buf, pos)
-
-    # Ability
-    def Id(self): return self._tab.Get(flatbuffers.number_types.Uint32Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(0))
-    # Ability
-    def Distance(self): return self._tab.Get(flatbuffers.number_types.Uint32Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(4))
-
-def CreateAbility(builder, id, distance):
-    builder.Prep(4, 8)
-    builder.PrependUint32(distance)
-    builder.PrependUint32(id)
-    return builder.Offset()
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Any.cs b/third_party/flatbuffers/tests/MyGame/Example/Any.cs
deleted file mode 100644
index 8fdc2fc..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Any.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame.Example
-{
-
-public enum Any : byte
-{
- NONE = 0,
- Monster = 1,
- TestSimpleTableWithEnum = 2,
- MyGame_Example2_Monster = 3,
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Any.go b/third_party/flatbuffers/tests/MyGame/Example/Any.go
deleted file mode 100644
index d69b141..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Any.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package Example
-
-const (
-	AnyNONE = 0
-	AnyMonster = 1
-	AnyTestSimpleTableWithEnum = 2
-	AnyMyGame_Example2_Monster = 3
-)
-
-var EnumNamesAny = map[int]string{
-	AnyNONE:"NONE",
-	AnyMonster:"Monster",
-	AnyTestSimpleTableWithEnum:"TestSimpleTableWithEnum",
-	AnyMyGame_Example2_Monster:"MyGame_Example2_Monster",
-}
-
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Any.java b/third_party/flatbuffers/tests/MyGame/Example/Any.java
deleted file mode 100644
index 6e4fb76..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Any.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package MyGame.Example;
-
-public final class Any {
-  private Any() { }
-  public static final byte NONE = 0;
-  public static final byte Monster = 1;
-  public static final byte TestSimpleTableWithEnum = 2;
-  public static final byte MyGame_Example2_Monster = 3;
-
-  public static final String[] names = { "NONE", "Monster", "TestSimpleTableWithEnum", "MyGame_Example2_Monster", };
-
-  public static String name(int e) { return names[e]; }
-}
-
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Any.php b/third_party/flatbuffers/tests/MyGame/Example/Any.php
deleted file mode 100644
index da69176..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Any.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame\Example;
-
-class Any
-{
-    const NONE = 0;
-    const Monster = 1;
-    const TestSimpleTableWithEnum = 2;
-    const MyGame_Example2_Monster = 3;
-
-    private static $names = array(
-        "NONE",
-        "Monster",
-        "TestSimpleTableWithEnum",
-        "MyGame_Example2_Monster",
-    );
-
-    public static function Name($e)
-    {
-        if (!isset(self::$names[$e])) {
-            throw new \Exception();
-        }
-        return self::$names[$e];
-    }
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Any.py b/third_party/flatbuffers/tests/MyGame/Example/Any.py
deleted file mode 100644
index f1b8d51..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Any.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: Example
-
-class Any(object):
-    NONE = 0
-    Monster = 1
-    TestSimpleTableWithEnum = 2
-    MyGame_Example2_Monster = 3
-
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Color.cs b/third_party/flatbuffers/tests/MyGame/Example/Color.cs
deleted file mode 100644
index 625d040..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Color.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame.Example
-{
-
-public enum Color : sbyte
-{
- Red = 1,
- Green = 2,
- Blue = 8,
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Color.go b/third_party/flatbuffers/tests/MyGame/Example/Color.go
deleted file mode 100644
index d1eac54..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Color.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package Example
-
-const (
-	ColorRed = 1
-	ColorGreen = 2
-	ColorBlue = 8
-)
-
-var EnumNamesColor = map[int]string{
-	ColorRed:"Red",
-	ColorGreen:"Green",
-	ColorBlue:"Blue",
-}
-
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Color.java b/third_party/flatbuffers/tests/MyGame/Example/Color.java
deleted file mode 100644
index 7c113b7..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Color.java
+++ /dev/null
@@ -1,15 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package MyGame.Example;
-
-public final class Color {
-  private Color() { }
-  public static final byte Red = 1;
-  public static final byte Green = 2;
-  public static final byte Blue = 8;
-
-  public static final String[] names = { "Red", "Green", "", "", "", "", "", "Blue", };
-
-  public static String name(int e) { return names[e - Red]; }
-}
-
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Color.php b/third_party/flatbuffers/tests/MyGame/Example/Color.php
deleted file mode 100644
index 70c7bfd..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Color.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame\Example;
-
-class Color
-{
-    const Red = 1;
-    const Green = 2;
-    const Blue = 8;
-
-    private static $names = array(
-        "Red",
-        "Green",
-        "Blue",
-    );
-
-    public static function Name($e)
-    {
-        if (!isset(self::$names[$e])) {
-            throw new \Exception();
-        }
-        return self::$names[$e];
-    }
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Color.py b/third_party/flatbuffers/tests/MyGame/Example/Color.py
deleted file mode 100644
index 36e80a3..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Color.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: Example
-
-class Color(object):
-    Red = 1
-    Green = 2
-    Blue = 8
-
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Monster.cs b/third_party/flatbuffers/tests/MyGame/Example/Monster.cs
deleted file mode 100644
index 8f76cfd..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Monster.cs
+++ /dev/null
@@ -1,165 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame.Example
-{
-
-using global::System;
-using global::FlatBuffers;
-
-/// an example documentation comment: monster object
-public struct Monster : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static Monster GetRootAsMonster(ByteBuffer _bb) { return GetRootAsMonster(_bb, new Monster()); }
-  public static Monster GetRootAsMonster(ByteBuffer _bb, Monster obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public static bool MonsterBufferHasIdentifier(ByteBuffer _bb) { return Table.__has_identifier(_bb, "MONS"); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public Monster __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public Vec3? Pos { get { int o = __p.__offset(4); return o != 0 ? (Vec3?)(new Vec3()).__assign(o + __p.bb_pos, __p.bb) : null; } }
-  public short Mana { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetShort(o + __p.bb_pos) : (short)150; } }
-  public bool MutateMana(short mana) { int o = __p.__offset(6); if (o != 0) { __p.bb.PutShort(o + __p.bb_pos, mana); return true; } else { return false; } }
-  public short Hp { get { int o = __p.__offset(8); return o != 0 ? __p.bb.GetShort(o + __p.bb_pos) : (short)100; } }
-  public bool MutateHp(short hp) { int o = __p.__offset(8); if (o != 0) { __p.bb.PutShort(o + __p.bb_pos, hp); return true; } else { return false; } }
-  public string Name { get { int o = __p.__offset(10); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
-  public ArraySegment<byte>? GetNameBytes() { return __p.__vector_as_arraysegment(10); }
-  public byte Inventory(int j) { int o = __p.__offset(14); return o != 0 ? __p.bb.Get(__p.__vector(o) + j * 1) : (byte)0; }
-  public int InventoryLength { get { int o = __p.__offset(14); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetInventoryBytes() { return __p.__vector_as_arraysegment(14); }
-  public bool MutateInventory(int j, byte inventory) { int o = __p.__offset(14); if (o != 0) { __p.bb.Put(__p.__vector(o) + j * 1, inventory); return true; } else { return false; } }
-  public Color Color { get { int o = __p.__offset(16); return o != 0 ? (Color)__p.bb.GetSbyte(o + __p.bb_pos) : Color.Blue; } }
-  public bool MutateColor(Color color) { int o = __p.__offset(16); if (o != 0) { __p.bb.PutSbyte(o + __p.bb_pos, (sbyte)color); return true; } else { return false; } }
-  public Any TestType { get { int o = __p.__offset(18); return o != 0 ? (Any)__p.bb.Get(o + __p.bb_pos) : Any.NONE; } }
-  public bool MutateTestType(Any test_type) { int o = __p.__offset(18); if (o != 0) { __p.bb.Put(o + __p.bb_pos, (byte)test_type); return true; } else { return false; } }
-  public TTable? Test<TTable>() where TTable : struct, IFlatbufferObject { int o = __p.__offset(20); return o != 0 ? (TTable?)__p.__union<TTable>(o) : null; }
-  public Test? Test4(int j) { int o = __p.__offset(22); return o != 0 ? (Test?)(new Test()).__assign(__p.__vector(o) + j * 4, __p.bb) : null; }
-  public int Test4Length { get { int o = __p.__offset(22); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public string Testarrayofstring(int j) { int o = __p.__offset(24); return o != 0 ? __p.__string(__p.__vector(o) + j * 4) : null; }
-  public int TestarrayofstringLength { get { int o = __p.__offset(24); return o != 0 ? __p.__vector_len(o) : 0; } }
-  /// an example documentation comment: this will end up in the generated code
-  /// multiline too
-  public Monster? Testarrayoftables(int j) { int o = __p.__offset(26); return o != 0 ? (Monster?)(new Monster()).__assign(__p.__indirect(__p.__vector(o) + j * 4), __p.bb) : null; }
-  public int TestarrayoftablesLength { get { int o = __p.__offset(26); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public Monster? Enemy { get { int o = __p.__offset(28); return o != 0 ? (Monster?)(new Monster()).__assign(__p.__indirect(o + __p.bb_pos), __p.bb) : null; } }
-  public byte Testnestedflatbuffer(int j) { int o = __p.__offset(30); return o != 0 ? __p.bb.Get(__p.__vector(o) + j * 1) : (byte)0; }
-  public int TestnestedflatbufferLength { get { int o = __p.__offset(30); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetTestnestedflatbufferBytes() { return __p.__vector_as_arraysegment(30); }
-  public Monster? GetTestnestedflatbufferAsMonster() { int o = __p.__offset(30); return o != 0 ? (Monster?)(new Monster()).__assign(__p.__indirect(__p.__vector(o)), __p.bb) : null; }
-  public bool MutateTestnestedflatbuffer(int j, byte testnestedflatbuffer) { int o = __p.__offset(30); if (o != 0) { __p.bb.Put(__p.__vector(o) + j * 1, testnestedflatbuffer); return true; } else { return false; } }
-  public Stat? Testempty { get { int o = __p.__offset(32); return o != 0 ? (Stat?)(new Stat()).__assign(__p.__indirect(o + __p.bb_pos), __p.bb) : null; } }
-  public bool Testbool { get { int o = __p.__offset(34); return o != 0 ? 0!=__p.bb.Get(o + __p.bb_pos) : (bool)false; } }
-  public bool MutateTestbool(bool testbool) { int o = __p.__offset(34); if (o != 0) { __p.bb.Put(o + __p.bb_pos, (byte)(testbool ? 1 : 0)); return true; } else { return false; } }
-  public int Testhashs32Fnv1 { get { int o = __p.__offset(36); return o != 0 ? __p.bb.GetInt(o + __p.bb_pos) : (int)0; } }
-  public bool MutateTesthashs32Fnv1(int testhashs32_fnv1) { int o = __p.__offset(36); if (o != 0) { __p.bb.PutInt(o + __p.bb_pos, testhashs32_fnv1); return true; } else { return false; } }
-  public uint Testhashu32Fnv1 { get { int o = __p.__offset(38); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } }
-  public bool MutateTesthashu32Fnv1(uint testhashu32_fnv1) { int o = __p.__offset(38); if (o != 0) { __p.bb.PutUint(o + __p.bb_pos, testhashu32_fnv1); return true; } else { return false; } }
-  public long Testhashs64Fnv1 { get { int o = __p.__offset(40); return o != 0 ? __p.bb.GetLong(o + __p.bb_pos) : (long)0; } }
-  public bool MutateTesthashs64Fnv1(long testhashs64_fnv1) { int o = __p.__offset(40); if (o != 0) { __p.bb.PutLong(o + __p.bb_pos, testhashs64_fnv1); return true; } else { return false; } }
-  public ulong Testhashu64Fnv1 { get { int o = __p.__offset(42); return o != 0 ? __p.bb.GetUlong(o + __p.bb_pos) : (ulong)0; } }
-  public bool MutateTesthashu64Fnv1(ulong testhashu64_fnv1) { int o = __p.__offset(42); if (o != 0) { __p.bb.PutUlong(o + __p.bb_pos, testhashu64_fnv1); return true; } else { return false; } }
-  public int Testhashs32Fnv1a { get { int o = __p.__offset(44); return o != 0 ? __p.bb.GetInt(o + __p.bb_pos) : (int)0; } }
-  public bool MutateTesthashs32Fnv1a(int testhashs32_fnv1a) { int o = __p.__offset(44); if (o != 0) { __p.bb.PutInt(o + __p.bb_pos, testhashs32_fnv1a); return true; } else { return false; } }
-  public uint Testhashu32Fnv1a { get { int o = __p.__offset(46); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } }
-  public bool MutateTesthashu32Fnv1a(uint testhashu32_fnv1a) { int o = __p.__offset(46); if (o != 0) { __p.bb.PutUint(o + __p.bb_pos, testhashu32_fnv1a); return true; } else { return false; } }
-  public long Testhashs64Fnv1a { get { int o = __p.__offset(48); return o != 0 ? __p.bb.GetLong(o + __p.bb_pos) : (long)0; } }
-  public bool MutateTesthashs64Fnv1a(long testhashs64_fnv1a) { int o = __p.__offset(48); if (o != 0) { __p.bb.PutLong(o + __p.bb_pos, testhashs64_fnv1a); return true; } else { return false; } }
-  public ulong Testhashu64Fnv1a { get { int o = __p.__offset(50); return o != 0 ? __p.bb.GetUlong(o + __p.bb_pos) : (ulong)0; } }
-  public bool MutateTesthashu64Fnv1a(ulong testhashu64_fnv1a) { int o = __p.__offset(50); if (o != 0) { __p.bb.PutUlong(o + __p.bb_pos, testhashu64_fnv1a); return true; } else { return false; } }
-  public bool Testarrayofbools(int j) { int o = __p.__offset(52); return o != 0 ? 0!=__p.bb.Get(__p.__vector(o) + j * 1) : false; }
-  public int TestarrayofboolsLength { get { int o = __p.__offset(52); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetTestarrayofboolsBytes() { return __p.__vector_as_arraysegment(52); }
-  public bool MutateTestarrayofbools(int j, bool testarrayofbools) { int o = __p.__offset(52); if (o != 0) { __p.bb.Put(__p.__vector(o) + j * 1, (byte)(testarrayofbools ? 1 : 0)); return true; } else { return false; } }
-  public float Testf { get { int o = __p.__offset(54); return o != 0 ? __p.bb.GetFloat(o + __p.bb_pos) : (float)3.14159f; } }
-  public bool MutateTestf(float testf) { int o = __p.__offset(54); if (o != 0) { __p.bb.PutFloat(o + __p.bb_pos, testf); return true; } else { return false; } }
-  public float Testf2 { get { int o = __p.__offset(56); return o != 0 ? __p.bb.GetFloat(o + __p.bb_pos) : (float)3.0f; } }
-  public bool MutateTestf2(float testf2) { int o = __p.__offset(56); if (o != 0) { __p.bb.PutFloat(o + __p.bb_pos, testf2); return true; } else { return false; } }
-  public float Testf3 { get { int o = __p.__offset(58); return o != 0 ? __p.bb.GetFloat(o + __p.bb_pos) : (float)0.0f; } }
-  public bool MutateTestf3(float testf3) { int o = __p.__offset(58); if (o != 0) { __p.bb.PutFloat(o + __p.bb_pos, testf3); return true; } else { return false; } }
-  public string Testarrayofstring2(int j) { int o = __p.__offset(60); return o != 0 ? __p.__string(__p.__vector(o) + j * 4) : null; }
-  public int Testarrayofstring2Length { get { int o = __p.__offset(60); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public Ability? Testarrayofsortedstruct(int j) { int o = __p.__offset(62); return o != 0 ? (Ability?)(new Ability()).__assign(__p.__vector(o) + j * 8, __p.bb) : null; }
-  public int TestarrayofsortedstructLength { get { int o = __p.__offset(62); return o != 0 ? __p.__vector_len(o) : 0; } }
-
-  public static void StartMonster(FlatBufferBuilder builder) { builder.StartObject(30); }
-  public static void AddPos(FlatBufferBuilder builder, Offset<Vec3> posOffset) { builder.AddStruct(0, posOffset.Value, 0); }
-  public static void AddMana(FlatBufferBuilder builder, short mana) { builder.AddShort(1, mana, 150); }
-  public static void AddHp(FlatBufferBuilder builder, short hp) { builder.AddShort(2, hp, 100); }
-  public static void AddName(FlatBufferBuilder builder, StringOffset nameOffset) { builder.AddOffset(3, nameOffset.Value, 0); }
-  public static void AddInventory(FlatBufferBuilder builder, VectorOffset inventoryOffset) { builder.AddOffset(5, inventoryOffset.Value, 0); }
-  public static VectorOffset CreateInventoryVector(FlatBufferBuilder builder, byte[] data) { builder.StartVector(1, data.Length, 1); for (int i = data.Length - 1; i >= 0; i--) builder.AddByte(data[i]); return builder.EndVector(); }
-  public static void StartInventoryVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(1, numElems, 1); }
-  public static void AddColor(FlatBufferBuilder builder, Color color) { builder.AddSbyte(6, (sbyte)color, 8); }
-  public static void AddTestType(FlatBufferBuilder builder, Any testType) { builder.AddByte(7, (byte)testType, 0); }
-  public static void AddTest(FlatBufferBuilder builder, int testOffset) { builder.AddOffset(8, testOffset, 0); }
-  public static void AddTest4(FlatBufferBuilder builder, VectorOffset test4Offset) { builder.AddOffset(9, test4Offset.Value, 0); }
-  public static void StartTest4Vector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 2); }
-  public static void AddTestarrayofstring(FlatBufferBuilder builder, VectorOffset testarrayofstringOffset) { builder.AddOffset(10, testarrayofstringOffset.Value, 0); }
-  public static VectorOffset CreateTestarrayofstringVector(FlatBufferBuilder builder, StringOffset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); }
-  public static void StartTestarrayofstringVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddTestarrayoftables(FlatBufferBuilder builder, VectorOffset testarrayoftablesOffset) { builder.AddOffset(11, testarrayoftablesOffset.Value, 0); }
-  public static VectorOffset CreateTestarrayoftablesVector(FlatBufferBuilder builder, Offset<Monster>[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); }
-  public static void StartTestarrayoftablesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddEnemy(FlatBufferBuilder builder, Offset<Monster> enemyOffset) { builder.AddOffset(12, enemyOffset.Value, 0); }
-  public static void AddTestnestedflatbuffer(FlatBufferBuilder builder, VectorOffset testnestedflatbufferOffset) { builder.AddOffset(13, testnestedflatbufferOffset.Value, 0); }
-  public static VectorOffset CreateTestnestedflatbufferVector(FlatBufferBuilder builder, byte[] data) { builder.StartVector(1, data.Length, 1); for (int i = data.Length - 1; i >= 0; i--) builder.AddByte(data[i]); return builder.EndVector(); }
-  public static void StartTestnestedflatbufferVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(1, numElems, 1); }
-  public static void AddTestempty(FlatBufferBuilder builder, Offset<Stat> testemptyOffset) { builder.AddOffset(14, testemptyOffset.Value, 0); }
-  public static void AddTestbool(FlatBufferBuilder builder, bool testbool) { builder.AddBool(15, testbool, false); }
-  public static void AddTesthashs32Fnv1(FlatBufferBuilder builder, int testhashs32Fnv1) { builder.AddInt(16, testhashs32Fnv1, 0); }
-  public static void AddTesthashu32Fnv1(FlatBufferBuilder builder, uint testhashu32Fnv1) { builder.AddUint(17, testhashu32Fnv1, 0); }
-  public static void AddTesthashs64Fnv1(FlatBufferBuilder builder, long testhashs64Fnv1) { builder.AddLong(18, testhashs64Fnv1, 0); }
-  public static void AddTesthashu64Fnv1(FlatBufferBuilder builder, ulong testhashu64Fnv1) { builder.AddUlong(19, testhashu64Fnv1, 0); }
-  public static void AddTesthashs32Fnv1a(FlatBufferBuilder builder, int testhashs32Fnv1a) { builder.AddInt(20, testhashs32Fnv1a, 0); }
-  public static void AddTesthashu32Fnv1a(FlatBufferBuilder builder, uint testhashu32Fnv1a) { builder.AddUint(21, testhashu32Fnv1a, 0); }
-  public static void AddTesthashs64Fnv1a(FlatBufferBuilder builder, long testhashs64Fnv1a) { builder.AddLong(22, testhashs64Fnv1a, 0); }
-  public static void AddTesthashu64Fnv1a(FlatBufferBuilder builder, ulong testhashu64Fnv1a) { builder.AddUlong(23, testhashu64Fnv1a, 0); }
-  public static void AddTestarrayofbools(FlatBufferBuilder builder, VectorOffset testarrayofboolsOffset) { builder.AddOffset(24, testarrayofboolsOffset.Value, 0); }
-  public static VectorOffset CreateTestarrayofboolsVector(FlatBufferBuilder builder, bool[] data) { builder.StartVector(1, data.Length, 1); for (int i = data.Length - 1; i >= 0; i--) builder.AddBool(data[i]); return builder.EndVector(); }
-  public static void StartTestarrayofboolsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(1, numElems, 1); }
-  public static void AddTestf(FlatBufferBuilder builder, float testf) { builder.AddFloat(25, testf, 3.14159f); }
-  public static void AddTestf2(FlatBufferBuilder builder, float testf2) { builder.AddFloat(26, testf2, 3.0f); }
-  public static void AddTestf3(FlatBufferBuilder builder, float testf3) { builder.AddFloat(27, testf3, 0.0f); }
-  public static void AddTestarrayofstring2(FlatBufferBuilder builder, VectorOffset testarrayofstring2Offset) { builder.AddOffset(28, testarrayofstring2Offset.Value, 0); }
-  public static VectorOffset CreateTestarrayofstring2Vector(FlatBufferBuilder builder, StringOffset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); }
-  public static void StartTestarrayofstring2Vector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddTestarrayofsortedstruct(FlatBufferBuilder builder, VectorOffset testarrayofsortedstructOffset) { builder.AddOffset(29, testarrayofsortedstructOffset.Value, 0); }
-  public static void StartTestarrayofsortedstructVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(8, numElems, 4); }
-  public static Offset<Monster> EndMonster(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    builder.Required(o, 10);  // name
-    return new Offset<Monster>(o);
-  }
-  public static void FinishMonsterBuffer(FlatBufferBuilder builder, Offset<Monster> offset) { builder.Finish(offset.Value, "MONS"); }
-
-  public static VectorOffset CreateMySortedVectorOfTables(FlatBufferBuilder builder, Offset<Monster>[] offsets) {
-    Array.Sort(offsets, (Offset<Monster> o1, Offset<Monster> o2) => Table.CompareStrings(Table.__offset(10, o1.Value, builder.DataBuffer), Table.__offset(10, o2.Value, builder.DataBuffer), builder.DataBuffer));
-    return builder.CreateVectorOfTables(offsets);
-  }
-
-  public static Monster? LookupByKey(VectorOffset vectorOffset, string key, ByteBuffer bb) {
-    byte[] byteKey = System.Text.Encoding.UTF8.GetBytes(key);
-    int vectorLocation = bb.Length - vectorOffset.Value;
-    int span = bb.GetInt(vectorLocation);
-    int start = 0;
-    vectorLocation += 4;
-    while (span != 0) {
-      int middle = span / 2;
-      int tableOffset = Table.__indirect(vectorLocation + 4 * (start + middle), bb);
-      int comp = Table.CompareStrings(Table.__offset(10, bb.Length - tableOffset, bb), byteKey, bb);
-      if (comp > 0) {
-        span = middle;
-      } else if (comp < 0) {
-        middle++;
-        start += middle;
-        span -= middle;
-      } else {
-        return new Monster().__assign(tableOffset, bb);
-      }
-    }
-    return null;
-  }
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Monster.go b/third_party/flatbuffers/tests/MyGame/Example/Monster.go
deleted file mode 100644
index ba2e60d..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Monster.go
+++ /dev/null
@@ -1,557 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package Example
-
-import (
-	flatbuffers "github.com/google/flatbuffers/go"
-)
-
-/// an example documentation comment: monster object
-type Monster struct {
-	_tab flatbuffers.Table
-}
-
-func GetRootAsMonster(buf []byte, offset flatbuffers.UOffsetT) *Monster {
-	n := flatbuffers.GetUOffsetT(buf[offset:])
-	x := &Monster{}
-	x.Init(buf, n+offset)
-	return x
-}
-
-func (rcv *Monster) Init(buf []byte, i flatbuffers.UOffsetT) {
-	rcv._tab.Bytes = buf
-	rcv._tab.Pos = i
-}
-
-func (rcv *Monster) Table() flatbuffers.Table {
-	return rcv._tab
-}
-
-func (rcv *Monster) Pos(obj *Vec3) *Vec3 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(4))
-	if o != 0 {
-		x := o + rcv._tab.Pos
-		if obj == nil {
-			obj = new(Vec3)
-		}
-		obj.Init(rcv._tab.Bytes, x)
-		return obj
-	}
-	return nil
-}
-
-func (rcv *Monster) Mana() int16 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(6))
-	if o != 0 {
-		return rcv._tab.GetInt16(o + rcv._tab.Pos)
-	}
-	return 150
-}
-
-func (rcv *Monster) MutateMana(n int16) bool {
-	return rcv._tab.MutateInt16Slot(6, n)
-}
-
-func (rcv *Monster) Hp() int16 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(8))
-	if o != 0 {
-		return rcv._tab.GetInt16(o + rcv._tab.Pos)
-	}
-	return 100
-}
-
-func (rcv *Monster) MutateHp(n int16) bool {
-	return rcv._tab.MutateInt16Slot(8, n)
-}
-
-func (rcv *Monster) Name() []byte {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(10))
-	if o != 0 {
-		return rcv._tab.ByteVector(o + rcv._tab.Pos)
-	}
-	return nil
-}
-
-func (rcv *Monster) Inventory(j int) byte {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(14))
-	if o != 0 {
-		a := rcv._tab.Vector(o)
-		return rcv._tab.GetByte(a + flatbuffers.UOffsetT(j*1))
-	}
-	return 0
-}
-
-func (rcv *Monster) InventoryLength() int {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(14))
-	if o != 0 {
-		return rcv._tab.VectorLen(o)
-	}
-	return 0
-}
-
-func (rcv *Monster) InventoryBytes() []byte {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(14))
-	if o != 0 {
-		return rcv._tab.ByteVector(o + rcv._tab.Pos)
-	}
-	return nil
-}
-
-func (rcv *Monster) Color() int8 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(16))
-	if o != 0 {
-		return rcv._tab.GetInt8(o + rcv._tab.Pos)
-	}
-	return 8
-}
-
-func (rcv *Monster) MutateColor(n int8) bool {
-	return rcv._tab.MutateInt8Slot(16, n)
-}
-
-func (rcv *Monster) TestType() byte {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(18))
-	if o != 0 {
-		return rcv._tab.GetByte(o + rcv._tab.Pos)
-	}
-	return 0
-}
-
-func (rcv *Monster) MutateTestType(n byte) bool {
-	return rcv._tab.MutateByteSlot(18, n)
-}
-
-func (rcv *Monster) Test(obj *flatbuffers.Table) bool {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(20))
-	if o != 0 {
-		rcv._tab.Union(obj, o)
-		return true
-	}
-	return false
-}
-
-func (rcv *Monster) Test4(obj *Test, j int) bool {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(22))
-	if o != 0 {
-		x := rcv._tab.Vector(o)
-		x += flatbuffers.UOffsetT(j) * 4
-		obj.Init(rcv._tab.Bytes, x)
-		return true
-	}
-	return false
-}
-
-func (rcv *Monster) Test4Length() int {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(22))
-	if o != 0 {
-		return rcv._tab.VectorLen(o)
-	}
-	return 0
-}
-
-func (rcv *Monster) Testarrayofstring(j int) []byte {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(24))
-	if o != 0 {
-		a := rcv._tab.Vector(o)
-		return rcv._tab.ByteVector(a + flatbuffers.UOffsetT(j*4))
-	}
-	return nil
-}
-
-func (rcv *Monster) TestarrayofstringLength() int {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(24))
-	if o != 0 {
-		return rcv._tab.VectorLen(o)
-	}
-	return 0
-}
-
-/// an example documentation comment: this will end up in the generated code
-/// multiline too
-func (rcv *Monster) Testarrayoftables(obj *Monster, j int) bool {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(26))
-	if o != 0 {
-		x := rcv._tab.Vector(o)
-		x += flatbuffers.UOffsetT(j) * 4
-		x = rcv._tab.Indirect(x)
-		obj.Init(rcv._tab.Bytes, x)
-		return true
-	}
-	return false
-}
-
-func (rcv *Monster) TestarrayoftablesLength() int {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(26))
-	if o != 0 {
-		return rcv._tab.VectorLen(o)
-	}
-	return 0
-}
-
-/// an example documentation comment: this will end up in the generated code
-/// multiline too
-func (rcv *Monster) Enemy(obj *Monster) *Monster {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(28))
-	if o != 0 {
-		x := rcv._tab.Indirect(o + rcv._tab.Pos)
-		if obj == nil {
-			obj = new(Monster)
-		}
-		obj.Init(rcv._tab.Bytes, x)
-		return obj
-	}
-	return nil
-}
-
-func (rcv *Monster) Testnestedflatbuffer(j int) byte {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(30))
-	if o != 0 {
-		a := rcv._tab.Vector(o)
-		return rcv._tab.GetByte(a + flatbuffers.UOffsetT(j*1))
-	}
-	return 0
-}
-
-func (rcv *Monster) TestnestedflatbufferLength() int {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(30))
-	if o != 0 {
-		return rcv._tab.VectorLen(o)
-	}
-	return 0
-}
-
-func (rcv *Monster) TestnestedflatbufferBytes() []byte {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(30))
-	if o != 0 {
-		return rcv._tab.ByteVector(o + rcv._tab.Pos)
-	}
-	return nil
-}
-
-func (rcv *Monster) Testempty(obj *Stat) *Stat {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(32))
-	if o != 0 {
-		x := rcv._tab.Indirect(o + rcv._tab.Pos)
-		if obj == nil {
-			obj = new(Stat)
-		}
-		obj.Init(rcv._tab.Bytes, x)
-		return obj
-	}
-	return nil
-}
-
-func (rcv *Monster) Testbool() byte {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(34))
-	if o != 0 {
-		return rcv._tab.GetByte(o + rcv._tab.Pos)
-	}
-	return 0
-}
-
-func (rcv *Monster) MutateTestbool(n byte) bool {
-	return rcv._tab.MutateByteSlot(34, n)
-}
-
-func (rcv *Monster) Testhashs32Fnv1() int32 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(36))
-	if o != 0 {
-		return rcv._tab.GetInt32(o + rcv._tab.Pos)
-	}
-	return 0
-}
-
-func (rcv *Monster) MutateTesthashs32Fnv1(n int32) bool {
-	return rcv._tab.MutateInt32Slot(36, n)
-}
-
-func (rcv *Monster) Testhashu32Fnv1() uint32 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(38))
-	if o != 0 {
-		return rcv._tab.GetUint32(o + rcv._tab.Pos)
-	}
-	return 0
-}
-
-func (rcv *Monster) MutateTesthashu32Fnv1(n uint32) bool {
-	return rcv._tab.MutateUint32Slot(38, n)
-}
-
-func (rcv *Monster) Testhashs64Fnv1() int64 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(40))
-	if o != 0 {
-		return rcv._tab.GetInt64(o + rcv._tab.Pos)
-	}
-	return 0
-}
-
-func (rcv *Monster) MutateTesthashs64Fnv1(n int64) bool {
-	return rcv._tab.MutateInt64Slot(40, n)
-}
-
-func (rcv *Monster) Testhashu64Fnv1() uint64 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(42))
-	if o != 0 {
-		return rcv._tab.GetUint64(o + rcv._tab.Pos)
-	}
-	return 0
-}
-
-func (rcv *Monster) MutateTesthashu64Fnv1(n uint64) bool {
-	return rcv._tab.MutateUint64Slot(42, n)
-}
-
-func (rcv *Monster) Testhashs32Fnv1a() int32 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(44))
-	if o != 0 {
-		return rcv._tab.GetInt32(o + rcv._tab.Pos)
-	}
-	return 0
-}
-
-func (rcv *Monster) MutateTesthashs32Fnv1a(n int32) bool {
-	return rcv._tab.MutateInt32Slot(44, n)
-}
-
-func (rcv *Monster) Testhashu32Fnv1a() uint32 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(46))
-	if o != 0 {
-		return rcv._tab.GetUint32(o + rcv._tab.Pos)
-	}
-	return 0
-}
-
-func (rcv *Monster) MutateTesthashu32Fnv1a(n uint32) bool {
-	return rcv._tab.MutateUint32Slot(46, n)
-}
-
-func (rcv *Monster) Testhashs64Fnv1a() int64 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(48))
-	if o != 0 {
-		return rcv._tab.GetInt64(o + rcv._tab.Pos)
-	}
-	return 0
-}
-
-func (rcv *Monster) MutateTesthashs64Fnv1a(n int64) bool {
-	return rcv._tab.MutateInt64Slot(48, n)
-}
-
-func (rcv *Monster) Testhashu64Fnv1a() uint64 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(50))
-	if o != 0 {
-		return rcv._tab.GetUint64(o + rcv._tab.Pos)
-	}
-	return 0
-}
-
-func (rcv *Monster) MutateTesthashu64Fnv1a(n uint64) bool {
-	return rcv._tab.MutateUint64Slot(50, n)
-}
-
-func (rcv *Monster) Testarrayofbools(j int) byte {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(52))
-	if o != 0 {
-		a := rcv._tab.Vector(o)
-		return rcv._tab.GetByte(a + flatbuffers.UOffsetT(j*1))
-	}
-	return 0
-}
-
-func (rcv *Monster) TestarrayofboolsLength() int {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(52))
-	if o != 0 {
-		return rcv._tab.VectorLen(o)
-	}
-	return 0
-}
-
-func (rcv *Monster) Testf() float32 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(54))
-	if o != 0 {
-		return rcv._tab.GetFloat32(o + rcv._tab.Pos)
-	}
-	return 3.14159
-}
-
-func (rcv *Monster) MutateTestf(n float32) bool {
-	return rcv._tab.MutateFloat32Slot(54, n)
-}
-
-func (rcv *Monster) Testf2() float32 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(56))
-	if o != 0 {
-		return rcv._tab.GetFloat32(o + rcv._tab.Pos)
-	}
-	return 3.0
-}
-
-func (rcv *Monster) MutateTestf2(n float32) bool {
-	return rcv._tab.MutateFloat32Slot(56, n)
-}
-
-func (rcv *Monster) Testf3() float32 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(58))
-	if o != 0 {
-		return rcv._tab.GetFloat32(o + rcv._tab.Pos)
-	}
-	return 0.0
-}
-
-func (rcv *Monster) MutateTestf3(n float32) bool {
-	return rcv._tab.MutateFloat32Slot(58, n)
-}
-
-func (rcv *Monster) Testarrayofstring2(j int) []byte {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(60))
-	if o != 0 {
-		a := rcv._tab.Vector(o)
-		return rcv._tab.ByteVector(a + flatbuffers.UOffsetT(j*4))
-	}
-	return nil
-}
-
-func (rcv *Monster) Testarrayofstring2Length() int {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(60))
-	if o != 0 {
-		return rcv._tab.VectorLen(o)
-	}
-	return 0
-}
-
-func (rcv *Monster) Testarrayofsortedstruct(obj *Ability, j int) bool {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(62))
-	if o != 0 {
-		x := rcv._tab.Vector(o)
-		x += flatbuffers.UOffsetT(j) * 8
-		obj.Init(rcv._tab.Bytes, x)
-		return true
-	}
-	return false
-}
-
-func (rcv *Monster) TestarrayofsortedstructLength() int {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(62))
-	if o != 0 {
-		return rcv._tab.VectorLen(o)
-	}
-	return 0
-}
-
-func MonsterStart(builder *flatbuffers.Builder) {
-	builder.StartObject(30)
-}
-func MonsterAddPos(builder *flatbuffers.Builder, pos flatbuffers.UOffsetT) {
-	builder.PrependStructSlot(0, flatbuffers.UOffsetT(pos), 0)
-}
-func MonsterAddMana(builder *flatbuffers.Builder, mana int16) {
-	builder.PrependInt16Slot(1, mana, 150)
-}
-func MonsterAddHp(builder *flatbuffers.Builder, hp int16) {
-	builder.PrependInt16Slot(2, hp, 100)
-}
-func MonsterAddName(builder *flatbuffers.Builder, name flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(3, flatbuffers.UOffsetT(name), 0)
-}
-func MonsterAddInventory(builder *flatbuffers.Builder, inventory flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(5, flatbuffers.UOffsetT(inventory), 0)
-}
-func MonsterStartInventoryVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT {
-	return builder.StartVector(1, numElems, 1)
-}
-func MonsterAddColor(builder *flatbuffers.Builder, color int8) {
-	builder.PrependInt8Slot(6, color, 8)
-}
-func MonsterAddTestType(builder *flatbuffers.Builder, testType byte) {
-	builder.PrependByteSlot(7, testType, 0)
-}
-func MonsterAddTest(builder *flatbuffers.Builder, test flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(8, flatbuffers.UOffsetT(test), 0)
-}
-func MonsterAddTest4(builder *flatbuffers.Builder, test4 flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(9, flatbuffers.UOffsetT(test4), 0)
-}
-func MonsterStartTest4Vector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT {
-	return builder.StartVector(4, numElems, 2)
-}
-func MonsterAddTestarrayofstring(builder *flatbuffers.Builder, testarrayofstring flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(10, flatbuffers.UOffsetT(testarrayofstring), 0)
-}
-func MonsterStartTestarrayofstringVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT {
-	return builder.StartVector(4, numElems, 4)
-}
-func MonsterAddTestarrayoftables(builder *flatbuffers.Builder, testarrayoftables flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(11, flatbuffers.UOffsetT(testarrayoftables), 0)
-}
-func MonsterStartTestarrayoftablesVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT {
-	return builder.StartVector(4, numElems, 4)
-}
-func MonsterAddEnemy(builder *flatbuffers.Builder, enemy flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(12, flatbuffers.UOffsetT(enemy), 0)
-}
-func MonsterAddTestnestedflatbuffer(builder *flatbuffers.Builder, testnestedflatbuffer flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(13, flatbuffers.UOffsetT(testnestedflatbuffer), 0)
-}
-func MonsterStartTestnestedflatbufferVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT {
-	return builder.StartVector(1, numElems, 1)
-}
-func MonsterAddTestempty(builder *flatbuffers.Builder, testempty flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(14, flatbuffers.UOffsetT(testempty), 0)
-}
-func MonsterAddTestbool(builder *flatbuffers.Builder, testbool byte) {
-	builder.PrependByteSlot(15, testbool, 0)
-}
-func MonsterAddTesthashs32Fnv1(builder *flatbuffers.Builder, testhashs32Fnv1 int32) {
-	builder.PrependInt32Slot(16, testhashs32Fnv1, 0)
-}
-func MonsterAddTesthashu32Fnv1(builder *flatbuffers.Builder, testhashu32Fnv1 uint32) {
-	builder.PrependUint32Slot(17, testhashu32Fnv1, 0)
-}
-func MonsterAddTesthashs64Fnv1(builder *flatbuffers.Builder, testhashs64Fnv1 int64) {
-	builder.PrependInt64Slot(18, testhashs64Fnv1, 0)
-}
-func MonsterAddTesthashu64Fnv1(builder *flatbuffers.Builder, testhashu64Fnv1 uint64) {
-	builder.PrependUint64Slot(19, testhashu64Fnv1, 0)
-}
-func MonsterAddTesthashs32Fnv1a(builder *flatbuffers.Builder, testhashs32Fnv1a int32) {
-	builder.PrependInt32Slot(20, testhashs32Fnv1a, 0)
-}
-func MonsterAddTesthashu32Fnv1a(builder *flatbuffers.Builder, testhashu32Fnv1a uint32) {
-	builder.PrependUint32Slot(21, testhashu32Fnv1a, 0)
-}
-func MonsterAddTesthashs64Fnv1a(builder *flatbuffers.Builder, testhashs64Fnv1a int64) {
-	builder.PrependInt64Slot(22, testhashs64Fnv1a, 0)
-}
-func MonsterAddTesthashu64Fnv1a(builder *flatbuffers.Builder, testhashu64Fnv1a uint64) {
-	builder.PrependUint64Slot(23, testhashu64Fnv1a, 0)
-}
-func MonsterAddTestarrayofbools(builder *flatbuffers.Builder, testarrayofbools flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(24, flatbuffers.UOffsetT(testarrayofbools), 0)
-}
-func MonsterStartTestarrayofboolsVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT {
-	return builder.StartVector(1, numElems, 1)
-}
-func MonsterAddTestf(builder *flatbuffers.Builder, testf float32) {
-	builder.PrependFloat32Slot(25, testf, 3.14159)
-}
-func MonsterAddTestf2(builder *flatbuffers.Builder, testf2 float32) {
-	builder.PrependFloat32Slot(26, testf2, 3.0)
-}
-func MonsterAddTestf3(builder *flatbuffers.Builder, testf3 float32) {
-	builder.PrependFloat32Slot(27, testf3, 0.0)
-}
-func MonsterAddTestarrayofstring2(builder *flatbuffers.Builder, testarrayofstring2 flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(28, flatbuffers.UOffsetT(testarrayofstring2), 0)
-}
-func MonsterStartTestarrayofstring2Vector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT {
-	return builder.StartVector(4, numElems, 4)
-}
-func MonsterAddTestarrayofsortedstruct(builder *flatbuffers.Builder, testarrayofsortedstruct flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(29, flatbuffers.UOffsetT(testarrayofsortedstruct), 0)
-}
-func MonsterStartTestarrayofsortedstructVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT {
-	return builder.StartVector(8, numElems, 4)
-}
-func MonsterEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
-	return builder.EndObject()
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Monster.java b/third_party/flatbuffers/tests/MyGame/Example/Monster.java
deleted file mode 100644
index 5bde80a..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Monster.java
+++ /dev/null
@@ -1,171 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package MyGame.Example;
-
-import java.nio.*;
-import java.lang.*;
-import java.util.*;
-import com.google.flatbuffers.*;
-
-@SuppressWarnings("unused")
-/**
- * an example documentation comment: monster object
- */
-public final class Monster extends Table {
-  public static Monster getRootAsMonster(ByteBuffer _bb) { return getRootAsMonster(_bb, new Monster()); }
-  public static Monster getRootAsMonster(ByteBuffer _bb, Monster obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
-  public static boolean MonsterBufferHasIdentifier(ByteBuffer _bb) { return __has_identifier(_bb, "MONS"); }
-  public void __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; }
-  public Monster __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public Vec3 pos() { return pos(new Vec3()); }
-  public Vec3 pos(Vec3 obj) { int o = __offset(4); return o != 0 ? obj.__assign(o + bb_pos, bb) : null; }
-  public short mana() { int o = __offset(6); return o != 0 ? bb.getShort(o + bb_pos) : 150; }
-  public boolean mutateMana(short mana) { int o = __offset(6); if (o != 0) { bb.putShort(o + bb_pos, mana); return true; } else { return false; } }
-  public short hp() { int o = __offset(8); return o != 0 ? bb.getShort(o + bb_pos) : 100; }
-  public boolean mutateHp(short hp) { int o = __offset(8); if (o != 0) { bb.putShort(o + bb_pos, hp); return true; } else { return false; } }
-  public String name() { int o = __offset(10); return o != 0 ? __string(o + bb_pos) : null; }
-  public ByteBuffer nameAsByteBuffer() { return __vector_as_bytebuffer(10, 1); }
-  public int inventory(int j) { int o = __offset(14); return o != 0 ? bb.get(__vector(o) + j * 1) & 0xFF : 0; }
-  public int inventoryLength() { int o = __offset(14); return o != 0 ? __vector_len(o) : 0; }
-  public ByteBuffer inventoryAsByteBuffer() { return __vector_as_bytebuffer(14, 1); }
-  public boolean mutateInventory(int j, int inventory) { int o = __offset(14); if (o != 0) { bb.put(__vector(o) + j * 1, (byte)inventory); return true; } else { return false; } }
-  public byte color() { int o = __offset(16); return o != 0 ? bb.get(o + bb_pos) : 8; }
-  public boolean mutateColor(byte color) { int o = __offset(16); if (o != 0) { bb.put(o + bb_pos, color); return true; } else { return false; } }
-  public byte testType() { int o = __offset(18); return o != 0 ? bb.get(o + bb_pos) : 0; }
-  public boolean mutateTestType(byte test_type) { int o = __offset(18); if (o != 0) { bb.put(o + bb_pos, test_type); return true; } else { return false; } }
-  public Table test(Table obj) { int o = __offset(20); return o != 0 ? __union(obj, o) : null; }
-  public Test test4(int j) { return test4(new Test(), j); }
-  public Test test4(Test obj, int j) { int o = __offset(22); return o != 0 ? obj.__assign(__vector(o) + j * 4, bb) : null; }
-  public int test4Length() { int o = __offset(22); return o != 0 ? __vector_len(o) : 0; }
-  public String testarrayofstring(int j) { int o = __offset(24); return o != 0 ? __string(__vector(o) + j * 4) : null; }
-  public int testarrayofstringLength() { int o = __offset(24); return o != 0 ? __vector_len(o) : 0; }
-  /**
-   * an example documentation comment: this will end up in the generated code
-   * multiline too
-   */
-  public Monster testarrayoftables(int j) { return testarrayoftables(new Monster(), j); }
-  public Monster testarrayoftables(Monster obj, int j) { int o = __offset(26); return o != 0 ? obj.__assign(__indirect(__vector(o) + j * 4), bb) : null; }
-  public int testarrayoftablesLength() { int o = __offset(26); return o != 0 ? __vector_len(o) : 0; }
-  public Monster enemy() { return enemy(new Monster()); }
-  public Monster enemy(Monster obj) { int o = __offset(28); return o != 0 ? obj.__assign(__indirect(o + bb_pos), bb) : null; }
-  public int testnestedflatbuffer(int j) { int o = __offset(30); return o != 0 ? bb.get(__vector(o) + j * 1) & 0xFF : 0; }
-  public int testnestedflatbufferLength() { int o = __offset(30); return o != 0 ? __vector_len(o) : 0; }
-  public ByteBuffer testnestedflatbufferAsByteBuffer() { return __vector_as_bytebuffer(30, 1); }
-  public Monster testnestedflatbufferAsMonster() { return testnestedflatbufferAsMonster(new Monster()); }
-  public Monster testnestedflatbufferAsMonster(Monster obj) { int o = __offset(30); return o != 0 ? obj.__assign(__indirect(__vector(o)), bb) : null; }
-  public boolean mutateTestnestedflatbuffer(int j, int testnestedflatbuffer) { int o = __offset(30); if (o != 0) { bb.put(__vector(o) + j * 1, (byte)testnestedflatbuffer); return true; } else { return false; } }
-  public Stat testempty() { return testempty(new Stat()); }
-  public Stat testempty(Stat obj) { int o = __offset(32); return o != 0 ? obj.__assign(__indirect(o + bb_pos), bb) : null; }
-  public boolean testbool() { int o = __offset(34); return o != 0 ? 0!=bb.get(o + bb_pos) : false; }
-  public boolean mutateTestbool(boolean testbool) { int o = __offset(34); if (o != 0) { bb.put(o + bb_pos, (byte)(testbool ? 1 : 0)); return true; } else { return false; } }
-  public int testhashs32Fnv1() { int o = __offset(36); return o != 0 ? bb.getInt(o + bb_pos) : 0; }
-  public boolean mutateTesthashs32Fnv1(int testhashs32_fnv1) { int o = __offset(36); if (o != 0) { bb.putInt(o + bb_pos, testhashs32_fnv1); return true; } else { return false; } }
-  public long testhashu32Fnv1() { int o = __offset(38); return o != 0 ? (long)bb.getInt(o + bb_pos) & 0xFFFFFFFFL : 0L; }
-  public boolean mutateTesthashu32Fnv1(long testhashu32_fnv1) { int o = __offset(38); if (o != 0) { bb.putInt(o + bb_pos, (int)testhashu32_fnv1); return true; } else { return false; } }
-  public long testhashs64Fnv1() { int o = __offset(40); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
-  public boolean mutateTesthashs64Fnv1(long testhashs64_fnv1) { int o = __offset(40); if (o != 0) { bb.putLong(o + bb_pos, testhashs64_fnv1); return true; } else { return false; } }
-  public long testhashu64Fnv1() { int o = __offset(42); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
-  public boolean mutateTesthashu64Fnv1(long testhashu64_fnv1) { int o = __offset(42); if (o != 0) { bb.putLong(o + bb_pos, testhashu64_fnv1); return true; } else { return false; } }
-  public int testhashs32Fnv1a() { int o = __offset(44); return o != 0 ? bb.getInt(o + bb_pos) : 0; }
-  public boolean mutateTesthashs32Fnv1a(int testhashs32_fnv1a) { int o = __offset(44); if (o != 0) { bb.putInt(o + bb_pos, testhashs32_fnv1a); return true; } else { return false; } }
-  public long testhashu32Fnv1a() { int o = __offset(46); return o != 0 ? (long)bb.getInt(o + bb_pos) & 0xFFFFFFFFL : 0L; }
-  public boolean mutateTesthashu32Fnv1a(long testhashu32_fnv1a) { int o = __offset(46); if (o != 0) { bb.putInt(o + bb_pos, (int)testhashu32_fnv1a); return true; } else { return false; } }
-  public long testhashs64Fnv1a() { int o = __offset(48); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
-  public boolean mutateTesthashs64Fnv1a(long testhashs64_fnv1a) { int o = __offset(48); if (o != 0) { bb.putLong(o + bb_pos, testhashs64_fnv1a); return true; } else { return false; } }
-  public long testhashu64Fnv1a() { int o = __offset(50); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
-  public boolean mutateTesthashu64Fnv1a(long testhashu64_fnv1a) { int o = __offset(50); if (o != 0) { bb.putLong(o + bb_pos, testhashu64_fnv1a); return true; } else { return false; } }
-  public boolean testarrayofbools(int j) { int o = __offset(52); return o != 0 ? 0!=bb.get(__vector(o) + j * 1) : false; }
-  public int testarrayofboolsLength() { int o = __offset(52); return o != 0 ? __vector_len(o) : 0; }
-  public ByteBuffer testarrayofboolsAsByteBuffer() { return __vector_as_bytebuffer(52, 1); }
-  public boolean mutateTestarrayofbools(int j, boolean testarrayofbools) { int o = __offset(52); if (o != 0) { bb.put(__vector(o) + j * 1, (byte)(testarrayofbools ? 1 : 0)); return true; } else { return false; } }
-  public float testf() { int o = __offset(54); return o != 0 ? bb.getFloat(o + bb_pos) : 3.14159f; }
-  public boolean mutateTestf(float testf) { int o = __offset(54); if (o != 0) { bb.putFloat(o + bb_pos, testf); return true; } else { return false; } }
-  public float testf2() { int o = __offset(56); return o != 0 ? bb.getFloat(o + bb_pos) : 3.0f; }
-  public boolean mutateTestf2(float testf2) { int o = __offset(56); if (o != 0) { bb.putFloat(o + bb_pos, testf2); return true; } else { return false; } }
-  public float testf3() { int o = __offset(58); return o != 0 ? bb.getFloat(o + bb_pos) : 0.0f; }
-  public boolean mutateTestf3(float testf3) { int o = __offset(58); if (o != 0) { bb.putFloat(o + bb_pos, testf3); return true; } else { return false; } }
-  public String testarrayofstring2(int j) { int o = __offset(60); return o != 0 ? __string(__vector(o) + j * 4) : null; }
-  public int testarrayofstring2Length() { int o = __offset(60); return o != 0 ? __vector_len(o) : 0; }
-  public Ability testarrayofsortedstruct(int j) { return testarrayofsortedstruct(new Ability(), j); }
-  public Ability testarrayofsortedstruct(Ability obj, int j) { int o = __offset(62); return o != 0 ? obj.__assign(__vector(o) + j * 8, bb) : null; }
-  public int testarrayofsortedstructLength() { int o = __offset(62); return o != 0 ? __vector_len(o) : 0; }
-
-  public static void startMonster(FlatBufferBuilder builder) { builder.startObject(30); }
-  public static void addPos(FlatBufferBuilder builder, int posOffset) { builder.addStruct(0, posOffset, 0); }
-  public static void addMana(FlatBufferBuilder builder, short mana) { builder.addShort(1, mana, 150); }
-  public static void addHp(FlatBufferBuilder builder, short hp) { builder.addShort(2, hp, 100); }
-  public static void addName(FlatBufferBuilder builder, int nameOffset) { builder.addOffset(3, nameOffset, 0); }
-  public static void addInventory(FlatBufferBuilder builder, int inventoryOffset) { builder.addOffset(5, inventoryOffset, 0); }
-  public static int createInventoryVector(FlatBufferBuilder builder, byte[] data) { builder.startVector(1, data.length, 1); for (int i = data.length - 1; i >= 0; i--) builder.addByte(data[i]); return builder.endVector(); }
-  public static void startInventoryVector(FlatBufferBuilder builder, int numElems) { builder.startVector(1, numElems, 1); }
-  public static void addColor(FlatBufferBuilder builder, byte color) { builder.addByte(6, color, 8); }
-  public static void addTestType(FlatBufferBuilder builder, byte testType) { builder.addByte(7, testType, 0); }
-  public static void addTest(FlatBufferBuilder builder, int testOffset) { builder.addOffset(8, testOffset, 0); }
-  public static void addTest4(FlatBufferBuilder builder, int test4Offset) { builder.addOffset(9, test4Offset, 0); }
-  public static void startTest4Vector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 2); }
-  public static void addTestarrayofstring(FlatBufferBuilder builder, int testarrayofstringOffset) { builder.addOffset(10, testarrayofstringOffset, 0); }
-  public static int createTestarrayofstringVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
-  public static void startTestarrayofstringVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
-  public static void addTestarrayoftables(FlatBufferBuilder builder, int testarrayoftablesOffset) { builder.addOffset(11, testarrayoftablesOffset, 0); }
-  public static int createTestarrayoftablesVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
-  public static void startTestarrayoftablesVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
-  public static void addEnemy(FlatBufferBuilder builder, int enemyOffset) { builder.addOffset(12, enemyOffset, 0); }
-  public static void addTestnestedflatbuffer(FlatBufferBuilder builder, int testnestedflatbufferOffset) { builder.addOffset(13, testnestedflatbufferOffset, 0); }
-  public static int createTestnestedflatbufferVector(FlatBufferBuilder builder, byte[] data) { builder.startVector(1, data.length, 1); for (int i = data.length - 1; i >= 0; i--) builder.addByte(data[i]); return builder.endVector(); }
-  public static void startTestnestedflatbufferVector(FlatBufferBuilder builder, int numElems) { builder.startVector(1, numElems, 1); }
-  public static void addTestempty(FlatBufferBuilder builder, int testemptyOffset) { builder.addOffset(14, testemptyOffset, 0); }
-  public static void addTestbool(FlatBufferBuilder builder, boolean testbool) { builder.addBoolean(15, testbool, false); }
-  public static void addTesthashs32Fnv1(FlatBufferBuilder builder, int testhashs32Fnv1) { builder.addInt(16, testhashs32Fnv1, 0); }
-  public static void addTesthashu32Fnv1(FlatBufferBuilder builder, long testhashu32Fnv1) { builder.addInt(17, (int)testhashu32Fnv1, (int)0L); }
-  public static void addTesthashs64Fnv1(FlatBufferBuilder builder, long testhashs64Fnv1) { builder.addLong(18, testhashs64Fnv1, 0L); }
-  public static void addTesthashu64Fnv1(FlatBufferBuilder builder, long testhashu64Fnv1) { builder.addLong(19, testhashu64Fnv1, 0L); }
-  public static void addTesthashs32Fnv1a(FlatBufferBuilder builder, int testhashs32Fnv1a) { builder.addInt(20, testhashs32Fnv1a, 0); }
-  public static void addTesthashu32Fnv1a(FlatBufferBuilder builder, long testhashu32Fnv1a) { builder.addInt(21, (int)testhashu32Fnv1a, (int)0L); }
-  public static void addTesthashs64Fnv1a(FlatBufferBuilder builder, long testhashs64Fnv1a) { builder.addLong(22, testhashs64Fnv1a, 0L); }
-  public static void addTesthashu64Fnv1a(FlatBufferBuilder builder, long testhashu64Fnv1a) { builder.addLong(23, testhashu64Fnv1a, 0L); }
-  public static void addTestarrayofbools(FlatBufferBuilder builder, int testarrayofboolsOffset) { builder.addOffset(24, testarrayofboolsOffset, 0); }
-  public static int createTestarrayofboolsVector(FlatBufferBuilder builder, boolean[] data) { builder.startVector(1, data.length, 1); for (int i = data.length - 1; i >= 0; i--) builder.addBoolean(data[i]); return builder.endVector(); }
-  public static void startTestarrayofboolsVector(FlatBufferBuilder builder, int numElems) { builder.startVector(1, numElems, 1); }
-  public static void addTestf(FlatBufferBuilder builder, float testf) { builder.addFloat(25, testf, 3.14159f); }
-  public static void addTestf2(FlatBufferBuilder builder, float testf2) { builder.addFloat(26, testf2, 3.0f); }
-  public static void addTestf3(FlatBufferBuilder builder, float testf3) { builder.addFloat(27, testf3, 0.0f); }
-  public static void addTestarrayofstring2(FlatBufferBuilder builder, int testarrayofstring2Offset) { builder.addOffset(28, testarrayofstring2Offset, 0); }
-  public static int createTestarrayofstring2Vector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
-  public static void startTestarrayofstring2Vector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
-  public static void addTestarrayofsortedstruct(FlatBufferBuilder builder, int testarrayofsortedstructOffset) { builder.addOffset(29, testarrayofsortedstructOffset, 0); }
-  public static void startTestarrayofsortedstructVector(FlatBufferBuilder builder, int numElems) { builder.startVector(8, numElems, 4); }
-  public static int endMonster(FlatBufferBuilder builder) {
-    int o = builder.endObject();
-    builder.required(o, 10);  // name
-    return o;
-  }
-  public static void finishMonsterBuffer(FlatBufferBuilder builder, int offset) { builder.finish(offset, "MONS"); }
-
-  @Override
-  protected int keysCompare(Integer o1, Integer o2, ByteBuffer _bb) { return compareStrings(__offset(10, o1, _bb), __offset(10, o2, _bb), _bb); }
-
-  public static Monster lookupByKey(int vectorOffset, String key, ByteBuffer bb) {
-    byte[] byteKey = key.getBytes(Table.UTF8_CHARSET.get());
-    int vectorLocation = bb.array().length - vectorOffset;
-    int span = bb.getInt(vectorLocation);
-    int start = 0;
-    vectorLocation += 4;
-    while (span != 0) {
-      int middle = span / 2;
-      int tableOffset = __indirect(vectorLocation + 4 * (start + middle), bb);
-      int comp = compareStrings(__offset(10, bb.array().length - tableOffset, bb), byteKey, bb);
-      if (comp > 0) {
-        span = middle;
-      } else if (comp < 0) {
-        middle++;
-        start += middle;
-        span -= middle;
-      } else {
-        return new Monster().__assign(tableOffset, bb);
-      }
-    }
-    return null;
-  }
-}
-
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Monster.php b/third_party/flatbuffers/tests/MyGame/Example/Monster.php
deleted file mode 100644
index a866870..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Monster.php
+++ /dev/null
@@ -1,943 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame\Example;
-
-use \Google\FlatBuffers\Struct;
-use \Google\FlatBuffers\Table;
-use \Google\FlatBuffers\ByteBuffer;
-use \Google\FlatBuffers\FlatBufferBuilder;
-
-/// an example documentation comment: monster object
-class Monster extends Table
-{
-    /**
-     * @param ByteBuffer $bb
-     * @return Monster
-     */
-    public static function getRootAsMonster(ByteBuffer $bb)
-    {
-        $obj = new Monster();
-        return ($obj->init($bb->getInt($bb->getPosition()) + $bb->getPosition(), $bb));
-    }
-
-    public static function MonsterIdentifier()
-    {
-        return "MONS";
-    }
-
-    public static function MonsterBufferHasIdentifier(ByteBuffer $buf)
-    {
-        return self::__has_identifier($buf, self::MonsterIdentifier());
-    }
-
-    public static function MonsterExtension()
-    {
-        return "mon";
-    }
-
-    /**
-     * @param int $_i offset
-     * @param ByteBuffer $_bb
-     * @return Monster
-     **/
-    public function init($_i, ByteBuffer $_bb)
-    {
-        $this->bb_pos = $_i;
-        $this->bb = $_bb;
-        return $this;
-    }
-
-    public function getPos()
-    {
-        $obj = new Vec3();
-        $o = $this->__offset(4);
-        return $o != 0 ? $obj->init($o + $this->bb_pos, $this->bb) : 0;
-    }
-
-    /**
-     * @return short
-     */
-    public function getMana()
-    {
-        $o = $this->__offset(6);
-        return $o != 0 ? $this->bb->getShort($o + $this->bb_pos) : 150;
-    }
-
-    /**
-     * @return short
-     */
-    public function getHp()
-    {
-        $o = $this->__offset(8);
-        return $o != 0 ? $this->bb->getShort($o + $this->bb_pos) : 100;
-    }
-
-    public function getName()
-    {
-        $o = $this->__offset(10);
-        return $o != 0 ? $this->__string($o + $this->bb_pos) : null;
-    }
-
-    /**
-     * @param int offset
-     * @return byte
-     */
-    public function getInventory($j)
-    {
-        $o = $this->__offset(14);
-        return $o != 0 ? $this->bb->getByte($this->__vector($o) + $j * 1) : 0;
-    }
-
-    /**
-     * @return int
-     */
-    public function getInventoryLength()
-    {
-        $o = $this->__offset(14);
-        return $o != 0 ? $this->__vector_len($o) : 0;
-    }
-
-    /**
-     * @return string
-     */
-    public function getInventoryBytes()
-    {
-        return $this->__vector_as_bytes(14);
-    }
-
-    /**
-     * @return sbyte
-     */
-    public function getColor()
-    {
-        $o = $this->__offset(16);
-        return $o != 0 ? $this->bb->getSbyte($o + $this->bb_pos) : \MyGame\Example\Color::Blue;
-    }
-
-    /**
-     * @return byte
-     */
-    public function getTestType()
-    {
-        $o = $this->__offset(18);
-        return $o != 0 ? $this->bb->getByte($o + $this->bb_pos) : \MyGame\Example\Any::NONE;
-    }
-
-    /**
-     * @returnint
-     */
-    public function getTest($obj)
-    {
-        $o = $this->__offset(20);
-        return $o != 0 ? $this->__union($obj, $o) : null;
-    }
-
-    /**
-     * @returnVectorOffset
-     */
-    public function getTest4($j)
-    {
-        $o = $this->__offset(22);
-        $obj = new Test();
-        return $o != 0 ? $obj->init($this->__vector($o) + $j *4, $this->bb) : null;
-    }
-
-    /**
-     * @return int
-     */
-    public function getTest4Length()
-    {
-        $o = $this->__offset(22);
-        return $o != 0 ? $this->__vector_len($o) : 0;
-    }
-
-    /**
-     * @param int offset
-     * @return string
-     */
-    public function getTestarrayofstring($j)
-    {
-        $o = $this->__offset(24);
-        return $o != 0 ? $this->__string($this->__vector($o) + $j * 4) : 0;
-    }
-
-    /**
-     * @return int
-     */
-    public function getTestarrayofstringLength()
-    {
-        $o = $this->__offset(24);
-        return $o != 0 ? $this->__vector_len($o) : 0;
-    }
-
-/// an example documentation comment: this will end up in the generated code
-/// multiline too
-    /**
-     * @returnVectorOffset
-     */
-    public function getTestarrayoftables($j)
-    {
-        $o = $this->__offset(26);
-        $obj = new Monster();
-        return $o != 0 ? $obj->init($this->__indirect($this->__vector($o) + $j * 4), $this->bb) : null;
-    }
-
-    /**
-     * @return int
-     */
-    public function getTestarrayoftablesLength()
-    {
-        $o = $this->__offset(26);
-        return $o != 0 ? $this->__vector_len($o) : 0;
-    }
-
-    public function getEnemy()
-    {
-        $obj = new Monster();
-        $o = $this->__offset(28);
-        return $o != 0 ? $obj->init($this->__indirect($o + $this->bb_pos), $this->bb) : 0;
-    }
-
-    /**
-     * @param int offset
-     * @return byte
-     */
-    public function getTestnestedflatbuffer($j)
-    {
-        $o = $this->__offset(30);
-        return $o != 0 ? $this->bb->getByte($this->__vector($o) + $j * 1) : 0;
-    }
-
-    /**
-     * @return int
-     */
-    public function getTestnestedflatbufferLength()
-    {
-        $o = $this->__offset(30);
-        return $o != 0 ? $this->__vector_len($o) : 0;
-    }
-
-    /**
-     * @return string
-     */
-    public function getTestnestedflatbufferBytes()
-    {
-        return $this->__vector_as_bytes(30);
-    }
-
-    public function getTestempty()
-    {
-        $obj = new Stat();
-        $o = $this->__offset(32);
-        return $o != 0 ? $obj->init($this->__indirect($o + $this->bb_pos), $this->bb) : 0;
-    }
-
-    /**
-     * @return bool
-     */
-    public function getTestbool()
-    {
-        $o = $this->__offset(34);
-        return $o != 0 ? $this->bb->getBool($o + $this->bb_pos) : false;
-    }
-
-    /**
-     * @return int
-     */
-    public function getTesthashs32Fnv1()
-    {
-        $o = $this->__offset(36);
-        return $o != 0 ? $this->bb->getInt($o + $this->bb_pos) : 0;
-    }
-
-    /**
-     * @return uint
-     */
-    public function getTesthashu32Fnv1()
-    {
-        $o = $this->__offset(38);
-        return $o != 0 ? $this->bb->getUint($o + $this->bb_pos) : 0;
-    }
-
-    /**
-     * @return long
-     */
-    public function getTesthashs64Fnv1()
-    {
-        $o = $this->__offset(40);
-        return $o != 0 ? $this->bb->getLong($o + $this->bb_pos) : 0;
-    }
-
-    /**
-     * @return ulong
-     */
-    public function getTesthashu64Fnv1()
-    {
-        $o = $this->__offset(42);
-        return $o != 0 ? $this->bb->getUlong($o + $this->bb_pos) : 0;
-    }
-
-    /**
-     * @return int
-     */
-    public function getTesthashs32Fnv1a()
-    {
-        $o = $this->__offset(44);
-        return $o != 0 ? $this->bb->getInt($o + $this->bb_pos) : 0;
-    }
-
-    /**
-     * @return uint
-     */
-    public function getTesthashu32Fnv1a()
-    {
-        $o = $this->__offset(46);
-        return $o != 0 ? $this->bb->getUint($o + $this->bb_pos) : 0;
-    }
-
-    /**
-     * @return long
-     */
-    public function getTesthashs64Fnv1a()
-    {
-        $o = $this->__offset(48);
-        return $o != 0 ? $this->bb->getLong($o + $this->bb_pos) : 0;
-    }
-
-    /**
-     * @return ulong
-     */
-    public function getTesthashu64Fnv1a()
-    {
-        $o = $this->__offset(50);
-        return $o != 0 ? $this->bb->getUlong($o + $this->bb_pos) : 0;
-    }
-
-    /**
-     * @param int offset
-     * @return bool
-     */
-    public function getTestarrayofbools($j)
-    {
-        $o = $this->__offset(52);
-        return $o != 0 ? $this->bb->getBool($this->__vector($o) + $j * 1) : 0;
-    }
-
-    /**
-     * @return int
-     */
-    public function getTestarrayofboolsLength()
-    {
-        $o = $this->__offset(52);
-        return $o != 0 ? $this->__vector_len($o) : 0;
-    }
-
-    /**
-     * @return float
-     */
-    public function getTestf()
-    {
-        $o = $this->__offset(54);
-        return $o != 0 ? $this->bb->getFloat($o + $this->bb_pos) : 3.14159;
-    }
-
-    /**
-     * @return float
-     */
-    public function getTestf2()
-    {
-        $o = $this->__offset(56);
-        return $o != 0 ? $this->bb->getFloat($o + $this->bb_pos) : 3.0;
-    }
-
-    /**
-     * @return float
-     */
-    public function getTestf3()
-    {
-        $o = $this->__offset(58);
-        return $o != 0 ? $this->bb->getFloat($o + $this->bb_pos) : 0.0;
-    }
-
-    /**
-     * @param int offset
-     * @return string
-     */
-    public function getTestarrayofstring2($j)
-    {
-        $o = $this->__offset(60);
-        return $o != 0 ? $this->__string($this->__vector($o) + $j * 4) : 0;
-    }
-
-    /**
-     * @return int
-     */
-    public function getTestarrayofstring2Length()
-    {
-        $o = $this->__offset(60);
-        return $o != 0 ? $this->__vector_len($o) : 0;
-    }
-
-    /**
-     * @returnVectorOffset
-     */
-    public function getTestarrayofsortedstruct($j)
-    {
-        $o = $this->__offset(62);
-        $obj = new Ability();
-        return $o != 0 ? $obj->init($this->__vector($o) + $j *8, $this->bb) : null;
-    }
-
-    /**
-     * @return int
-     */
-    public function getTestarrayofsortedstructLength()
-    {
-        $o = $this->__offset(62);
-        return $o != 0 ? $this->__vector_len($o) : 0;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return void
-     */
-    public static function startMonster(FlatBufferBuilder $builder)
-    {
-        $builder->StartObject(30);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return Monster
-     */
-    public static function createMonster(FlatBufferBuilder $builder, $pos, $mana, $hp, $name, $inventory, $color, $test_type, $test, $test4, $testarrayofstring, $testarrayoftables, $enemy, $testnestedflatbuffer, $testempty, $testbool, $testhashs32_fnv1, $testhashu32_fnv1, $testhashs64_fnv1, $testhashu64_fnv1, $testhashs32_fnv1a, $testhashu32_fnv1a, $testhashs64_fnv1a, $testhashu64_fnv1a, $testarrayofbools, $testf, $testf2, $testf3, $testarrayofstring2, $testarrayofsortedstruct)
-    {
-        $builder->startObject(30);
-        self::addPos($builder, $pos);
-        self::addMana($builder, $mana);
-        self::addHp($builder, $hp);
-        self::addName($builder, $name);
-        self::addInventory($builder, $inventory);
-        self::addColor($builder, $color);
-        self::addTestType($builder, $test_type);
-        self::addTest($builder, $test);
-        self::addTest4($builder, $test4);
-        self::addTestarrayofstring($builder, $testarrayofstring);
-        self::addTestarrayoftables($builder, $testarrayoftables);
-        self::addEnemy($builder, $enemy);
-        self::addTestnestedflatbuffer($builder, $testnestedflatbuffer);
-        self::addTestempty($builder, $testempty);
-        self::addTestbool($builder, $testbool);
-        self::addTesthashs32Fnv1($builder, $testhashs32_fnv1);
-        self::addTesthashu32Fnv1($builder, $testhashu32_fnv1);
-        self::addTesthashs64Fnv1($builder, $testhashs64_fnv1);
-        self::addTesthashu64Fnv1($builder, $testhashu64_fnv1);
-        self::addTesthashs32Fnv1a($builder, $testhashs32_fnv1a);
-        self::addTesthashu32Fnv1a($builder, $testhashu32_fnv1a);
-        self::addTesthashs64Fnv1a($builder, $testhashs64_fnv1a);
-        self::addTesthashu64Fnv1a($builder, $testhashu64_fnv1a);
-        self::addTestarrayofbools($builder, $testarrayofbools);
-        self::addTestf($builder, $testf);
-        self::addTestf2($builder, $testf2);
-        self::addTestf3($builder, $testf3);
-        self::addTestarrayofstring2($builder, $testarrayofstring2);
-        self::addTestarrayofsortedstruct($builder, $testarrayofsortedstruct);
-        $o = $builder->endObject();
-        $builder->required($o, 10);  // name
-        return $o;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int
-     * @return void
-     */
-    public static function addPos(FlatBufferBuilder $builder, $pos)
-    {
-        $builder->addStructX(0, $pos, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param short
-     * @return void
-     */
-    public static function addMana(FlatBufferBuilder $builder, $mana)
-    {
-        $builder->addShortX(1, $mana, 150);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param short
-     * @return void
-     */
-    public static function addHp(FlatBufferBuilder $builder, $hp)
-    {
-        $builder->addShortX(2, $hp, 100);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param StringOffset
-     * @return void
-     */
-    public static function addName(FlatBufferBuilder $builder, $name)
-    {
-        $builder->addOffsetX(3, $name, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param VectorOffset
-     * @return void
-     */
-    public static function addInventory(FlatBufferBuilder $builder, $inventory)
-    {
-        $builder->addOffsetX(5, $inventory, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param array offset array
-     * @return int vector offset
-     */
-    public static function createInventoryVector(FlatBufferBuilder $builder, array $data)
-    {
-        $builder->startVector(1, count($data), 1);
-        for ($i = count($data) - 1; $i >= 0; $i--) {
-            $builder->addByte($data[$i]);
-        }
-        return $builder->endVector();
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int $numElems
-     * @return void
-     */
-    public static function startInventoryVector(FlatBufferBuilder $builder, $numElems)
-    {
-        $builder->startVector(1, $numElems, 1);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param sbyte
-     * @return void
-     */
-    public static function addColor(FlatBufferBuilder $builder, $color)
-    {
-        $builder->addSbyteX(6, $color, 8);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param byte
-     * @return void
-     */
-    public static function addTestType(FlatBufferBuilder $builder, $testType)
-    {
-        $builder->addByteX(7, $testType, 0);
-    }
-
-    public static function addTest(FlatBufferBuilder $builder, $offset)
-    {
-        $builder->addOffsetX(8, $offset, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param VectorOffset
-     * @return void
-     */
-    public static function addTest4(FlatBufferBuilder $builder, $test4)
-    {
-        $builder->addOffsetX(9, $test4, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param array offset array
-     * @return int vector offset
-     */
-    public static function createTest4Vector(FlatBufferBuilder $builder, array $data)
-    {
-        $builder->startVector(4, count($data), 2);
-        for ($i = count($data) - 1; $i >= 0; $i--) {
-            $builder->addOffset($data[$i]);
-        }
-        return $builder->endVector();
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int $numElems
-     * @return void
-     */
-    public static function startTest4Vector(FlatBufferBuilder $builder, $numElems)
-    {
-        $builder->startVector(4, $numElems, 2);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param VectorOffset
-     * @return void
-     */
-    public static function addTestarrayofstring(FlatBufferBuilder $builder, $testarrayofstring)
-    {
-        $builder->addOffsetX(10, $testarrayofstring, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param array offset array
-     * @return int vector offset
-     */
-    public static function createTestarrayofstringVector(FlatBufferBuilder $builder, array $data)
-    {
-        $builder->startVector(4, count($data), 4);
-        for ($i = count($data) - 1; $i >= 0; $i--) {
-            $builder->addOffset($data[$i]);
-        }
-        return $builder->endVector();
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int $numElems
-     * @return void
-     */
-    public static function startTestarrayofstringVector(FlatBufferBuilder $builder, $numElems)
-    {
-        $builder->startVector(4, $numElems, 4);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param VectorOffset
-     * @return void
-     */
-    public static function addTestarrayoftables(FlatBufferBuilder $builder, $testarrayoftables)
-    {
-        $builder->addOffsetX(11, $testarrayoftables, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param array offset array
-     * @return int vector offset
-     */
-    public static function createTestarrayoftablesVector(FlatBufferBuilder $builder, array $data)
-    {
-        $builder->startVector(4, count($data), 4);
-        for ($i = count($data) - 1; $i >= 0; $i--) {
-            $builder->addOffset($data[$i]);
-        }
-        return $builder->endVector();
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int $numElems
-     * @return void
-     */
-    public static function startTestarrayoftablesVector(FlatBufferBuilder $builder, $numElems)
-    {
-        $builder->startVector(4, $numElems, 4);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int
-     * @return void
-     */
-    public static function addEnemy(FlatBufferBuilder $builder, $enemy)
-    {
-        $builder->addOffsetX(12, $enemy, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param VectorOffset
-     * @return void
-     */
-    public static function addTestnestedflatbuffer(FlatBufferBuilder $builder, $testnestedflatbuffer)
-    {
-        $builder->addOffsetX(13, $testnestedflatbuffer, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param array offset array
-     * @return int vector offset
-     */
-    public static function createTestnestedflatbufferVector(FlatBufferBuilder $builder, array $data)
-    {
-        $builder->startVector(1, count($data), 1);
-        for ($i = count($data) - 1; $i >= 0; $i--) {
-            $builder->addByte($data[$i]);
-        }
-        return $builder->endVector();
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int $numElems
-     * @return void
-     */
-    public static function startTestnestedflatbufferVector(FlatBufferBuilder $builder, $numElems)
-    {
-        $builder->startVector(1, $numElems, 1);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int
-     * @return void
-     */
-    public static function addTestempty(FlatBufferBuilder $builder, $testempty)
-    {
-        $builder->addOffsetX(14, $testempty, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param bool
-     * @return void
-     */
-    public static function addTestbool(FlatBufferBuilder $builder, $testbool)
-    {
-        $builder->addBoolX(15, $testbool, false);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int
-     * @return void
-     */
-    public static function addTesthashs32Fnv1(FlatBufferBuilder $builder, $testhashs32Fnv1)
-    {
-        $builder->addIntX(16, $testhashs32Fnv1, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param uint
-     * @return void
-     */
-    public static function addTesthashu32Fnv1(FlatBufferBuilder $builder, $testhashu32Fnv1)
-    {
-        $builder->addUintX(17, $testhashu32Fnv1, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param long
-     * @return void
-     */
-    public static function addTesthashs64Fnv1(FlatBufferBuilder $builder, $testhashs64Fnv1)
-    {
-        $builder->addLongX(18, $testhashs64Fnv1, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param ulong
-     * @return void
-     */
-    public static function addTesthashu64Fnv1(FlatBufferBuilder $builder, $testhashu64Fnv1)
-    {
-        $builder->addUlongX(19, $testhashu64Fnv1, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int
-     * @return void
-     */
-    public static function addTesthashs32Fnv1a(FlatBufferBuilder $builder, $testhashs32Fnv1a)
-    {
-        $builder->addIntX(20, $testhashs32Fnv1a, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param uint
-     * @return void
-     */
-    public static function addTesthashu32Fnv1a(FlatBufferBuilder $builder, $testhashu32Fnv1a)
-    {
-        $builder->addUintX(21, $testhashu32Fnv1a, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param long
-     * @return void
-     */
-    public static function addTesthashs64Fnv1a(FlatBufferBuilder $builder, $testhashs64Fnv1a)
-    {
-        $builder->addLongX(22, $testhashs64Fnv1a, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param ulong
-     * @return void
-     */
-    public static function addTesthashu64Fnv1a(FlatBufferBuilder $builder, $testhashu64Fnv1a)
-    {
-        $builder->addUlongX(23, $testhashu64Fnv1a, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param VectorOffset
-     * @return void
-     */
-    public static function addTestarrayofbools(FlatBufferBuilder $builder, $testarrayofbools)
-    {
-        $builder->addOffsetX(24, $testarrayofbools, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param array offset array
-     * @return int vector offset
-     */
-    public static function createTestarrayofboolsVector(FlatBufferBuilder $builder, array $data)
-    {
-        $builder->startVector(1, count($data), 1);
-        for ($i = count($data) - 1; $i >= 0; $i--) {
-            $builder->addBool($data[$i]);
-        }
-        return $builder->endVector();
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int $numElems
-     * @return void
-     */
-    public static function startTestarrayofboolsVector(FlatBufferBuilder $builder, $numElems)
-    {
-        $builder->startVector(1, $numElems, 1);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param float
-     * @return void
-     */
-    public static function addTestf(FlatBufferBuilder $builder, $testf)
-    {
-        $builder->addFloatX(25, $testf, 3.14159);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param float
-     * @return void
-     */
-    public static function addTestf2(FlatBufferBuilder $builder, $testf2)
-    {
-        $builder->addFloatX(26, $testf2, 3.0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param float
-     * @return void
-     */
-    public static function addTestf3(FlatBufferBuilder $builder, $testf3)
-    {
-        $builder->addFloatX(27, $testf3, 0.0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param VectorOffset
-     * @return void
-     */
-    public static function addTestarrayofstring2(FlatBufferBuilder $builder, $testarrayofstring2)
-    {
-        $builder->addOffsetX(28, $testarrayofstring2, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param array offset array
-     * @return int vector offset
-     */
-    public static function createTestarrayofstring2Vector(FlatBufferBuilder $builder, array $data)
-    {
-        $builder->startVector(4, count($data), 4);
-        for ($i = count($data) - 1; $i >= 0; $i--) {
-            $builder->addOffset($data[$i]);
-        }
-        return $builder->endVector();
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int $numElems
-     * @return void
-     */
-    public static function startTestarrayofstring2Vector(FlatBufferBuilder $builder, $numElems)
-    {
-        $builder->startVector(4, $numElems, 4);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param VectorOffset
-     * @return void
-     */
-    public static function addTestarrayofsortedstruct(FlatBufferBuilder $builder, $testarrayofsortedstruct)
-    {
-        $builder->addOffsetX(29, $testarrayofsortedstruct, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param array offset array
-     * @return int vector offset
-     */
-    public static function createTestarrayofsortedstructVector(FlatBufferBuilder $builder, array $data)
-    {
-        $builder->startVector(8, count($data), 4);
-        for ($i = count($data) - 1; $i >= 0; $i--) {
-            $builder->addOffset($data[$i]);
-        }
-        return $builder->endVector();
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int $numElems
-     * @return void
-     */
-    public static function startTestarrayofsortedstructVector(FlatBufferBuilder $builder, $numElems)
-    {
-        $builder->startVector(8, $numElems, 4);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return int table offset
-     */
-    public static function endMonster(FlatBufferBuilder $builder)
-    {
-        $o = $builder->endObject();
-        $builder->required($o, 10);  // name
-        return $o;
-    }
-
-    public static function finishMonsterBuffer(FlatBufferBuilder $builder, $offset)
-    {
-        $builder->finish($offset, "MONS");
-    }
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Monster.py b/third_party/flatbuffers/tests/MyGame/Example/Monster.py
deleted file mode 100644
index 75e54a1..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Monster.py
+++ /dev/null
@@ -1,357 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: Example
-
-import flatbuffers
-
-# /// an example documentation comment: monster object
-class Monster(object):
-    __slots__ = ['_tab']
-
-    @classmethod
-    def GetRootAsMonster(cls, buf, offset):
-        n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
-        x = Monster()
-        x.Init(buf, n + offset)
-        return x
-
-    # Monster
-    def Init(self, buf, pos):
-        self._tab = flatbuffers.table.Table(buf, pos)
-
-    # Monster
-    def Pos(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
-        if o != 0:
-            x = o + self._tab.Pos
-            from .Vec3 import Vec3
-            obj = Vec3()
-            obj.Init(self._tab.Bytes, x)
-            return obj
-        return None
-
-    # Monster
-    def Mana(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Int16Flags, o + self._tab.Pos)
-        return 150
-
-    # Monster
-    def Hp(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Int16Flags, o + self._tab.Pos)
-        return 100
-
-    # Monster
-    def Name(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
-        if o != 0:
-            return self._tab.String(o + self._tab.Pos)
-        return ""
-
-    # Monster
-    def Inventory(self, j):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
-        if o != 0:
-            a = self._tab.Vector(o)
-            return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
-        return 0
-
-    # Monster
-    def InventoryLength(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
-        if o != 0:
-            return self._tab.VectorLen(o)
-        return 0
-
-    # Monster
-    def Color(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos)
-        return 8
-
-    # Monster
-    def TestType(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
-        return 0
-
-    # Monster
-    def Test(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
-        if o != 0:
-            from flatbuffers.table import Table
-            obj = Table(bytearray(), 0)
-            self._tab.Union(obj, o)
-            return obj
-        return None
-
-    # Monster
-    def Test4(self, j):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
-        if o != 0:
-            x = self._tab.Vector(o)
-            x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4
-            from .Test import Test
-            obj = Test()
-            obj.Init(self._tab.Bytes, x)
-            return obj
-        return None
-
-    # Monster
-    def Test4Length(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
-        if o != 0:
-            return self._tab.VectorLen(o)
-        return 0
-
-    # Monster
-    def Testarrayofstring(self, j):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
-        if o != 0:
-            a = self._tab.Vector(o)
-            return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4))
-        return ""
-
-    # Monster
-    def TestarrayofstringLength(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
-        if o != 0:
-            return self._tab.VectorLen(o)
-        return 0
-
-# /// an example documentation comment: this will end up in the generated code
-# /// multiline too
-    # Monster
-    def Testarrayoftables(self, j):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26))
-        if o != 0:
-            x = self._tab.Vector(o)
-            x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4
-            x = self._tab.Indirect(x)
-            from .Monster import Monster
-            obj = Monster()
-            obj.Init(self._tab.Bytes, x)
-            return obj
-        return None
-
-    # Monster
-    def TestarrayoftablesLength(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26))
-        if o != 0:
-            return self._tab.VectorLen(o)
-        return 0
-
-    # Monster
-    def Enemy(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28))
-        if o != 0:
-            x = self._tab.Indirect(o + self._tab.Pos)
-            from .Monster import Monster
-            obj = Monster()
-            obj.Init(self._tab.Bytes, x)
-            return obj
-        return None
-
-    # Monster
-    def Testnestedflatbuffer(self, j):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30))
-        if o != 0:
-            a = self._tab.Vector(o)
-            return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
-        return 0
-
-    # Monster
-    def TestnestedflatbufferLength(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30))
-        if o != 0:
-            return self._tab.VectorLen(o)
-        return 0
-
-    # Monster
-    def Testempty(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32))
-        if o != 0:
-            x = self._tab.Indirect(o + self._tab.Pos)
-            from .Stat import Stat
-            obj = Stat()
-            obj.Init(self._tab.Bytes, x)
-            return obj
-        return None
-
-    # Monster
-    def Testbool(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(34))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)
-        return 0
-
-    # Monster
-    def Testhashs32Fnv1(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(36))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos)
-        return 0
-
-    # Monster
-    def Testhashu32Fnv1(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(38))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos)
-        return 0
-
-    # Monster
-    def Testhashs64Fnv1(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(40))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Int64Flags, o + self._tab.Pos)
-        return 0
-
-    # Monster
-    def Testhashu64Fnv1(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(42))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
-        return 0
-
-    # Monster
-    def Testhashs32Fnv1a(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(44))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos)
-        return 0
-
-    # Monster
-    def Testhashu32Fnv1a(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(46))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos)
-        return 0
-
-    # Monster
-    def Testhashs64Fnv1a(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(48))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Int64Flags, o + self._tab.Pos)
-        return 0
-
-    # Monster
-    def Testhashu64Fnv1a(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(50))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
-        return 0
-
-    # Monster
-    def Testarrayofbools(self, j):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(52))
-        if o != 0:
-            a = self._tab.Vector(o)
-            return self._tab.Get(flatbuffers.number_types.BoolFlags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
-        return 0
-
-    # Monster
-    def TestarrayofboolsLength(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(52))
-        if o != 0:
-            return self._tab.VectorLen(o)
-        return 0
-
-    # Monster
-    def Testf(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(54))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos)
-        return 3.14159
-
-    # Monster
-    def Testf2(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(56))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos)
-        return 3.0
-
-    # Monster
-    def Testf3(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(58))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos)
-        return 0.0
-
-    # Monster
-    def Testarrayofstring2(self, j):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(60))
-        if o != 0:
-            a = self._tab.Vector(o)
-            return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4))
-        return ""
-
-    # Monster
-    def Testarrayofstring2Length(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(60))
-        if o != 0:
-            return self._tab.VectorLen(o)
-        return 0
-
-    # Monster
-    def Testarrayofsortedstruct(self, j):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(62))
-        if o != 0:
-            x = self._tab.Vector(o)
-            x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 8
-            from .Ability import Ability
-            obj = Ability()
-            obj.Init(self._tab.Bytes, x)
-            return obj
-        return None
-
-    # Monster
-    def TestarrayofsortedstructLength(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(62))
-        if o != 0:
-            return self._tab.VectorLen(o)
-        return 0
-
-def MonsterStart(builder): builder.StartObject(30)
-def MonsterAddPos(builder, pos): builder.PrependStructSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(pos), 0)
-def MonsterAddMana(builder, mana): builder.PrependInt16Slot(1, mana, 150)
-def MonsterAddHp(builder, hp): builder.PrependInt16Slot(2, hp, 100)
-def MonsterAddName(builder, name): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0)
-def MonsterAddInventory(builder, inventory): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(inventory), 0)
-def MonsterStartInventoryVector(builder, numElems): return builder.StartVector(1, numElems, 1)
-def MonsterAddColor(builder, color): builder.PrependInt8Slot(6, color, 8)
-def MonsterAddTestType(builder, testType): builder.PrependUint8Slot(7, testType, 0)
-def MonsterAddTest(builder, test): builder.PrependUOffsetTRelativeSlot(8, flatbuffers.number_types.UOffsetTFlags.py_type(test), 0)
-def MonsterAddTest4(builder, test4): builder.PrependUOffsetTRelativeSlot(9, flatbuffers.number_types.UOffsetTFlags.py_type(test4), 0)
-def MonsterStartTest4Vector(builder, numElems): return builder.StartVector(4, numElems, 2)
-def MonsterAddTestarrayofstring(builder, testarrayofstring): builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(testarrayofstring), 0)
-def MonsterStartTestarrayofstringVector(builder, numElems): return builder.StartVector(4, numElems, 4)
-def MonsterAddTestarrayoftables(builder, testarrayoftables): builder.PrependUOffsetTRelativeSlot(11, flatbuffers.number_types.UOffsetTFlags.py_type(testarrayoftables), 0)
-def MonsterStartTestarrayoftablesVector(builder, numElems): return builder.StartVector(4, numElems, 4)
-def MonsterAddEnemy(builder, enemy): builder.PrependUOffsetTRelativeSlot(12, flatbuffers.number_types.UOffsetTFlags.py_type(enemy), 0)
-def MonsterAddTestnestedflatbuffer(builder, testnestedflatbuffer): builder.PrependUOffsetTRelativeSlot(13, flatbuffers.number_types.UOffsetTFlags.py_type(testnestedflatbuffer), 0)
-def MonsterStartTestnestedflatbufferVector(builder, numElems): return builder.StartVector(1, numElems, 1)
-def MonsterAddTestempty(builder, testempty): builder.PrependUOffsetTRelativeSlot(14, flatbuffers.number_types.UOffsetTFlags.py_type(testempty), 0)
-def MonsterAddTestbool(builder, testbool): builder.PrependBoolSlot(15, testbool, 0)
-def MonsterAddTesthashs32Fnv1(builder, testhashs32Fnv1): builder.PrependInt32Slot(16, testhashs32Fnv1, 0)
-def MonsterAddTesthashu32Fnv1(builder, testhashu32Fnv1): builder.PrependUint32Slot(17, testhashu32Fnv1, 0)
-def MonsterAddTesthashs64Fnv1(builder, testhashs64Fnv1): builder.PrependInt64Slot(18, testhashs64Fnv1, 0)
-def MonsterAddTesthashu64Fnv1(builder, testhashu64Fnv1): builder.PrependUint64Slot(19, testhashu64Fnv1, 0)
-def MonsterAddTesthashs32Fnv1a(builder, testhashs32Fnv1a): builder.PrependInt32Slot(20, testhashs32Fnv1a, 0)
-def MonsterAddTesthashu32Fnv1a(builder, testhashu32Fnv1a): builder.PrependUint32Slot(21, testhashu32Fnv1a, 0)
-def MonsterAddTesthashs64Fnv1a(builder, testhashs64Fnv1a): builder.PrependInt64Slot(22, testhashs64Fnv1a, 0)
-def MonsterAddTesthashu64Fnv1a(builder, testhashu64Fnv1a): builder.PrependUint64Slot(23, testhashu64Fnv1a, 0)
-def MonsterAddTestarrayofbools(builder, testarrayofbools): builder.PrependUOffsetTRelativeSlot(24, flatbuffers.number_types.UOffsetTFlags.py_type(testarrayofbools), 0)
-def MonsterStartTestarrayofboolsVector(builder, numElems): return builder.StartVector(1, numElems, 1)
-def MonsterAddTestf(builder, testf): builder.PrependFloat32Slot(25, testf, 3.14159)
-def MonsterAddTestf2(builder, testf2): builder.PrependFloat32Slot(26, testf2, 3.0)
-def MonsterAddTestf3(builder, testf3): builder.PrependFloat32Slot(27, testf3, 0.0)
-def MonsterAddTestarrayofstring2(builder, testarrayofstring2): builder.PrependUOffsetTRelativeSlot(28, flatbuffers.number_types.UOffsetTFlags.py_type(testarrayofstring2), 0)
-def MonsterStartTestarrayofstring2Vector(builder, numElems): return builder.StartVector(4, numElems, 4)
-def MonsterAddTestarrayofsortedstruct(builder, testarrayofsortedstruct): builder.PrependUOffsetTRelativeSlot(29, flatbuffers.number_types.UOffsetTFlags.py_type(testarrayofsortedstruct), 0)
-def MonsterStartTestarrayofsortedstructVector(builder, numElems): return builder.StartVector(8, numElems, 4)
-def MonsterEnd(builder): return builder.EndObject()
diff --git a/third_party/flatbuffers/tests/MyGame/Example/MonsterStorage_grpc.go b/third_party/flatbuffers/tests/MyGame/Example/MonsterStorage_grpc.go
deleted file mode 100644
index cc9a1ec..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/MonsterStorage_grpc.go
+++ /dev/null
@@ -1,127 +0,0 @@
-//Generated by gRPC Go plugin
-//If you make any local changes, they will be lost
-//source: monster_test
-
-package Example
-
-import "github.com/google/flatbuffers/go"
-
-import (
-  context "golang.org/x/net/context"
-  grpc "google.golang.org/grpc"
-)
-
-// Client API for MonsterStorage service
-type MonsterStorageClient interface{
-  Store(ctx context.Context, in *flatbuffers.Builder, 
-  	opts... grpc.CallOption) (* Stat, error)  
-  Retrieve(ctx context.Context, in *flatbuffers.Builder, 
-  	opts... grpc.CallOption) (MonsterStorage_RetrieveClient, error)  
-}
-
-type monsterStorageClient struct {
-  cc *grpc.ClientConn
-}
-
-func NewMonsterStorageClient(cc *grpc.ClientConn) MonsterStorageClient {
-  return &monsterStorageClient{cc}
-}
-
-func (c *monsterStorageClient) Store(ctx context.Context, in *flatbuffers.Builder, 
-	opts... grpc.CallOption) (* Stat, error) {
-  out := new(Stat)
-  err := grpc.Invoke(ctx, "/Example.MonsterStorage/Store", in, out, c.cc, opts...)
-  if err != nil { return nil, err }
-  return out, nil
-}
-
-func (c *monsterStorageClient) Retrieve(ctx context.Context, in *flatbuffers.Builder, 
-	opts... grpc.CallOption) (MonsterStorage_RetrieveClient, error) {
-  stream, err := grpc.NewClientStream(ctx, &_MonsterStorage_serviceDesc.Streams[0], c.cc, "/Example.MonsterStorage/Retrieve", opts...)
-  if err != nil { return nil, err }
-  x := &monsterStorageRetrieveClient{stream}
-  if err := x.ClientStream.SendMsg(in); err != nil { return nil, err }
-  if err := x.ClientStream.CloseSend(); err != nil { return nil, err }
-  return x,nil
-}
-
-type MonsterStorage_RetrieveClient interface {
-  Recv() (*Monster, error)
-  grpc.ClientStream
-}
-
-type monsterStorageRetrieveClient struct{
-  grpc.ClientStream
-}
-
-func (x *monsterStorageRetrieveClient) Recv() (*Monster, error) {
-  m := new(Monster)
-  if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }
-  return m, nil
-}
-
-// Server API for MonsterStorage service
-type MonsterStorageServer interface {
-  Store(context.Context, *Monster) (*flatbuffers.Builder, error)  
-  Retrieve(*Stat, MonsterStorage_RetrieveServer) error  
-}
-
-func RegisterMonsterStorageServer(s *grpc.Server, srv MonsterStorageServer) {
-  s.RegisterService(&_MonsterStorage_serviceDesc, srv)
-}
-
-func _MonsterStorage_Store_Handler(srv interface{}, ctx context.Context,
-	dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-  in := new(Monster)
-  if err := dec(in); err != nil { return nil, err }
-  if interceptor == nil { return srv.(MonsterStorageServer).Store(ctx, in) }
-  info := &grpc.UnaryServerInfo{
-    Server: srv,
-    FullMethod: "/Example.MonsterStorage/Store",
-  }
-  
-  handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-    return srv.(MonsterStorageServer).Store(ctx, req.(* Monster))
-  }
-  return interceptor(ctx, in, info, handler)
-}
-
-
-func _MonsterStorage_Retrieve_Handler(srv interface{}, stream grpc.ServerStream) error {
-  m := new(Stat)
-  if err := stream.RecvMsg(m); err != nil { return err }
-  return srv.(MonsterStorageServer).Retrieve(m, &monsterStorageRetrieveServer{stream})
-}
-
-type MonsterStorage_RetrieveServer interface { 
-  Send(* flatbuffers.Builder) error
-  grpc.ServerStream
-}
-
-type monsterStorageRetrieveServer struct {
-  grpc.ServerStream
-}
-
-func (x *monsterStorageRetrieveServer) Send(m *flatbuffers.Builder) error {
-  return x.ServerStream.SendMsg(m)
-}
-
-
-var _MonsterStorage_serviceDesc = grpc.ServiceDesc{
-  ServiceName: "Example.MonsterStorage",
-  HandlerType: (*MonsterStorageServer)(nil),
-  Methods: []grpc.MethodDesc{
-    {
-      MethodName: "Store",
-      Handler: _MonsterStorage_Store_Handler, 
-    },
-  },
-  Streams: []grpc.StreamDesc{
-    {
-      StreamName: "Retrieve",
-      Handler: _MonsterStorage_Retrieve_Handler, 
-      ServerStreams: true,
-    },
-  },
-}
-
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Stat.cs b/third_party/flatbuffers/tests/MyGame/Example/Stat.cs
deleted file mode 100644
index 1ea8050..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Stat.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame.Example
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct Stat : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static Stat GetRootAsStat(ByteBuffer _bb) { return GetRootAsStat(_bb, new Stat()); }
-  public static Stat GetRootAsStat(ByteBuffer _bb, Stat obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public Stat __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public string Id { get { int o = __p.__offset(4); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
-  public ArraySegment<byte>? GetIdBytes() { return __p.__vector_as_arraysegment(4); }
-  public long Val { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetLong(o + __p.bb_pos) : (long)0; } }
-  public bool MutateVal(long val) { int o = __p.__offset(6); if (o != 0) { __p.bb.PutLong(o + __p.bb_pos, val); return true; } else { return false; } }
-  public ushort Count { get { int o = __p.__offset(8); return o != 0 ? __p.bb.GetUshort(o + __p.bb_pos) : (ushort)0; } }
-  public bool MutateCount(ushort count) { int o = __p.__offset(8); if (o != 0) { __p.bb.PutUshort(o + __p.bb_pos, count); return true; } else { return false; } }
-
-  public static Offset<Stat> CreateStat(FlatBufferBuilder builder,
-      StringOffset idOffset = default(StringOffset),
-      long val = 0,
-      ushort count = 0) {
-    builder.StartObject(3);
-    Stat.AddVal(builder, val);
-    Stat.AddId(builder, idOffset);
-    Stat.AddCount(builder, count);
-    return Stat.EndStat(builder);
-  }
-
-  public static void StartStat(FlatBufferBuilder builder) { builder.StartObject(3); }
-  public static void AddId(FlatBufferBuilder builder, StringOffset idOffset) { builder.AddOffset(0, idOffset.Value, 0); }
-  public static void AddVal(FlatBufferBuilder builder, long val) { builder.AddLong(1, val, 0); }
-  public static void AddCount(FlatBufferBuilder builder, ushort count) { builder.AddUshort(2, count, 0); }
-  public static Offset<Stat> EndStat(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<Stat>(o);
-  }
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Stat.go b/third_party/flatbuffers/tests/MyGame/Example/Stat.go
deleted file mode 100644
index 9abc558..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Stat.go
+++ /dev/null
@@ -1,75 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package Example
-
-import (
-	flatbuffers "github.com/google/flatbuffers/go"
-)
-
-type Stat struct {
-	_tab flatbuffers.Table
-}
-
-func GetRootAsStat(buf []byte, offset flatbuffers.UOffsetT) *Stat {
-	n := flatbuffers.GetUOffsetT(buf[offset:])
-	x := &Stat{}
-	x.Init(buf, n+offset)
-	return x
-}
-
-func (rcv *Stat) Init(buf []byte, i flatbuffers.UOffsetT) {
-	rcv._tab.Bytes = buf
-	rcv._tab.Pos = i
-}
-
-func (rcv *Stat) Table() flatbuffers.Table {
-	return rcv._tab
-}
-
-func (rcv *Stat) Id() []byte {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(4))
-	if o != 0 {
-		return rcv._tab.ByteVector(o + rcv._tab.Pos)
-	}
-	return nil
-}
-
-func (rcv *Stat) Val() int64 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(6))
-	if o != 0 {
-		return rcv._tab.GetInt64(o + rcv._tab.Pos)
-	}
-	return 0
-}
-
-func (rcv *Stat) MutateVal(n int64) bool {
-	return rcv._tab.MutateInt64Slot(6, n)
-}
-
-func (rcv *Stat) Count() uint16 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(8))
-	if o != 0 {
-		return rcv._tab.GetUint16(o + rcv._tab.Pos)
-	}
-	return 0
-}
-
-func (rcv *Stat) MutateCount(n uint16) bool {
-	return rcv._tab.MutateUint16Slot(8, n)
-}
-
-func StatStart(builder *flatbuffers.Builder) {
-	builder.StartObject(3)
-}
-func StatAddId(builder *flatbuffers.Builder, id flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(0, flatbuffers.UOffsetT(id), 0)
-}
-func StatAddVal(builder *flatbuffers.Builder, val int64) {
-	builder.PrependInt64Slot(1, val, 0)
-}
-func StatAddCount(builder *flatbuffers.Builder, count uint16) {
-	builder.PrependUint16Slot(2, count, 0)
-}
-func StatEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
-	return builder.EndObject()
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Stat.java b/third_party/flatbuffers/tests/MyGame/Example/Stat.java
deleted file mode 100644
index 351e5b3..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Stat.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package MyGame.Example;
-
-import java.nio.*;
-import java.lang.*;
-import java.util.*;
-import com.google.flatbuffers.*;
-
-@SuppressWarnings("unused")
-public final class Stat extends Table {
-  public static Stat getRootAsStat(ByteBuffer _bb) { return getRootAsStat(_bb, new Stat()); }
-  public static Stat getRootAsStat(ByteBuffer _bb, Stat obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; }
-  public Stat __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public String id() { int o = __offset(4); return o != 0 ? __string(o + bb_pos) : null; }
-  public ByteBuffer idAsByteBuffer() { return __vector_as_bytebuffer(4, 1); }
-  public long val() { int o = __offset(6); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
-  public boolean mutateVal(long val) { int o = __offset(6); if (o != 0) { bb.putLong(o + bb_pos, val); return true; } else { return false; } }
-  public int count() { int o = __offset(8); return o != 0 ? bb.getShort(o + bb_pos) & 0xFFFF : 0; }
-  public boolean mutateCount(int count) { int o = __offset(8); if (o != 0) { bb.putShort(o + bb_pos, (short)count); return true; } else { return false; } }
-
-  public static int createStat(FlatBufferBuilder builder,
-      int idOffset,
-      long val,
-      int count) {
-    builder.startObject(3);
-    Stat.addVal(builder, val);
-    Stat.addId(builder, idOffset);
-    Stat.addCount(builder, count);
-    return Stat.endStat(builder);
-  }
-
-  public static void startStat(FlatBufferBuilder builder) { builder.startObject(3); }
-  public static void addId(FlatBufferBuilder builder, int idOffset) { builder.addOffset(0, idOffset, 0); }
-  public static void addVal(FlatBufferBuilder builder, long val) { builder.addLong(1, val, 0L); }
-  public static void addCount(FlatBufferBuilder builder, int count) { builder.addShort(2, (short)count, (short)0); }
-  public static int endStat(FlatBufferBuilder builder) {
-    int o = builder.endObject();
-    return o;
-  }
-}
-
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Stat.php b/third_party/flatbuffers/tests/MyGame/Example/Stat.php
deleted file mode 100644
index 6ef7034..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Stat.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame\Example;
-
-use \Google\FlatBuffers\Struct;
-use \Google\FlatBuffers\Table;
-use \Google\FlatBuffers\ByteBuffer;
-use \Google\FlatBuffers\FlatBufferBuilder;
-
-class Stat extends Table
-{
-    /**
-     * @param ByteBuffer $bb
-     * @return Stat
-     */
-    public static function getRootAsStat(ByteBuffer $bb)
-    {
-        $obj = new Stat();
-        return ($obj->init($bb->getInt($bb->getPosition()) + $bb->getPosition(), $bb));
-    }
-
-    public static function StatIdentifier()
-    {
-        return "MONS";
-    }
-
-    public static function StatBufferHasIdentifier(ByteBuffer $buf)
-    {
-        return self::__has_identifier($buf, self::StatIdentifier());
-    }
-
-    public static function StatExtension()
-    {
-        return "mon";
-    }
-
-    /**
-     * @param int $_i offset
-     * @param ByteBuffer $_bb
-     * @return Stat
-     **/
-    public function init($_i, ByteBuffer $_bb)
-    {
-        $this->bb_pos = $_i;
-        $this->bb = $_bb;
-        return $this;
-    }
-
-    public function getId()
-    {
-        $o = $this->__offset(4);
-        return $o != 0 ? $this->__string($o + $this->bb_pos) : null;
-    }
-
-    /**
-     * @return long
-     */
-    public function getVal()
-    {
-        $o = $this->__offset(6);
-        return $o != 0 ? $this->bb->getLong($o + $this->bb_pos) : 0;
-    }
-
-    /**
-     * @return ushort
-     */
-    public function getCount()
-    {
-        $o = $this->__offset(8);
-        return $o != 0 ? $this->bb->getUshort($o + $this->bb_pos) : 0;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return void
-     */
-    public static function startStat(FlatBufferBuilder $builder)
-    {
-        $builder->StartObject(3);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return Stat
-     */
-    public static function createStat(FlatBufferBuilder $builder, $id, $val, $count)
-    {
-        $builder->startObject(3);
-        self::addId($builder, $id);
-        self::addVal($builder, $val);
-        self::addCount($builder, $count);
-        $o = $builder->endObject();
-        return $o;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param StringOffset
-     * @return void
-     */
-    public static function addId(FlatBufferBuilder $builder, $id)
-    {
-        $builder->addOffsetX(0, $id, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param long
-     * @return void
-     */
-    public static function addVal(FlatBufferBuilder $builder, $val)
-    {
-        $builder->addLongX(1, $val, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param ushort
-     * @return void
-     */
-    public static function addCount(FlatBufferBuilder $builder, $count)
-    {
-        $builder->addUshortX(2, $count, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return int table offset
-     */
-    public static function endStat(FlatBufferBuilder $builder)
-    {
-        $o = $builder->endObject();
-        return $o;
-    }
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Stat.py b/third_party/flatbuffers/tests/MyGame/Example/Stat.py
deleted file mode 100644
index b0e251d..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Stat.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: Example
-
-import flatbuffers
-
-class Stat(object):
-    __slots__ = ['_tab']
-
-    @classmethod
-    def GetRootAsStat(cls, buf, offset):
-        n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
-        x = Stat()
-        x.Init(buf, n + offset)
-        return x
-
-    # Stat
-    def Init(self, buf, pos):
-        self._tab = flatbuffers.table.Table(buf, pos)
-
-    # Stat
-    def Id(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
-        if o != 0:
-            return self._tab.String(o + self._tab.Pos)
-        return ""
-
-    # Stat
-    def Val(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Int64Flags, o + self._tab.Pos)
-        return 0
-
-    # Stat
-    def Count(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Uint16Flags, o + self._tab.Pos)
-        return 0
-
-def StatStart(builder): builder.StartObject(3)
-def StatAddId(builder, id): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(id), 0)
-def StatAddVal(builder, val): builder.PrependInt64Slot(1, val, 0)
-def StatAddCount(builder, count): builder.PrependUint16Slot(2, count, 0)
-def StatEnd(builder): return builder.EndObject()
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Test.cs b/third_party/flatbuffers/tests/MyGame/Example/Test.cs
deleted file mode 100644
index 406f5f1..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Test.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame.Example
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct Test : IFlatbufferObject
-{
-  private Struct __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public Test __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public short A { get { return __p.bb.GetShort(__p.bb_pos + 0); } }
-  public void MutateA(short a) { __p.bb.PutShort(__p.bb_pos + 0, a); }
-  public sbyte B { get { return __p.bb.GetSbyte(__p.bb_pos + 2); } }
-  public void MutateB(sbyte b) { __p.bb.PutSbyte(__p.bb_pos + 2, b); }
-
-  public static Offset<Test> CreateTest(FlatBufferBuilder builder, short A, sbyte B) {
-    builder.Prep(2, 4);
-    builder.Pad(1);
-    builder.PutSbyte(B);
-    builder.PutShort(A);
-    return new Offset<Test>(builder.Offset);
-  }
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Test.go b/third_party/flatbuffers/tests/MyGame/Example/Test.go
deleted file mode 100644
index cb283fb..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Test.go
+++ /dev/null
@@ -1,42 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package Example
-
-import (
-	flatbuffers "github.com/google/flatbuffers/go"
-)
-
-type Test struct {
-	_tab flatbuffers.Struct
-}
-
-func (rcv *Test) Init(buf []byte, i flatbuffers.UOffsetT) {
-	rcv._tab.Bytes = buf
-	rcv._tab.Pos = i
-}
-
-func (rcv *Test) Table() flatbuffers.Table {
-	return rcv._tab.Table
-}
-
-func (rcv *Test) A() int16 {
-	return rcv._tab.GetInt16(rcv._tab.Pos + flatbuffers.UOffsetT(0))
-}
-func (rcv *Test) MutateA(n int16) bool {
-	return rcv._tab.MutateInt16(rcv._tab.Pos+flatbuffers.UOffsetT(0), n)
-}
-
-func (rcv *Test) B() int8 {
-	return rcv._tab.GetInt8(rcv._tab.Pos + flatbuffers.UOffsetT(2))
-}
-func (rcv *Test) MutateB(n int8) bool {
-	return rcv._tab.MutateInt8(rcv._tab.Pos+flatbuffers.UOffsetT(2), n)
-}
-
-func CreateTest(builder *flatbuffers.Builder, a int16, b int8) flatbuffers.UOffsetT {
-	builder.Prep(2, 4)
-	builder.Pad(1)
-	builder.PrependInt8(b)
-	builder.PrependInt16(a)
-	return builder.Offset()
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Test.java b/third_party/flatbuffers/tests/MyGame/Example/Test.java
deleted file mode 100644
index f584c46..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Test.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package MyGame.Example;
-
-import java.nio.*;
-import java.lang.*;
-import java.util.*;
-import com.google.flatbuffers.*;
-
-@SuppressWarnings("unused")
-public final class Test extends Struct {
-  public void __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; }
-  public Test __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public short a() { return bb.getShort(bb_pos + 0); }
-  public void mutateA(short a) { bb.putShort(bb_pos + 0, a); }
-  public byte b() { return bb.get(bb_pos + 2); }
-  public void mutateB(byte b) { bb.put(bb_pos + 2, b); }
-
-  public static int createTest(FlatBufferBuilder builder, short a, byte b) {
-    builder.prep(2, 4);
-    builder.pad(1);
-    builder.putByte(b);
-    builder.putShort(a);
-    return builder.offset();
-  }
-}
-
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Test.php b/third_party/flatbuffers/tests/MyGame/Example/Test.php
deleted file mode 100644
index 13cced0..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Test.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame\Example;
-
-use \Google\FlatBuffers\Struct;
-use \Google\FlatBuffers\Table;
-use \Google\FlatBuffers\ByteBuffer;
-use \Google\FlatBuffers\FlatBufferBuilder;
-
-class Test extends Struct
-{
-    /**
-     * @param int $_i offset
-     * @param ByteBuffer $_bb
-     * @return Test
-     **/
-    public function init($_i, ByteBuffer $_bb)
-    {
-        $this->bb_pos = $_i;
-        $this->bb = $_bb;
-        return $this;
-    }
-
-    /**
-     * @return short
-     */
-    public function GetA()
-    {
-        return $this->bb->getShort($this->bb_pos + 0);
-    }
-
-    /**
-     * @return sbyte
-     */
-    public function GetB()
-    {
-        return $this->bb->getSbyte($this->bb_pos + 2);
-    }
-
-
-    /**
-     * @return int offset
-     */
-    public static function createTest(FlatBufferBuilder $builder, $a, $b)
-    {
-        $builder->prep(2, 4);
-        $builder->pad(1);
-        $builder->putSbyte($b);
-        $builder->putShort($a);
-        return $builder->offset();
-    }
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Test.py b/third_party/flatbuffers/tests/MyGame/Example/Test.py
deleted file mode 100644
index 3b2fd45..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Test.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: Example
-
-import flatbuffers
-
-class Test(object):
-    __slots__ = ['_tab']
-
-    # Test
-    def Init(self, buf, pos):
-        self._tab = flatbuffers.table.Table(buf, pos)
-
-    # Test
-    def A(self): return self._tab.Get(flatbuffers.number_types.Int16Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(0))
-    # Test
-    def B(self): return self._tab.Get(flatbuffers.number_types.Int8Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(2))
-
-def CreateTest(builder, a, b):
-    builder.Prep(2, 4)
-    builder.Pad(1)
-    builder.PrependInt8(b)
-    builder.PrependInt16(a)
-    return builder.Offset()
diff --git a/third_party/flatbuffers/tests/MyGame/Example/TestSimpleTableWithEnum.cs b/third_party/flatbuffers/tests/MyGame/Example/TestSimpleTableWithEnum.cs
deleted file mode 100644
index 3d2a3f4..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/TestSimpleTableWithEnum.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame.Example
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public partial struct TestSimpleTableWithEnum : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static TestSimpleTableWithEnum GetRootAsTestSimpleTableWithEnum(ByteBuffer _bb) { return GetRootAsTestSimpleTableWithEnum(_bb, new TestSimpleTableWithEnum()); }
-  public static TestSimpleTableWithEnum GetRootAsTestSimpleTableWithEnum(ByteBuffer _bb, TestSimpleTableWithEnum obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public TestSimpleTableWithEnum __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public Color Color { get { int o = __p.__offset(4); return o != 0 ? (Color)__p.bb.GetSbyte(o + __p.bb_pos) : Color.Green; } }
-  public bool MutateColor(Color color) { int o = __p.__offset(4); if (o != 0) { __p.bb.PutSbyte(o + __p.bb_pos, (sbyte)color); return true; } else { return false; } }
-
-  public static Offset<TestSimpleTableWithEnum> CreateTestSimpleTableWithEnum(FlatBufferBuilder builder,
-      Color color = Color.Green) {
-    builder.StartObject(1);
-    TestSimpleTableWithEnum.AddColor(builder, color);
-    return TestSimpleTableWithEnum.EndTestSimpleTableWithEnum(builder);
-  }
-
-  public static void StartTestSimpleTableWithEnum(FlatBufferBuilder builder) { builder.StartObject(1); }
-  public static void AddColor(FlatBufferBuilder builder, Color color) { builder.AddSbyte(0, (sbyte)color, 2); }
-  public static Offset<TestSimpleTableWithEnum> EndTestSimpleTableWithEnum(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<TestSimpleTableWithEnum>(o);
-  }
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/TestSimpleTableWithEnum.go b/third_party/flatbuffers/tests/MyGame/Example/TestSimpleTableWithEnum.go
deleted file mode 100644
index 0704b70..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/TestSimpleTableWithEnum.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package Example
-
-import (
-	flatbuffers "github.com/google/flatbuffers/go"
-)
-
-type TestSimpleTableWithEnum struct {
-	_tab flatbuffers.Table
-}
-
-func GetRootAsTestSimpleTableWithEnum(buf []byte, offset flatbuffers.UOffsetT) *TestSimpleTableWithEnum {
-	n := flatbuffers.GetUOffsetT(buf[offset:])
-	x := &TestSimpleTableWithEnum{}
-	x.Init(buf, n+offset)
-	return x
-}
-
-func (rcv *TestSimpleTableWithEnum) Init(buf []byte, i flatbuffers.UOffsetT) {
-	rcv._tab.Bytes = buf
-	rcv._tab.Pos = i
-}
-
-func (rcv *TestSimpleTableWithEnum) Table() flatbuffers.Table {
-	return rcv._tab
-}
-
-func (rcv *TestSimpleTableWithEnum) Color() int8 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(4))
-	if o != 0 {
-		return rcv._tab.GetInt8(o + rcv._tab.Pos)
-	}
-	return 2
-}
-
-func (rcv *TestSimpleTableWithEnum) MutateColor(n int8) bool {
-	return rcv._tab.MutateInt8Slot(4, n)
-}
-
-func TestSimpleTableWithEnumStart(builder *flatbuffers.Builder) {
-	builder.StartObject(1)
-}
-func TestSimpleTableWithEnumAddColor(builder *flatbuffers.Builder, color int8) {
-	builder.PrependInt8Slot(0, color, 2)
-}
-func TestSimpleTableWithEnumEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
-	return builder.EndObject()
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/TestSimpleTableWithEnum.java b/third_party/flatbuffers/tests/MyGame/Example/TestSimpleTableWithEnum.java
deleted file mode 100644
index 9f77b39..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/TestSimpleTableWithEnum.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package MyGame.Example;
-
-import java.nio.*;
-import java.lang.*;
-import java.util.*;
-import com.google.flatbuffers.*;
-
-@SuppressWarnings("unused")
-public final class TestSimpleTableWithEnum extends Table {
-  public static TestSimpleTableWithEnum getRootAsTestSimpleTableWithEnum(ByteBuffer _bb) { return getRootAsTestSimpleTableWithEnum(_bb, new TestSimpleTableWithEnum()); }
-  public static TestSimpleTableWithEnum getRootAsTestSimpleTableWithEnum(ByteBuffer _bb, TestSimpleTableWithEnum obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; }
-  public TestSimpleTableWithEnum __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public byte color() { int o = __offset(4); return o != 0 ? bb.get(o + bb_pos) : 2; }
-  public boolean mutateColor(byte color) { int o = __offset(4); if (o != 0) { bb.put(o + bb_pos, color); return true; } else { return false; } }
-
-  public static int createTestSimpleTableWithEnum(FlatBufferBuilder builder,
-      byte color) {
-    builder.startObject(1);
-    TestSimpleTableWithEnum.addColor(builder, color);
-    return TestSimpleTableWithEnum.endTestSimpleTableWithEnum(builder);
-  }
-
-  public static void startTestSimpleTableWithEnum(FlatBufferBuilder builder) { builder.startObject(1); }
-  public static void addColor(FlatBufferBuilder builder, byte color) { builder.addByte(0, color, 2); }
-  public static int endTestSimpleTableWithEnum(FlatBufferBuilder builder) {
-    int o = builder.endObject();
-    return o;
-  }
-}
-
diff --git a/third_party/flatbuffers/tests/MyGame/Example/TestSimpleTableWithEnum.php b/third_party/flatbuffers/tests/MyGame/Example/TestSimpleTableWithEnum.php
deleted file mode 100644
index d37481f..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/TestSimpleTableWithEnum.php
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame\Example;
-
-use \Google\FlatBuffers\Struct;
-use \Google\FlatBuffers\Table;
-use \Google\FlatBuffers\ByteBuffer;
-use \Google\FlatBuffers\FlatBufferBuilder;
-
-class TestSimpleTableWithEnum extends Table
-{
-    /**
-     * @param ByteBuffer $bb
-     * @return TestSimpleTableWithEnum
-     */
-    public static function getRootAsTestSimpleTableWithEnum(ByteBuffer $bb)
-    {
-        $obj = new TestSimpleTableWithEnum();
-        return ($obj->init($bb->getInt($bb->getPosition()) + $bb->getPosition(), $bb));
-    }
-
-    public static function TestSimpleTableWithEnumIdentifier()
-    {
-        return "MONS";
-    }
-
-    public static function TestSimpleTableWithEnumBufferHasIdentifier(ByteBuffer $buf)
-    {
-        return self::__has_identifier($buf, self::TestSimpleTableWithEnumIdentifier());
-    }
-
-    public static function TestSimpleTableWithEnumExtension()
-    {
-        return "mon";
-    }
-
-    /**
-     * @param int $_i offset
-     * @param ByteBuffer $_bb
-     * @return TestSimpleTableWithEnum
-     **/
-    public function init($_i, ByteBuffer $_bb)
-    {
-        $this->bb_pos = $_i;
-        $this->bb = $_bb;
-        return $this;
-    }
-
-    /**
-     * @return sbyte
-     */
-    public function getColor()
-    {
-        $o = $this->__offset(4);
-        return $o != 0 ? $this->bb->getSbyte($o + $this->bb_pos) : \MyGame\Example\Color::Green;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return void
-     */
-    public static function startTestSimpleTableWithEnum(FlatBufferBuilder $builder)
-    {
-        $builder->StartObject(1);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return TestSimpleTableWithEnum
-     */
-    public static function createTestSimpleTableWithEnum(FlatBufferBuilder $builder, $color)
-    {
-        $builder->startObject(1);
-        self::addColor($builder, $color);
-        $o = $builder->endObject();
-        return $o;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param sbyte
-     * @return void
-     */
-    public static function addColor(FlatBufferBuilder $builder, $color)
-    {
-        $builder->addSbyteX(0, $color, 2);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return int table offset
-     */
-    public static function endTestSimpleTableWithEnum(FlatBufferBuilder $builder)
-    {
-        $o = $builder->endObject();
-        return $o;
-    }
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/TestSimpleTableWithEnum.py b/third_party/flatbuffers/tests/MyGame/Example/TestSimpleTableWithEnum.py
deleted file mode 100644
index 8d64e97..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/TestSimpleTableWithEnum.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: Example
-
-import flatbuffers
-
-class TestSimpleTableWithEnum(object):
-    __slots__ = ['_tab']
-
-    @classmethod
-    def GetRootAsTestSimpleTableWithEnum(cls, buf, offset):
-        n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
-        x = TestSimpleTableWithEnum()
-        x.Init(buf, n + offset)
-        return x
-
-    # TestSimpleTableWithEnum
-    def Init(self, buf, pos):
-        self._tab = flatbuffers.table.Table(buf, pos)
-
-    # TestSimpleTableWithEnum
-    def Color(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos)
-        return 2
-
-def TestSimpleTableWithEnumStart(builder): builder.StartObject(1)
-def TestSimpleTableWithEnumAddColor(builder, color): builder.PrependInt8Slot(0, color, 2)
-def TestSimpleTableWithEnumEnd(builder): return builder.EndObject()
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Vec3.cs b/third_party/flatbuffers/tests/MyGame/Example/Vec3.cs
deleted file mode 100644
index 6ea4b0e..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Vec3.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame.Example
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct Vec3 : IFlatbufferObject
-{
-  private Struct __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public Vec3 __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public float X { get { return __p.bb.GetFloat(__p.bb_pos + 0); } }
-  public void MutateX(float x) { __p.bb.PutFloat(__p.bb_pos + 0, x); }
-  public float Y { get { return __p.bb.GetFloat(__p.bb_pos + 4); } }
-  public void MutateY(float y) { __p.bb.PutFloat(__p.bb_pos + 4, y); }
-  public float Z { get { return __p.bb.GetFloat(__p.bb_pos + 8); } }
-  public void MutateZ(float z) { __p.bb.PutFloat(__p.bb_pos + 8, z); }
-  public double Test1 { get { return __p.bb.GetDouble(__p.bb_pos + 16); } }
-  public void MutateTest1(double test1) { __p.bb.PutDouble(__p.bb_pos + 16, test1); }
-  public Color Test2 { get { return (Color)__p.bb.GetSbyte(__p.bb_pos + 24); } }
-  public void MutateTest2(Color test2) { __p.bb.PutSbyte(__p.bb_pos + 24, (sbyte)test2); }
-  public Test Test3 { get { return (new Test()).__assign(__p.bb_pos + 26, __p.bb); } }
-
-  public static Offset<Vec3> CreateVec3(FlatBufferBuilder builder, float X, float Y, float Z, double Test1, Color Test2, short test3_A, sbyte test3_B) {
-    builder.Prep(16, 32);
-    builder.Pad(2);
-    builder.Prep(2, 4);
-    builder.Pad(1);
-    builder.PutSbyte(test3_B);
-    builder.PutShort(test3_A);
-    builder.Pad(1);
-    builder.PutSbyte((sbyte)Test2);
-    builder.PutDouble(Test1);
-    builder.Pad(4);
-    builder.PutFloat(Z);
-    builder.PutFloat(Y);
-    builder.PutFloat(X);
-    return new Offset<Vec3>(builder.Offset);
-  }
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Vec3.go b/third_party/flatbuffers/tests/MyGame/Example/Vec3.go
deleted file mode 100644
index a880a40..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Vec3.go
+++ /dev/null
@@ -1,80 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package Example
-
-import (
-	flatbuffers "github.com/google/flatbuffers/go"
-)
-
-type Vec3 struct {
-	_tab flatbuffers.Struct
-}
-
-func (rcv *Vec3) Init(buf []byte, i flatbuffers.UOffsetT) {
-	rcv._tab.Bytes = buf
-	rcv._tab.Pos = i
-}
-
-func (rcv *Vec3) Table() flatbuffers.Table {
-	return rcv._tab.Table
-}
-
-func (rcv *Vec3) X() float32 {
-	return rcv._tab.GetFloat32(rcv._tab.Pos + flatbuffers.UOffsetT(0))
-}
-func (rcv *Vec3) MutateX(n float32) bool {
-	return rcv._tab.MutateFloat32(rcv._tab.Pos+flatbuffers.UOffsetT(0), n)
-}
-
-func (rcv *Vec3) Y() float32 {
-	return rcv._tab.GetFloat32(rcv._tab.Pos + flatbuffers.UOffsetT(4))
-}
-func (rcv *Vec3) MutateY(n float32) bool {
-	return rcv._tab.MutateFloat32(rcv._tab.Pos+flatbuffers.UOffsetT(4), n)
-}
-
-func (rcv *Vec3) Z() float32 {
-	return rcv._tab.GetFloat32(rcv._tab.Pos + flatbuffers.UOffsetT(8))
-}
-func (rcv *Vec3) MutateZ(n float32) bool {
-	return rcv._tab.MutateFloat32(rcv._tab.Pos+flatbuffers.UOffsetT(8), n)
-}
-
-func (rcv *Vec3) Test1() float64 {
-	return rcv._tab.GetFloat64(rcv._tab.Pos + flatbuffers.UOffsetT(16))
-}
-func (rcv *Vec3) MutateTest1(n float64) bool {
-	return rcv._tab.MutateFloat64(rcv._tab.Pos+flatbuffers.UOffsetT(16), n)
-}
-
-func (rcv *Vec3) Test2() int8 {
-	return rcv._tab.GetInt8(rcv._tab.Pos + flatbuffers.UOffsetT(24))
-}
-func (rcv *Vec3) MutateTest2(n int8) bool {
-	return rcv._tab.MutateInt8(rcv._tab.Pos+flatbuffers.UOffsetT(24), n)
-}
-
-func (rcv *Vec3) Test3(obj *Test) *Test {
-	if obj == nil {
-		obj = new(Test)
-	}
-	obj.Init(rcv._tab.Bytes, rcv._tab.Pos+26)
-	return obj
-}
-
-func CreateVec3(builder *flatbuffers.Builder, x float32, y float32, z float32, test1 float64, test2 int8, test3_a int16, test3_b int8) flatbuffers.UOffsetT {
-	builder.Prep(16, 32)
-	builder.Pad(2)
-	builder.Prep(2, 4)
-	builder.Pad(1)
-	builder.PrependInt8(test3_b)
-	builder.PrependInt16(test3_a)
-	builder.Pad(1)
-	builder.PrependInt8(test2)
-	builder.PrependFloat64(test1)
-	builder.Pad(4)
-	builder.PrependFloat32(z)
-	builder.PrependFloat32(y)
-	builder.PrependFloat32(x)
-	return builder.Offset()
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Vec3.java b/third_party/flatbuffers/tests/MyGame/Example/Vec3.java
deleted file mode 100644
index 6cb820b..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Vec3.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package MyGame.Example;
-
-import java.nio.*;
-import java.lang.*;
-import java.util.*;
-import com.google.flatbuffers.*;
-
-@SuppressWarnings("unused")
-public final class Vec3 extends Struct {
-  public void __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; }
-  public Vec3 __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public float x() { return bb.getFloat(bb_pos + 0); }
-  public void mutateX(float x) { bb.putFloat(bb_pos + 0, x); }
-  public float y() { return bb.getFloat(bb_pos + 4); }
-  public void mutateY(float y) { bb.putFloat(bb_pos + 4, y); }
-  public float z() { return bb.getFloat(bb_pos + 8); }
-  public void mutateZ(float z) { bb.putFloat(bb_pos + 8, z); }
-  public double test1() { return bb.getDouble(bb_pos + 16); }
-  public void mutateTest1(double test1) { bb.putDouble(bb_pos + 16, test1); }
-  public byte test2() { return bb.get(bb_pos + 24); }
-  public void mutateTest2(byte test2) { bb.put(bb_pos + 24, test2); }
-  public Test test3() { return test3(new Test()); }
-  public Test test3(Test obj) { return obj.__assign(bb_pos + 26, bb); }
-
-  public static int createVec3(FlatBufferBuilder builder, float x, float y, float z, double test1, byte test2, short test3_a, byte test3_b) {
-    builder.prep(16, 32);
-    builder.pad(2);
-    builder.prep(2, 4);
-    builder.pad(1);
-    builder.putByte(test3_b);
-    builder.putShort(test3_a);
-    builder.pad(1);
-    builder.putByte(test2);
-    builder.putDouble(test1);
-    builder.pad(4);
-    builder.putFloat(z);
-    builder.putFloat(y);
-    builder.putFloat(x);
-    return builder.offset();
-  }
-}
-
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Vec3.php b/third_party/flatbuffers/tests/MyGame/Example/Vec3.php
deleted file mode 100644
index ab1a827..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Vec3.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame\Example;
-
-use \Google\FlatBuffers\Struct;
-use \Google\FlatBuffers\Table;
-use \Google\FlatBuffers\ByteBuffer;
-use \Google\FlatBuffers\FlatBufferBuilder;
-
-class Vec3 extends Struct
-{
-    /**
-     * @param int $_i offset
-     * @param ByteBuffer $_bb
-     * @return Vec3
-     **/
-    public function init($_i, ByteBuffer $_bb)
-    {
-        $this->bb_pos = $_i;
-        $this->bb = $_bb;
-        return $this;
-    }
-
-    /**
-     * @return float
-     */
-    public function GetX()
-    {
-        return $this->bb->getFloat($this->bb_pos + 0);
-    }
-
-    /**
-     * @return float
-     */
-    public function GetY()
-    {
-        return $this->bb->getFloat($this->bb_pos + 4);
-    }
-
-    /**
-     * @return float
-     */
-    public function GetZ()
-    {
-        return $this->bb->getFloat($this->bb_pos + 8);
-    }
-
-    /**
-     * @return double
-     */
-    public function GetTest1()
-    {
-        return $this->bb->getDouble($this->bb_pos + 16);
-    }
-
-    /**
-     * @return sbyte
-     */
-    public function GetTest2()
-    {
-        return $this->bb->getSbyte($this->bb_pos + 24);
-    }
-
-    /**
-     * @return Test
-     */
-    public function getTest3()
-    {
-        $obj = new Test();
-        $obj->init($this->bb_pos + 26, $this->bb);
-        return $obj;
-    }
-
-
-    /**
-     * @return int offset
-     */
-    public static function createVec3(FlatBufferBuilder $builder, $x, $y, $z, $test1, $test2, $test3_a, $test3_b)
-    {
-        $builder->prep(16, 32);
-        $builder->pad(2);
-        $builder->prep(2, 4);
-        $builder->pad(1);
-        $builder->putSbyte($test3_b);
-        $builder->putShort($test3_a);
-        $builder->pad(1);
-        $builder->putSbyte($test2);
-        $builder->putDouble($test1);
-        $builder->pad(4);
-        $builder->putFloat($z);
-        $builder->putFloat($y);
-        $builder->putFloat($x);
-        return $builder->offset();
-    }
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example/Vec3.py b/third_party/flatbuffers/tests/MyGame/Example/Vec3.py
deleted file mode 100644
index a354773..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/Vec3.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: Example
-
-import flatbuffers
-
-class Vec3(object):
-    __slots__ = ['_tab']
-
-    # Vec3
-    def Init(self, buf, pos):
-        self._tab = flatbuffers.table.Table(buf, pos)
-
-    # Vec3
-    def X(self): return self._tab.Get(flatbuffers.number_types.Float32Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(0))
-    # Vec3
-    def Y(self): return self._tab.Get(flatbuffers.number_types.Float32Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(4))
-    # Vec3
-    def Z(self): return self._tab.Get(flatbuffers.number_types.Float32Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(8))
-    # Vec3
-    def Test1(self): return self._tab.Get(flatbuffers.number_types.Float64Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(16))
-    # Vec3
-    def Test2(self): return self._tab.Get(flatbuffers.number_types.Int8Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(24))
-    # Vec3
-    def Test3(self, obj):
-        obj.Init(self._tab.Bytes, self._tab.Pos + 26)
-        return obj
-
-
-def CreateVec3(builder, x, y, z, test1, test2, test3_a, test3_b):
-    builder.Prep(16, 32)
-    builder.Pad(2)
-    builder.Prep(2, 4)
-    builder.Pad(1)
-    builder.PrependInt8(test3_b)
-    builder.PrependInt16(test3_a)
-    builder.Pad(1)
-    builder.PrependInt8(test2)
-    builder.PrependFloat64(test1)
-    builder.Pad(4)
-    builder.PrependFloat32(z)
-    builder.PrependFloat32(y)
-    builder.PrependFloat32(x)
-    return builder.Offset()
diff --git a/third_party/flatbuffers/tests/MyGame/Example/__init__.py b/third_party/flatbuffers/tests/MyGame/Example/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example/__init__.py
+++ /dev/null
diff --git a/third_party/flatbuffers/tests/MyGame/Example2/Monster.cs b/third_party/flatbuffers/tests/MyGame/Example2/Monster.cs
deleted file mode 100644
index 406c4bd..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example2/Monster.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame.Example2
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct Monster : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static Monster GetRootAsMonster(ByteBuffer _bb) { return GetRootAsMonster(_bb, new Monster()); }
-  public static Monster GetRootAsMonster(ByteBuffer _bb, Monster obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public Monster __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-
-  public static void StartMonster(FlatBufferBuilder builder) { builder.StartObject(0); }
-  public static Offset<Monster> EndMonster(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<Monster>(o);
-  }
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example2/Monster.go b/third_party/flatbuffers/tests/MyGame/Example2/Monster.go
deleted file mode 100644
index 79949b9..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example2/Monster.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package Example2
-
-import (
-	flatbuffers "github.com/google/flatbuffers/go"
-)
-
-type Monster struct {
-	_tab flatbuffers.Table
-}
-
-func GetRootAsMonster(buf []byte, offset flatbuffers.UOffsetT) *Monster {
-	n := flatbuffers.GetUOffsetT(buf[offset:])
-	x := &Monster{}
-	x.Init(buf, n+offset)
-	return x
-}
-
-func (rcv *Monster) Init(buf []byte, i flatbuffers.UOffsetT) {
-	rcv._tab.Bytes = buf
-	rcv._tab.Pos = i
-}
-
-func (rcv *Monster) Table() flatbuffers.Table {
-	return rcv._tab
-}
-
-func MonsterStart(builder *flatbuffers.Builder) {
-	builder.StartObject(0)
-}
-func MonsterEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
-	return builder.EndObject()
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example2/Monster.java b/third_party/flatbuffers/tests/MyGame/Example2/Monster.java
deleted file mode 100644
index 69a1562..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example2/Monster.java
+++ /dev/null
@@ -1,24 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package MyGame.Example2;
-
-import java.nio.*;
-import java.lang.*;
-import java.util.*;
-import com.google.flatbuffers.*;
-
-@SuppressWarnings("unused")
-public final class Monster extends Table {
-  public static Monster getRootAsMonster(ByteBuffer _bb) { return getRootAsMonster(_bb, new Monster()); }
-  public static Monster getRootAsMonster(ByteBuffer _bb, Monster obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; }
-  public Monster __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-
-  public static void startMonster(FlatBufferBuilder builder) { builder.startObject(0); }
-  public static int endMonster(FlatBufferBuilder builder) {
-    int o = builder.endObject();
-    return o;
-  }
-}
-
diff --git a/third_party/flatbuffers/tests/MyGame/Example2/Monster.php b/third_party/flatbuffers/tests/MyGame/Example2/Monster.php
deleted file mode 100644
index b00f150..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example2/Monster.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace MyGame\Example2;
-
-use \Google\FlatBuffers\Struct;
-use \Google\FlatBuffers\Table;
-use \Google\FlatBuffers\ByteBuffer;
-use \Google\FlatBuffers\FlatBufferBuilder;
-
-class Monster extends Table
-{
-    /**
-     * @param ByteBuffer $bb
-     * @return Monster
-     */
-    public static function getRootAsMonster(ByteBuffer $bb)
-    {
-        $obj = new Monster();
-        return ($obj->init($bb->getInt($bb->getPosition()) + $bb->getPosition(), $bb));
-    }
-
-    public static function MonsterIdentifier()
-    {
-        return "MONS";
-    }
-
-    public static function MonsterBufferHasIdentifier(ByteBuffer $buf)
-    {
-        return self::__has_identifier($buf, self::MonsterIdentifier());
-    }
-
-    public static function MonsterExtension()
-    {
-        return "mon";
-    }
-
-    /**
-     * @param int $_i offset
-     * @param ByteBuffer $_bb
-     * @return Monster
-     **/
-    public function init($_i, ByteBuffer $_bb)
-    {
-        $this->bb_pos = $_i;
-        $this->bb = $_bb;
-        return $this;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return void
-     */
-    public static function startMonster(FlatBufferBuilder $builder)
-    {
-        $builder->StartObject(0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return Monster
-     */
-    public static function createMonster(FlatBufferBuilder $builder, )
-    {
-        $builder->startObject(0);
-        $o = $builder->endObject();
-        return $o;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return int table offset
-     */
-    public static function endMonster(FlatBufferBuilder $builder)
-    {
-        $o = $builder->endObject();
-        return $o;
-    }
-}
diff --git a/third_party/flatbuffers/tests/MyGame/Example2/Monster.py b/third_party/flatbuffers/tests/MyGame/Example2/Monster.py
deleted file mode 100644
index d334f8e..0000000
--- a/third_party/flatbuffers/tests/MyGame/Example2/Monster.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: Example2
-
-import flatbuffers
-
-class Monster(object):
-    __slots__ = ['_tab']
-
-    @classmethod
-    def GetRootAsMonster(cls, buf, offset):
-        n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
-        x = Monster()
-        x.Init(buf, n + offset)
-        return x
-
-    # Monster
-    def Init(self, buf, pos):
-        self._tab = flatbuffers.table.Table(buf, pos)
-
-def MonsterStart(builder): builder.StartObject(0)
-def MonsterEnd(builder): return builder.EndObject()
diff --git a/third_party/flatbuffers/tests/MyGame/__init__.py b/third_party/flatbuffers/tests/MyGame/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/third_party/flatbuffers/tests/MyGame/__init__.py
+++ /dev/null
diff --git a/third_party/flatbuffers/tests/PythonTest.sh b/third_party/flatbuffers/tests/PythonTest.sh
deleted file mode 100755
index 00fee7c..0000000
--- a/third_party/flatbuffers/tests/PythonTest.sh
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/bash -eu
-#
-# Copyright 2014 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-pushd "$(dirname $0)" >/dev/null
-test_dir="$(pwd)"
-gen_code_path=${test_dir}
-runtime_library_dir=${test_dir}/../python
-
-# Emit Python code for the example schema in the test dir:
-${test_dir}/../flatc -p -o ${gen_code_path} monster_test.fbs
-
-# Syntax: run_tests <interpreter> <benchmark vtable dedupes>
-#                   <benchmark read count> <benchmark build count>
-interpreters_tested=()
-function run_tests() {
-  if $(which ${1} >/dev/null); then
-    echo "Testing with interpreter: ${1}"
-    PYTHONDONTWRITEBYTECODE=1 \
-    JYTHONDONTWRITEBYTECODE=1 \
-    PYTHONPATH=${runtime_library_dir}:${gen_code_path} \
-    JYTHONPATH=${runtime_library_dir}:${gen_code_path} \
-    COMPARE_GENERATED_TO_GO=0 \
-    COMPARE_GENERATED_TO_JAVA=0 \
-    $1 py_test.py $2 $3 $4
-    interpreters_tested+=(${1})
-    echo
-  fi
-}
-
-# Run test suite with these interpreters. The arguments are benchmark counts.
-run_tests python2.6 100 100 100
-run_tests python2.7 100 100 100
-run_tests python3 100 100 100
-run_tests pypy 100 100 100
-
-# NOTE: We'd like to support python2.5 in the future.
-
-# NOTE: Jython 2.7.0 fails due to a bug in the stdlib `struct` library:
-#       http://bugs.jython.org/issue2188
-
-if [ ${#interpreters_tested[@]} -eq 0 ]; then
-  echo "No Python interpeters found on this system, could not run tests."
-  exit 1
-fi
-
-# Run test suite with default python intereter.
-# (If the Python program `coverage` is available, it will be run, too.
-#  Install `coverage` with `pip install coverage`.)
-if $(which coverage >/dev/null); then
-  echo 'Found coverage utility, running coverage with default Python:'
-
-  PYTHONDONTWRITEBYTECODE=1 \
-  PYTHONPATH=${runtime_library_dir}:${gen_code_path} \
-  coverage run --source=flatbuffers,MyGame py_test.py 0 0 0 > /dev/null
-
-  echo
-  cov_result=`coverage report --omit="*flatbuffers/vendor*,*py_test*" \
-              | tail -n 1 | awk ' { print $4 } '`
-  echo "Code coverage: ${cov_result}"
-else
-  echo -n "Did not find coverage utility for default Python, skipping. "
-  echo "Install with 'pip install coverage'."
-fi
-
-echo
-echo "OK: all tests passed for ${#interpreters_tested[@]} interpreters: ${interpreters_tested[@]}."
diff --git a/third_party/flatbuffers/tests/TypeScriptTest.sh b/third_party/flatbuffers/tests/TypeScriptTest.sh
deleted file mode 100755
index a5d44d5..0000000
--- a/third_party/flatbuffers/tests/TypeScriptTest.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-#
-# Copyright 2016 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-pushd "$(dirname $0)" >/dev/null
-../flatc --ts --no-fb-import --gen-mutable -o ts monster_test.fbs
-../flatc -b monster_test.fbs unicode_test.json
-npm install @types/flatbuffers
-tsc ts/monster_test_generated.ts
-npm uninstall @types/flatbuffers
-node JavaScriptTest ./ts/monster_test_generated
diff --git a/third_party/flatbuffers/tests/fuzzer/build_fuzzer.sh b/third_party/flatbuffers/tests/fuzzer/build_fuzzer.sh
deleted file mode 100644
index 48eb3b7..0000000
--- a/third_party/flatbuffers/tests/fuzzer/build_fuzzer.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-git clone https://chromium.googlesource.com/chromium/llvm-project/llvm/lib/Fuzzer
-clang++ -c -g -O2 -std=c++11 Fuzzer/*.cpp -IFuzzer
-ar ruv libFuzzer.a Fuzzer*.o
-rm -rf Fuzzer *.o
diff --git a/third_party/flatbuffers/tests/fuzzer/build_run_parser_test.sh b/third_party/flatbuffers/tests/fuzzer/build_run_parser_test.sh
deleted file mode 100644
index 3a053e7..0000000
--- a/third_party/flatbuffers/tests/fuzzer/build_run_parser_test.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-clang++ -fsanitize-coverage=edge -fsanitize=address -std=c++11 -stdlib=libstdc++ -I.. -I../../include flatbuffers_parser_fuzzer.cc ../../src/idl_parser.cpp ../../src/util.cpp libFuzzer.a -o fuzz_parser
-mkdir -p parser_corpus
-cp ../*.json ../*.fbs parser_corpus
-./fuzz_parser parser_corpus
diff --git a/third_party/flatbuffers/tests/fuzzer/build_run_verifier_test.sh b/third_party/flatbuffers/tests/fuzzer/build_run_verifier_test.sh
deleted file mode 100644
index 6761649..0000000
--- a/third_party/flatbuffers/tests/fuzzer/build_run_verifier_test.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-clang++ -fsanitize-coverage=edge -fsanitize=address -std=c++11 -stdlib=libstdc++ -I.. -I../../include flatbuffers_verifier_fuzzer.cc libFuzzer.a -o fuzz_verifier
-mkdir -p verifier_corpus
-cp ../*.mon verifier_corpus
-./fuzz_verifier verifier_corpus
diff --git a/third_party/flatbuffers/tests/fuzzer/flatbuffers_parser_fuzzer.cc b/third_party/flatbuffers/tests/fuzzer/flatbuffers_parser_fuzzer.cc
deleted file mode 100644
index 632b3b1..0000000
--- a/third_party/flatbuffers/tests/fuzzer/flatbuffers_parser_fuzzer.cc
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-#include <stddef.h>
-#include <stdint.h>
-#include <string>
-
-#include "flatbuffers/idl.h"
-
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
-  flatbuffers::Parser parser;
-  // Guarantee 0-termination.
-  std::string s(reinterpret_cast<const char *>(data), size);
-  parser.Parse(s.c_str());
-  return 0;
-}
diff --git a/third_party/flatbuffers/tests/fuzzer/flatbuffers_verifier_fuzzer.cc b/third_party/flatbuffers/tests/fuzzer/flatbuffers_verifier_fuzzer.cc
deleted file mode 100644
index d7d453c..0000000
--- a/third_party/flatbuffers/tests/fuzzer/flatbuffers_verifier_fuzzer.cc
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-#include <stddef.h>
-#include <stdint.h>
-#include <string>
-
-#include "monster_test_generated.h"
-
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
-  flatbuffers::Verifier verifier(data, size);
-  MyGame::Example::VerifyMonsterBuffer(verifier);
-  return 0;
-}
diff --git a/third_party/flatbuffers/tests/generate_code.bat b/third_party/flatbuffers/tests/generate_code.bat
deleted file mode 100644
index e7660a2..0000000
--- a/third_party/flatbuffers/tests/generate_code.bat
+++ /dev/null
@@ -1,20 +0,0 @@
-:: Copyright 2015 Google Inc. All rights reserved.
-::
-:: Licensed under the Apache License, Version 2.0 (the "License");
-:: you may not use this file except in compliance with the License.
-:: You may obtain a copy of the License at
-::
-::     http://www.apache.org/licenses/LICENSE-2.0
-::
-:: Unless required by applicable law or agreed to in writing, software
-:: distributed under the License is distributed on an "AS IS" BASIS,
-:: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-:: See the License for the specific language governing permissions and
-:: limitations under the License.
-
-set buildtype=Release
-if "%1"=="-b" set buildtype=%2
-
-..\%buildtype%\flatc.exe --cpp --java --csharp --go --binary --python --js --php --grpc --gen-mutable --gen-object-api --no-includes monster_test.fbs monsterdata_test.json
-..\%buildtype%\flatc.exe --cpp --java --csharp --go --binary --python --js --php --gen-mutable -o namespace_test namespace_test\namespace_test1.fbs namespace_test\namespace_test2.fbs
-..\%buildtype%\flatc.exe --binary --schema monster_test.fbs
diff --git a/third_party/flatbuffers/tests/generate_code.sh b/third_party/flatbuffers/tests/generate_code.sh
deleted file mode 100755
index bdce840..0000000
--- a/third_party/flatbuffers/tests/generate_code.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2015 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-../flatc --cpp --java --csharp --go --binary --python --js --ts --php --grpc --gen-mutable --gen-object-api --no-includes --no-fb-import monster_test.fbs monsterdata_test.json
-../flatc --cpp --java --csharp --go --binary --python --js --ts --php --gen-mutable --no-fb-import -o namespace_test namespace_test/namespace_test1.fbs namespace_test/namespace_test2.fbs
-../flatc --cpp --gen-mutable --gen-object-api -o union_vector ./union_vector/union_vector.fbs
-../flatc -b --schema --bfbs-comments monster_test.fbs
-cd ../samples
-../flatc --cpp --gen-mutable --gen-object-api monster.fbs
-cd ../reflection
-sh generate_code.sh
diff --git a/third_party/flatbuffers/tests/go_test.go b/third_party/flatbuffers/tests/go_test.go
deleted file mode 100644
index 2aa375a..0000000
--- a/third_party/flatbuffers/tests/go_test.go
+++ /dev/null
@@ -1,1766 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package main
-
-import (
-	example "MyGame/Example" // refers to generated code
-	"bytes"
-	"flag"
-	"fmt"
-	"io/ioutil"
-	"os"
-	"reflect"
-	"sort"
-	"testing"
-
-	flatbuffers "github.com/google/flatbuffers/go"
-)
-
-var (
-	cppData, javaData, outData string
-	fuzz                       bool
-	fuzzFields, fuzzObjects    int
-)
-
-func init() {
-	flag.StringVar(&cppData, "cpp_data", "",
-		"location of monsterdata_test.mon to verify against (required)")
-	flag.StringVar(&javaData, "java_data", "",
-		"location of monsterdata_java_wire.mon to verify against (optional)")
-	flag.StringVar(&outData, "out_data", "",
-		"location to write generated Go data")
-	flag.BoolVar(&fuzz, "fuzz", false, "perform fuzzing")
-	flag.IntVar(&fuzzFields, "fuzz_fields", 4, "fields per fuzzer object")
-	flag.IntVar(&fuzzObjects, "fuzz_objects", 10000,
-		"number of fuzzer objects (higher is slower and more thorough")
-	flag.Parse()
-
-	if cppData == "" {
-		fmt.Fprintf(os.Stderr, "cpp_data argument is required\n")
-		os.Exit(1)
-	}
-}
-
-// Store specific byte patterns in these variables for the fuzzer. These
-// values are taken verbatim from the C++ function FuzzTest1.
-var (
-	overflowingInt32Val = flatbuffers.GetInt32([]byte{0x83, 0x33, 0x33, 0x33})
-	overflowingInt64Val = flatbuffers.GetInt64([]byte{0x84, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44})
-)
-
-// TestAll runs all checks, failing if any errors occur.
-func TestAll(t *testing.T) {
-	// Verify that the Go FlatBuffers runtime library generates the
-	// expected bytes (does not use any schema):
-	CheckByteLayout(t.Fatalf)
-	CheckMutateMethods(t.Fatalf)
-
-	// Verify that panics are raised during exceptional conditions:
-	CheckNotInObjectError(t.Fatalf)
-	CheckStringIsNestedError(t.Fatalf)
-	CheckByteStringIsNestedError(t.Fatalf)
-	CheckStructIsNotInlineError(t.Fatalf)
-	CheckFinishedBytesError(t.Fatalf)
-
-	// Verify that GetRootAs works for non-root tables
-	CheckGetRootAsForNonRootTable(t.Fatalf)
-	CheckTableAccessors(t.Fatalf)
-
-	// Verify that using the generated Go code builds a buffer without
-	// returning errors:
-	generated, off := CheckGeneratedBuild(t.Fatalf)
-
-	// Verify that the buffer generated by Go code is readable by the
-	// generated Go code:
-	CheckReadBuffer(generated, off, t.Fatalf)
-	CheckMutateBuffer(generated, off, t.Fatalf)
-
-	// Verify that the buffer generated by C++ code is readable by the
-	// generated Go code:
-	monsterDataCpp, err := ioutil.ReadFile(cppData)
-	if err != nil {
-		t.Fatal(err)
-	}
-	CheckReadBuffer(monsterDataCpp, 0, t.Fatalf)
-	CheckMutateBuffer(monsterDataCpp, 0, t.Fatalf)
-
-	// Verify that vtables are deduplicated when written:
-	CheckVtableDeduplication(t.Fatalf)
-
-	// Verify the enum names
-	CheckEnumNames(t.Fatalf)
-
-	// Verify that the Go code used in FlatBuffers documentation passes
-	// some sanity checks:
-	CheckDocExample(generated, off, t.Fatalf)
-
-	// Check Builder.CreateByteVector
-	CheckCreateByteVector(t.Fatalf)
-
-	// If the filename of the FlatBuffers file generated by the Java test
-	// is given, check that Go code can read it, and that Go code
-	// generates an identical buffer when used to create the example data:
-	if javaData != "" {
-		monsterDataJava, err := ioutil.ReadFile(javaData)
-		if err != nil {
-			t.Fatal(err)
-		}
-		CheckReadBuffer(monsterDataJava, 0, t.Fatalf)
-		CheckByteEquality(generated[off:], monsterDataJava, t.Fatalf)
-	}
-
-	// Verify that various fuzzing scenarios produce a valid FlatBuffer.
-	if fuzz {
-		checkFuzz(fuzzFields, fuzzObjects, t.Fatalf)
-	}
-
-	// Write the generated buffer out to a file:
-	err = ioutil.WriteFile(outData, generated[off:], os.FileMode(0644))
-	if err != nil {
-		t.Fatal(err)
-	}
-}
-
-// CheckReadBuffer checks that the given buffer is evaluated correctly
-// as the example Monster.
-func CheckReadBuffer(buf []byte, offset flatbuffers.UOffsetT, fail func(string, ...interface{})) {
-	// try the two ways of generating a monster
-	monster1 := example.GetRootAsMonster(buf, offset)
-	monster2 := &example.Monster{}
-	flatbuffers.GetRootAs(buf, offset, monster2)
-	for _, monster := range []*example.Monster{monster1, monster2} {
-		if got := monster.Hp(); 80 != got {
-			fail(FailString("hp", 80, got))
-		}
-
-		// default
-		if got := monster.Mana(); 150 != got {
-			fail(FailString("mana", 150, got))
-		}
-
-		if got := monster.Name(); !bytes.Equal([]byte("MyMonster"), got) {
-			fail(FailString("name", "MyMonster", got))
-		}
-
-		// initialize a Vec3 from Pos()
-		vec := new(example.Vec3)
-		vec = monster.Pos(vec)
-		if vec == nil {
-			fail("vec3 initialization failed")
-		}
-
-		// check that new allocs equal given ones:
-		vec2 := monster.Pos(nil)
-		if !reflect.DeepEqual(vec, vec2) {
-			fail("fresh allocation failed")
-		}
-
-		// verify the properties of the Vec3
-		if got := vec.X(); float32(1.0) != got {
-			fail(FailString("Pos.X", float32(1.0), got))
-		}
-
-		if got := vec.Y(); float32(2.0) != got {
-			fail(FailString("Pos.Y", float32(2.0), got))
-		}
-
-		if got := vec.Z(); float32(3.0) != got {
-			fail(FailString("Pos.Z", float32(3.0), got))
-		}
-
-		if got := vec.Test1(); float64(3.0) != got {
-			fail(FailString("Pos.Test1", float64(3.0), got))
-		}
-
-		if got := vec.Test2(); int8(2) != got {
-			fail(FailString("Pos.Test2", int8(2), got))
-		}
-
-		// initialize a Test from Test3(...)
-		t := new(example.Test)
-		t = vec.Test3(t)
-		if t == nil {
-			fail("vec.Test3(&t) failed")
-		}
-
-		// check that new allocs equal given ones:
-		t2 := vec.Test3(nil)
-		if !reflect.DeepEqual(t, t2) {
-			fail("fresh allocation failed")
-		}
-
-		// verify the properties of the Test
-		if got := t.A(); int16(5) != got {
-			fail(FailString("t.A()", int16(5), got))
-		}
-
-		if got := t.B(); int8(6) != got {
-			fail(FailString("t.B()", int8(6), got))
-		}
-
-		if got := monster.TestType(); example.AnyMonster != got {
-			fail(FailString("monster.TestType()", example.AnyMonster, got))
-		}
-
-		// initialize a Table from a union field Test(...)
-		var table2 flatbuffers.Table
-		if ok := monster.Test(&table2); !ok {
-			fail("monster.Test(&monster2) failed")
-		}
-
-		// initialize a Monster from the Table from the union
-		var monster2 example.Monster
-		monster2.Init(table2.Bytes, table2.Pos)
-
-		if got := monster2.Name(); !bytes.Equal([]byte("Fred"), got) {
-			fail(FailString("monster2.Name()", "Fred", got))
-		}
-
-		inventorySlice := monster.InventoryBytes()
-		if len(inventorySlice) != monster.InventoryLength() {
-			fail(FailString("len(monster.InventoryBytes) != monster.InventoryLength", len(inventorySlice), monster.InventoryLength()))
-		}
-
-		if got := monster.InventoryLength(); 5 != got {
-			fail(FailString("monster.InventoryLength", 5, got))
-		}
-
-		invsum := 0
-		l := monster.InventoryLength()
-		for i := 0; i < l; i++ {
-			v := monster.Inventory(i)
-			if v != inventorySlice[i] {
-				fail(FailString("monster inventory slice[i] != Inventory(i)", v, inventorySlice[i]))
-			}
-			invsum += int(v)
-		}
-		if invsum != 10 {
-			fail(FailString("monster inventory sum", 10, invsum))
-		}
-
-		if got := monster.Test4Length(); 2 != got {
-			fail(FailString("monster.Test4Length()", 2, got))
-		}
-
-		var test0 example.Test
-		ok := monster.Test4(&test0, 0)
-		if !ok {
-			fail(FailString("monster.Test4(&test0, 0)", true, ok))
-		}
-
-		var test1 example.Test
-		ok = monster.Test4(&test1, 1)
-		if !ok {
-			fail(FailString("monster.Test4(&test1, 1)", true, ok))
-		}
-
-		// the position of test0 and test1 are swapped in monsterdata_java_wire
-		// and monsterdata_test_wire, so ignore ordering
-		v0 := test0.A()
-		v1 := test0.B()
-		v2 := test1.A()
-		v3 := test1.B()
-		sum := int(v0) + int(v1) + int(v2) + int(v3)
-
-		if 100 != sum {
-			fail(FailString("test0 and test1 sum", 100, sum))
-		}
-
-		if got := monster.TestarrayofstringLength(); 2 != got {
-			fail(FailString("Testarrayofstring length", 2, got))
-		}
-
-		if got := monster.Testarrayofstring(0); !bytes.Equal([]byte("test1"), got) {
-			fail(FailString("Testarrayofstring(0)", "test1", got))
-		}
-
-		if got := monster.Testarrayofstring(1); !bytes.Equal([]byte("test2"), got) {
-			fail(FailString("Testarrayofstring(1)", "test2", got))
-		}
-	}
-}
-
-// CheckMutateBuffer checks that the given buffer can be mutated correctly
-// as the example Monster. Only available scalar values are mutated.
-func CheckMutateBuffer(org []byte, offset flatbuffers.UOffsetT, fail func(string, ...interface{})) {
-	// make a copy to mutate
-	buf := make([]byte, len(org))
-	copy(buf, org)
-
-	// load monster data from the buffer
-	monster := example.GetRootAsMonster(buf, offset)
-
-	// test case struct
-	type testcase struct {
-		field  string
-		testfn func() bool
-	}
-
-	testForOriginalValues := []testcase{
-		testcase{"Hp", func() bool { return monster.Hp() == 80 }},
-		testcase{"Mana", func() bool { return monster.Mana() == 150 }},
-		testcase{"Pos.X'", func() bool { return monster.Pos(nil).X() == float32(1.0) }},
-		testcase{"Pos.Y'", func() bool { return monster.Pos(nil).Y() == float32(2.0) }},
-		testcase{"Pos.Z'", func() bool { return monster.Pos(nil).Z() == float32(3.0) }},
-		testcase{"Pos.Test1'", func() bool { return monster.Pos(nil).Test1() == float64(3.0) }},
-		testcase{"Pos.Test2'", func() bool { return monster.Pos(nil).Test2() == int8(2) }},
-		testcase{"Pos.Test3.A", func() bool { return monster.Pos(nil).Test3(nil).A() == int16(5) }},
-		testcase{"Pos.Test3.B", func() bool { return monster.Pos(nil).Test3(nil).B() == int8(6) }},
-	}
-
-	testMutability := []testcase{
-		testcase{"Hp", func() bool { return monster.MutateHp(70) }},
-		testcase{"Mana", func() bool { return !monster.MutateMana(140) }},
-		testcase{"Pos.X", func() bool { return monster.Pos(nil).MutateX(10.0) }},
-		testcase{"Pos.Y", func() bool { return monster.Pos(nil).MutateY(20.0) }},
-		testcase{"Pos.Z", func() bool { return monster.Pos(nil).MutateZ(30.0) }},
-		testcase{"Pos.Test1", func() bool { return monster.Pos(nil).MutateTest1(30.0) }},
-		testcase{"Pos.Test2", func() bool { return monster.Pos(nil).MutateTest2(20) }},
-		testcase{"Pos.Test3.A", func() bool { return monster.Pos(nil).Test3(nil).MutateA(50) }},
-		testcase{"Pos.Test3.B", func() bool { return monster.Pos(nil).Test3(nil).MutateB(60) }},
-	}
-
-	testForMutatedValues := []testcase{
-		testcase{"Hp", func() bool { return monster.Hp() == 70 }},
-		testcase{"Mana", func() bool { return monster.Mana() == 150 }},
-		testcase{"Pos.X'", func() bool { return monster.Pos(nil).X() == float32(10.0) }},
-		testcase{"Pos.Y'", func() bool { return monster.Pos(nil).Y() == float32(20.0) }},
-		testcase{"Pos.Z'", func() bool { return monster.Pos(nil).Z() == float32(30.0) }},
-		testcase{"Pos.Test1'", func() bool { return monster.Pos(nil).Test1() == float64(30.0) }},
-		testcase{"Pos.Test2'", func() bool { return monster.Pos(nil).Test2() == int8(20) }},
-		testcase{"Pos.Test3.A", func() bool { return monster.Pos(nil).Test3(nil).A() == int16(50) }},
-		testcase{"Pos.Test3.B", func() bool { return monster.Pos(nil).Test3(nil).B() == int8(60) }},
-	}
-
-	// make sure original values are okay
-	for _, t := range testForOriginalValues {
-		if !t.testfn() {
-			fail("field '" + t.field + "' doesn't have the expected original value")
-		}
-	}
-
-	// try to mutate fields and check mutability
-	for _, t := range testMutability {
-		if !t.testfn() {
-			fail(FailString("field '"+t.field+"' failed mutability test", true, false))
-		}
-	}
-
-	// test whether values have changed
-	for _, t := range testForMutatedValues {
-		if !t.testfn() {
-			fail("field '" + t.field + "' doesn't have the expected mutated value")
-		}
-	}
-
-	// make sure the buffer has changed
-	if reflect.DeepEqual(buf, org) {
-		fail("mutate buffer failed")
-	}
-
-	// To make sure the buffer has changed accordingly
-	// Read data from the buffer and verify all fields
-	monster = example.GetRootAsMonster(buf, offset)
-	for _, t := range testForMutatedValues {
-		if !t.testfn() {
-			fail("field '" + t.field + "' doesn't have the expected mutated value")
-		}
-	}
-
-	// reverting all fields to original values should
-	// re-create the original buffer. Mutate all fields
-	// back to their original values and compare buffers.
-	// This test is done to make sure mutations do not do
-	// any unnecessary changes to the buffer.
-	monster = example.GetRootAsMonster(buf, offset)
-	monster.MutateHp(80)
-	monster.Pos(nil).MutateX(1.0)
-	monster.Pos(nil).MutateY(2.0)
-	monster.Pos(nil).MutateZ(3.0)
-	monster.Pos(nil).MutateTest1(3.0)
-	monster.Pos(nil).MutateTest2(2)
-	monster.Pos(nil).Test3(nil).MutateA(5)
-	monster.Pos(nil).Test3(nil).MutateB(6)
-
-	for _, t := range testForOriginalValues {
-		if !t.testfn() {
-			fail("field '" + t.field + "' doesn't have the expected original value")
-		}
-	}
-
-	// buffer should have original values
-	if !reflect.DeepEqual(buf, org) {
-		fail("revert changes failed")
-	}
-}
-
-// Low level stress/fuzz test: serialize/deserialize a variety of
-// different kinds of data in different combinations
-func checkFuzz(fuzzFields, fuzzObjects int, fail func(string, ...interface{})) {
-
-	// Values we're testing against: chosen to ensure no bits get chopped
-	// off anywhere, and also be different from eachother.
-	boolVal := true
-	int8Val := int8(-127) // 0x81
-	uint8Val := uint8(0xFF)
-	int16Val := int16(-32222) // 0x8222
-	uint16Val := uint16(0xFEEE)
-	int32Val := int32(overflowingInt32Val)
-	uint32Val := uint32(0xFDDDDDDD)
-	int64Val := int64(overflowingInt64Val)
-	uint64Val := uint64(0xFCCCCCCCCCCCCCCC)
-	float32Val := float32(3.14159)
-	float64Val := float64(3.14159265359)
-
-	testValuesMax := 11 // hardcoded to the number of scalar types
-
-	builder := flatbuffers.NewBuilder(0)
-	l := NewLCG()
-
-	objects := make([]flatbuffers.UOffsetT, fuzzObjects)
-
-	// Generate fuzzObjects random objects each consisting of
-	// fuzzFields fields, each of a random type.
-	for i := 0; i < fuzzObjects; i++ {
-		builder.StartObject(fuzzFields)
-
-		for f := 0; f < fuzzFields; f++ {
-			choice := l.Next() % uint32(testValuesMax)
-			switch choice {
-			case 0:
-				builder.PrependBoolSlot(int(f), boolVal, false)
-			case 1:
-				builder.PrependInt8Slot(int(f), int8Val, 0)
-			case 2:
-				builder.PrependUint8Slot(int(f), uint8Val, 0)
-			case 3:
-				builder.PrependInt16Slot(int(f), int16Val, 0)
-			case 4:
-				builder.PrependUint16Slot(int(f), uint16Val, 0)
-			case 5:
-				builder.PrependInt32Slot(int(f), int32Val, 0)
-			case 6:
-				builder.PrependUint32Slot(int(f), uint32Val, 0)
-			case 7:
-				builder.PrependInt64Slot(int(f), int64Val, 0)
-			case 8:
-				builder.PrependUint64Slot(int(f), uint64Val, 0)
-			case 9:
-				builder.PrependFloat32Slot(int(f), float32Val, 0)
-			case 10:
-				builder.PrependFloat64Slot(int(f), float64Val, 0)
-			}
-		}
-
-		off := builder.EndObject()
-
-		// store the offset from the end of the builder buffer,
-		// since it will keep growing:
-		objects[i] = off
-	}
-
-	// Do some bookkeeping to generate stats on fuzzes:
-	stats := map[string]int{}
-	check := func(desc string, want, got interface{}) {
-		stats[desc]++
-		if want != got {
-			fail("%s want %v got %v", desc, want, got)
-		}
-	}
-
-	l = NewLCG() // Reset.
-
-	// Test that all objects we generated are readable and return the
-	// expected values. We generate random objects in the same order
-	// so this is deterministic.
-	for i := 0; i < fuzzObjects; i++ {
-
-		table := &flatbuffers.Table{
-			Bytes: builder.Bytes,
-			Pos:   flatbuffers.UOffsetT(len(builder.Bytes)) - objects[i],
-		}
-
-		for j := 0; j < fuzzFields; j++ {
-			f := flatbuffers.VOffsetT((flatbuffers.VtableMetadataFields + j) * flatbuffers.SizeVOffsetT)
-			choice := l.Next() % uint32(testValuesMax)
-
-			switch choice {
-			case 0:
-				check("bool", boolVal, table.GetBoolSlot(f, false))
-			case 1:
-				check("int8", int8Val, table.GetInt8Slot(f, 0))
-			case 2:
-				check("uint8", uint8Val, table.GetUint8Slot(f, 0))
-			case 3:
-				check("int16", int16Val, table.GetInt16Slot(f, 0))
-			case 4:
-				check("uint16", uint16Val, table.GetUint16Slot(f, 0))
-			case 5:
-				check("int32", int32Val, table.GetInt32Slot(f, 0))
-			case 6:
-				check("uint32", uint32Val, table.GetUint32Slot(f, 0))
-			case 7:
-				check("int64", int64Val, table.GetInt64Slot(f, 0))
-			case 8:
-				check("uint64", uint64Val, table.GetUint64Slot(f, 0))
-			case 9:
-				check("float32", float32Val, table.GetFloat32Slot(f, 0))
-			case 10:
-				check("float64", float64Val, table.GetFloat64Slot(f, 0))
-			}
-		}
-	}
-
-	// If enough checks were made, verify that all scalar types were used:
-	if fuzzFields*fuzzObjects >= testValuesMax {
-		if len(stats) != testValuesMax {
-			fail("fuzzing failed to test all scalar types")
-		}
-	}
-
-	// Print some counts, if needed:
-	if testing.Verbose() {
-		if fuzzFields == 0 || fuzzObjects == 0 {
-			fmt.Printf("fuzz\tfields: %d\tobjects: %d\t[none]\t%d\n",
-				fuzzFields, fuzzObjects, 0)
-		} else {
-			keys := make([]string, 0, len(stats))
-			for k := range stats {
-				keys = append(keys, k)
-			}
-			sort.Strings(keys)
-			for _, k := range keys {
-				fmt.Printf("fuzz\tfields: %d\tobjects: %d\t%s\t%d\n",
-					fuzzFields, fuzzObjects, k, stats[k])
-			}
-		}
-	}
-
-	return
-}
-
-// FailString makes a message for when expectations differ from reality.
-func FailString(name string, want, got interface{}) string {
-	return fmt.Sprintf("bad %s: want %#v got %#v", name, want, got)
-}
-
-// CheckByteLayout verifies the bytes of a Builder in various scenarios.
-func CheckByteLayout(fail func(string, ...interface{})) {
-	var b *flatbuffers.Builder
-
-	var i int
-	check := func(want []byte) {
-		i++
-		got := b.Bytes[b.Head():]
-		if !bytes.Equal(want, got) {
-			fail("case %d: want\n%v\nbut got\n%v\n", i, want, got)
-		}
-	}
-
-	// test 1: numbers
-
-	b = flatbuffers.NewBuilder(0)
-	check([]byte{})
-	b.PrependBool(true)
-	check([]byte{1})
-	b.PrependInt8(-127)
-	check([]byte{129, 1})
-	b.PrependUint8(255)
-	check([]byte{255, 129, 1})
-	b.PrependInt16(-32222)
-	check([]byte{0x22, 0x82, 0, 255, 129, 1}) // first pad
-	b.PrependUint16(0xFEEE)
-	check([]byte{0xEE, 0xFE, 0x22, 0x82, 0, 255, 129, 1}) // no pad this time
-	b.PrependInt32(-53687092)
-	check([]byte{204, 204, 204, 252, 0xEE, 0xFE, 0x22, 0x82, 0, 255, 129, 1})
-	b.PrependUint32(0x98765432)
-	check([]byte{0x32, 0x54, 0x76, 0x98, 204, 204, 204, 252, 0xEE, 0xFE, 0x22, 0x82, 0, 255, 129, 1})
-
-	// test 1b: numbers 2
-
-	b = flatbuffers.NewBuilder(0)
-	b.PrependUint64(0x1122334455667788)
-	check([]byte{0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11})
-
-	// test 2: 1xbyte vector
-
-	b = flatbuffers.NewBuilder(0)
-	check([]byte{})
-	b.StartVector(flatbuffers.SizeByte, 1, 1)
-	check([]byte{0, 0, 0}) // align to 4bytes
-	b.PrependByte(1)
-	check([]byte{1, 0, 0, 0})
-	b.EndVector(1)
-	check([]byte{1, 0, 0, 0, 1, 0, 0, 0}) // padding
-
-	// test 3: 2xbyte vector
-
-	b = flatbuffers.NewBuilder(0)
-	b.StartVector(flatbuffers.SizeByte, 2, 1)
-	check([]byte{0, 0}) // align to 4bytes
-	b.PrependByte(1)
-	check([]byte{1, 0, 0})
-	b.PrependByte(2)
-	check([]byte{2, 1, 0, 0})
-	b.EndVector(2)
-	check([]byte{2, 0, 0, 0, 2, 1, 0, 0}) // padding
-
-	// test 3b: 11xbyte vector matches builder size
-
-	b = flatbuffers.NewBuilder(12)
-	b.StartVector(flatbuffers.SizeByte, 8, 1)
-	start := []byte{}
-	check(start)
-	for i := 1; i < 12; i++ {
-		b.PrependByte(byte(i))
-		start = append([]byte{byte(i)}, start...)
-		check(start)
-	}
-	b.EndVector(8)
-	check(append([]byte{8, 0, 0, 0}, start...))
-
-	// test 4: 1xuint16 vector
-
-	b = flatbuffers.NewBuilder(0)
-	b.StartVector(flatbuffers.SizeUint16, 1, 1)
-	check([]byte{0, 0}) // align to 4bytes
-	b.PrependUint16(1)
-	check([]byte{1, 0, 0, 0})
-	b.EndVector(1)
-	check([]byte{1, 0, 0, 0, 1, 0, 0, 0}) // padding
-
-	// test 5: 2xuint16 vector
-
-	b = flatbuffers.NewBuilder(0)
-	b.StartVector(flatbuffers.SizeUint16, 2, 1)
-	check([]byte{}) // align to 4bytes
-	b.PrependUint16(0xABCD)
-	check([]byte{0xCD, 0xAB})
-	b.PrependUint16(0xDCBA)
-	check([]byte{0xBA, 0xDC, 0xCD, 0xAB})
-	b.EndVector(2)
-	check([]byte{2, 0, 0, 0, 0xBA, 0xDC, 0xCD, 0xAB})
-
-	// test 6: CreateString
-
-	b = flatbuffers.NewBuilder(0)
-	b.CreateString("foo")
-	check([]byte{3, 0, 0, 0, 'f', 'o', 'o', 0}) // 0-terminated, no pad
-	b.CreateString("moop")
-	check([]byte{4, 0, 0, 0, 'm', 'o', 'o', 'p', 0, 0, 0, 0, // 0-terminated, 3-byte pad
-		3, 0, 0, 0, 'f', 'o', 'o', 0})
-
-	// test 6b: CreateString unicode
-
-	b = flatbuffers.NewBuilder(0)
-	// These characters are chinese from blog.golang.org/strings
-	// We use escape codes here so that editors without unicode support
-	// aren't bothered:
-	uni_str := "\u65e5\u672c\u8a9e"
-	b.CreateString(uni_str)
-	check([]byte{9, 0, 0, 0, 230, 151, 165, 230, 156, 172, 232, 170, 158, 0, //  null-terminated, 2-byte pad
-		0, 0})
-
-	// test 6c: CreateByteString
-
-	b = flatbuffers.NewBuilder(0)
-	b.CreateByteString([]byte("foo"))
-	check([]byte{3, 0, 0, 0, 'f', 'o', 'o', 0}) // 0-terminated, no pad
-	b.CreateByteString([]byte("moop"))
-	check([]byte{4, 0, 0, 0, 'm', 'o', 'o', 'p', 0, 0, 0, 0, // 0-terminated, 3-byte pad
-		3, 0, 0, 0, 'f', 'o', 'o', 0})
-
-	// test 7: empty vtable
-	b = flatbuffers.NewBuilder(0)
-	b.StartObject(0)
-	check([]byte{})
-	b.EndObject()
-	check([]byte{4, 0, 4, 0, 4, 0, 0, 0})
-
-	// test 8: vtable with one true bool
-	b = flatbuffers.NewBuilder(0)
-	check([]byte{})
-	b.StartObject(1)
-	check([]byte{})
-	b.PrependBoolSlot(0, true, false)
-	b.EndObject()
-	check([]byte{
-		6, 0, // vtable bytes
-		8, 0, // length of object including vtable offset
-		7, 0, // start of bool value
-		6, 0, 0, 0, // offset for start of vtable (int32)
-		0, 0, 0, // padded to 4 bytes
-		1, // bool value
-	})
-
-	// test 9: vtable with one default bool
-	b = flatbuffers.NewBuilder(0)
-	check([]byte{})
-	b.StartObject(1)
-	check([]byte{})
-	b.PrependBoolSlot(0, false, false)
-	b.EndObject()
-	check([]byte{
-		6, 0, // vtable bytes
-		4, 0, // end of object from here
-		0, 0, // entry 1 is zero
-		6, 0, 0, 0, // offset for start of vtable (int32)
-	})
-
-	// test 10: vtable with one int16
-	b = flatbuffers.NewBuilder(0)
-	b.StartObject(1)
-	b.PrependInt16Slot(0, 0x789A, 0)
-	b.EndObject()
-	check([]byte{
-		6, 0, // vtable bytes
-		8, 0, // end of object from here
-		6, 0, // offset to value
-		6, 0, 0, 0, // offset for start of vtable (int32)
-		0, 0, // padding to 4 bytes
-		0x9A, 0x78,
-	})
-
-	// test 11: vtable with two int16
-	b = flatbuffers.NewBuilder(0)
-	b.StartObject(2)
-	b.PrependInt16Slot(0, 0x3456, 0)
-	b.PrependInt16Slot(1, 0x789A, 0)
-	b.EndObject()
-	check([]byte{
-		8, 0, // vtable bytes
-		8, 0, // end of object from here
-		6, 0, // offset to value 0
-		4, 0, // offset to value 1
-		8, 0, 0, 0, // offset for start of vtable (int32)
-		0x9A, 0x78, // value 1
-		0x56, 0x34, // value 0
-	})
-
-	// test 12: vtable with int16 and bool
-	b = flatbuffers.NewBuilder(0)
-	b.StartObject(2)
-	b.PrependInt16Slot(0, 0x3456, 0)
-	b.PrependBoolSlot(1, true, false)
-	b.EndObject()
-	check([]byte{
-		8, 0, // vtable bytes
-		8, 0, // end of object from here
-		6, 0, // offset to value 0
-		5, 0, // offset to value 1
-		8, 0, 0, 0, // offset for start of vtable (int32)
-		0,          // padding
-		1,          // value 1
-		0x56, 0x34, // value 0
-	})
-
-	// test 12: vtable with empty vector
-	b = flatbuffers.NewBuilder(0)
-	b.StartVector(flatbuffers.SizeByte, 0, 1)
-	vecend := b.EndVector(0)
-	b.StartObject(1)
-	b.PrependUOffsetTSlot(0, vecend, 0)
-	b.EndObject()
-	check([]byte{
-		6, 0, // vtable bytes
-		8, 0,
-		4, 0, // offset to vector offset
-		6, 0, 0, 0, // offset for start of vtable (int32)
-		4, 0, 0, 0,
-		0, 0, 0, 0, // length of vector (not in struct)
-	})
-
-	// test 12b: vtable with empty vector of byte and some scalars
-	b = flatbuffers.NewBuilder(0)
-	b.StartVector(flatbuffers.SizeByte, 0, 1)
-	vecend = b.EndVector(0)
-	b.StartObject(2)
-	b.PrependInt16Slot(0, 55, 0)
-	b.PrependUOffsetTSlot(1, vecend, 0)
-	b.EndObject()
-	check([]byte{
-		8, 0, // vtable bytes
-		12, 0,
-		10, 0, // offset to value 0
-		4, 0, // offset to vector offset
-		8, 0, 0, 0, // vtable loc
-		8, 0, 0, 0, // value 1
-		0, 0, 55, 0, // value 0
-
-		0, 0, 0, 0, // length of vector (not in struct)
-	})
-
-	// test 13: vtable with 1 int16 and 2-vector of int16
-	b = flatbuffers.NewBuilder(0)
-	b.StartVector(flatbuffers.SizeInt16, 2, 1)
-	b.PrependInt16(0x1234)
-	b.PrependInt16(0x5678)
-	vecend = b.EndVector(2)
-	b.StartObject(2)
-	b.PrependUOffsetTSlot(1, vecend, 0)
-	b.PrependInt16Slot(0, 55, 0)
-	b.EndObject()
-	check([]byte{
-		8, 0, // vtable bytes
-		12, 0, // length of object
-		6, 0, // start of value 0 from end of vtable
-		8, 0, // start of value 1 from end of buffer
-		8, 0, 0, 0, // offset for start of vtable (int32)
-		0, 0, // padding
-		55, 0, // value 0
-		4, 0, 0, 0, // vector position from here
-		2, 0, 0, 0, // length of vector (uint32)
-		0x78, 0x56, // vector value 1
-		0x34, 0x12, // vector value 0
-	})
-
-	// test 14: vtable with 1 struct of 1 int8, 1 int16, 1 int32
-	b = flatbuffers.NewBuilder(0)
-	b.StartObject(1)
-	b.Prep(4+4+4, 0)
-	b.PrependInt8(55)
-	b.Pad(3)
-	b.PrependInt16(0x1234)
-	b.Pad(2)
-	b.PrependInt32(0x12345678)
-	structStart := b.Offset()
-	b.PrependStructSlot(0, structStart, 0)
-	b.EndObject()
-	check([]byte{
-		6, 0, // vtable bytes
-		16, 0, // end of object from here
-		4, 0, // start of struct from here
-		6, 0, 0, 0, // offset for start of vtable (int32)
-		0x78, 0x56, 0x34, 0x12, // value 2
-		0, 0, // padding
-		0x34, 0x12, // value 1
-		0, 0, 0, // padding
-		55, // value 0
-	})
-
-	// test 15: vtable with 1 vector of 2 struct of 2 int8
-	b = flatbuffers.NewBuilder(0)
-	b.StartVector(flatbuffers.SizeInt8*2, 2, 1)
-	b.PrependInt8(33)
-	b.PrependInt8(44)
-	b.PrependInt8(55)
-	b.PrependInt8(66)
-	vecend = b.EndVector(2)
-	b.StartObject(1)
-	b.PrependUOffsetTSlot(0, vecend, 0)
-	b.EndObject()
-	check([]byte{
-		6, 0, // vtable bytes
-		8, 0,
-		4, 0, // offset of vector offset
-		6, 0, 0, 0, // offset for start of vtable (int32)
-		4, 0, 0, 0, // vector start offset
-
-		2, 0, 0, 0, // vector length
-		66, // vector value 1,1
-		55, // vector value 1,0
-		44, // vector value 0,1
-		33, // vector value 0,0
-	})
-
-	// test 16: table with some elements
-	b = flatbuffers.NewBuilder(0)
-	b.StartObject(2)
-	b.PrependInt8Slot(0, 33, 0)
-	b.PrependInt16Slot(1, 66, 0)
-	off := b.EndObject()
-	b.Finish(off)
-
-	check([]byte{
-		12, 0, 0, 0, // root of table: points to vtable offset
-
-		8, 0, // vtable bytes
-		8, 0, // end of object from here
-		7, 0, // start of value 0
-		4, 0, // start of value 1
-
-		8, 0, 0, 0, // offset for start of vtable (int32)
-
-		66, 0, // value 1
-		0,  // padding
-		33, // value 0
-	})
-
-	// test 17: one unfinished table and one finished table
-	b = flatbuffers.NewBuilder(0)
-	b.StartObject(2)
-	b.PrependInt8Slot(0, 33, 0)
-	b.PrependInt8Slot(1, 44, 0)
-	off = b.EndObject()
-	b.Finish(off)
-
-	b.StartObject(3)
-	b.PrependInt8Slot(0, 55, 0)
-	b.PrependInt8Slot(1, 66, 0)
-	b.PrependInt8Slot(2, 77, 0)
-	off = b.EndObject()
-	b.Finish(off)
-
-	check([]byte{
-		16, 0, 0, 0, // root of table: points to object
-		0, 0, // padding
-
-		10, 0, // vtable bytes
-		8, 0, // size of object
-		7, 0, // start of value 0
-		6, 0, // start of value 1
-		5, 0, // start of value 2
-		10, 0, 0, 0, // offset for start of vtable (int32)
-		0,  // padding
-		77, // value 2
-		66, // value 1
-		55, // value 0
-
-		12, 0, 0, 0, // root of table: points to object
-
-		8, 0, // vtable bytes
-		8, 0, // size of object
-		7, 0, // start of value 0
-		6, 0, // start of value 1
-		8, 0, 0, 0, // offset for start of vtable (int32)
-		0, 0, // padding
-		44, // value 1
-		33, // value 0
-	})
-
-	// test 18: a bunch of bools
-	b = flatbuffers.NewBuilder(0)
-	b.StartObject(8)
-	b.PrependBoolSlot(0, true, false)
-	b.PrependBoolSlot(1, true, false)
-	b.PrependBoolSlot(2, true, false)
-	b.PrependBoolSlot(3, true, false)
-	b.PrependBoolSlot(4, true, false)
-	b.PrependBoolSlot(5, true, false)
-	b.PrependBoolSlot(6, true, false)
-	b.PrependBoolSlot(7, true, false)
-	off = b.EndObject()
-	b.Finish(off)
-
-	check([]byte{
-		24, 0, 0, 0, // root of table: points to vtable offset
-
-		20, 0, // vtable bytes
-		12, 0, // size of object
-		11, 0, // start of value 0
-		10, 0, // start of value 1
-		9, 0, // start of value 2
-		8, 0, // start of value 3
-		7, 0, // start of value 4
-		6, 0, // start of value 5
-		5, 0, // start of value 6
-		4, 0, // start of value 7
-		20, 0, 0, 0, // vtable offset
-
-		1, // value 7
-		1, // value 6
-		1, // value 5
-		1, // value 4
-		1, // value 3
-		1, // value 2
-		1, // value 1
-		1, // value 0
-	})
-
-	// test 19: three bools
-	b = flatbuffers.NewBuilder(0)
-	b.StartObject(3)
-	b.PrependBoolSlot(0, true, false)
-	b.PrependBoolSlot(1, true, false)
-	b.PrependBoolSlot(2, true, false)
-	off = b.EndObject()
-	b.Finish(off)
-
-	check([]byte{
-		16, 0, 0, 0, // root of table: points to vtable offset
-
-		0, 0, // padding
-
-		10, 0, // vtable bytes
-		8, 0, // size of object
-		7, 0, // start of value 0
-		6, 0, // start of value 1
-		5, 0, // start of value 2
-		10, 0, 0, 0, // vtable offset from here
-
-		0, // padding
-		1, // value 2
-		1, // value 1
-		1, // value 0
-	})
-
-	// test 20: some floats
-	b = flatbuffers.NewBuilder(0)
-	b.StartObject(1)
-	b.PrependFloat32Slot(0, 1.0, 0.0)
-	off = b.EndObject()
-
-	check([]byte{
-		6, 0, // vtable bytes
-		8, 0, // size of object
-		4, 0, // start of value 0
-		6, 0, 0, 0, // vtable offset
-
-		0, 0, 128, 63, // value 0
-	})
-}
-
-// CheckManualBuild builds a Monster manually.
-func CheckManualBuild(fail func(string, ...interface{})) ([]byte, flatbuffers.UOffsetT) {
-	b := flatbuffers.NewBuilder(0)
-	str := b.CreateString("MyMonster")
-
-	b.StartVector(1, 5, 1)
-	b.PrependByte(4)
-	b.PrependByte(3)
-	b.PrependByte(2)
-	b.PrependByte(1)
-	b.PrependByte(0)
-	inv := b.EndVector(5)
-
-	b.StartObject(13)
-	b.PrependInt16Slot(2, 20, 100)
-	mon2 := b.EndObject()
-
-	// Test4Vector
-	b.StartVector(4, 2, 1)
-
-	// Test 0
-	b.Prep(2, 4)
-	b.Pad(1)
-	b.PlaceInt8(20)
-	b.PlaceInt16(10)
-
-	// Test 1
-	b.Prep(2, 4)
-	b.Pad(1)
-	b.PlaceInt8(40)
-	b.PlaceInt16(30)
-
-	// end testvector
-	test4 := b.EndVector(2)
-
-	b.StartObject(13)
-
-	// a vec3
-	b.Prep(16, 32)
-	b.Pad(2)
-	b.Prep(2, 4)
-	b.Pad(1)
-	b.PlaceByte(6)
-	b.PlaceInt16(5)
-	b.Pad(1)
-	b.PlaceByte(4)
-	b.PlaceFloat64(3.0)
-	b.Pad(4)
-	b.PlaceFloat32(3.0)
-	b.PlaceFloat32(2.0)
-	b.PlaceFloat32(1.0)
-	vec3Loc := b.Offset()
-	// end vec3
-
-	b.PrependStructSlot(0, vec3Loc, 0) // vec3. noop
-	b.PrependInt16Slot(2, 80, 100)     // hp
-	b.PrependUOffsetTSlot(3, str, 0)
-	b.PrependUOffsetTSlot(5, inv, 0) // inventory
-	b.PrependByteSlot(7, 1, 0)
-	b.PrependUOffsetTSlot(8, mon2, 0)
-	b.PrependUOffsetTSlot(9, test4, 0)
-	mon := b.EndObject()
-
-	b.Finish(mon)
-
-	return b.Bytes, b.Head()
-}
-
-func CheckGetRootAsForNonRootTable(fail func(string, ...interface{})) {
-	b := flatbuffers.NewBuilder(0)
-	str := b.CreateString("MyStat")
-	example.StatStart(b)
-	example.StatAddId(b, str)
-	example.StatAddVal(b, 12345678)
-	example.StatAddCount(b, 12345)
-	stat_end := example.StatEnd(b)
-	b.Finish(stat_end)
-
-	stat := example.GetRootAsStat(b.Bytes, b.Head())
-
-	if got := stat.Id(); !bytes.Equal([]byte("MyStat"), got) {
-		fail(FailString("stat.Id()", "MyStat", got))
-	}
-
-	if got := stat.Val(); 12345678 != got {
-		fail(FailString("stat.Val()", 12345678, got))
-	}
-
-	if got := stat.Count(); 12345 != got {
-		fail(FailString("stat.Count()", 12345, got))
-	}
-}
-
-// CheckGeneratedBuild uses generated code to build the example Monster.
-func CheckGeneratedBuild(fail func(string, ...interface{})) ([]byte, flatbuffers.UOffsetT) {
-	b := flatbuffers.NewBuilder(0)
-	str := b.CreateString("MyMonster")
-	test1 := b.CreateString("test1")
-	test2 := b.CreateString("test2")
-	fred := b.CreateString("Fred")
-
-	example.MonsterStartInventoryVector(b, 5)
-	b.PrependByte(4)
-	b.PrependByte(3)
-	b.PrependByte(2)
-	b.PrependByte(1)
-	b.PrependByte(0)
-	inv := b.EndVector(5)
-
-	example.MonsterStart(b)
-	example.MonsterAddName(b, fred)
-	mon2 := example.MonsterEnd(b)
-
-	example.MonsterStartTest4Vector(b, 2)
-	example.CreateTest(b, 10, 20)
-	example.CreateTest(b, 30, 40)
-	test4 := b.EndVector(2)
-
-	example.MonsterStartTestarrayofstringVector(b, 2)
-	b.PrependUOffsetT(test2)
-	b.PrependUOffsetT(test1)
-	testArrayOfString := b.EndVector(2)
-
-	example.MonsterStart(b)
-
-	pos := example.CreateVec3(b, 1.0, 2.0, 3.0, 3.0, 2, 5, 6)
-	example.MonsterAddPos(b, pos)
-
-	example.MonsterAddHp(b, 80)
-	example.MonsterAddName(b, str)
-	example.MonsterAddInventory(b, inv)
-	example.MonsterAddTestType(b, 1)
-	example.MonsterAddTest(b, mon2)
-	example.MonsterAddTest4(b, test4)
-	example.MonsterAddTestarrayofstring(b, testArrayOfString)
-	mon := example.MonsterEnd(b)
-
-	b.Finish(mon)
-
-	return b.Bytes, b.Head()
-}
-
-// CheckTableAccessors checks that the table accessors work as expected.
-func CheckTableAccessors(fail func(string, ...interface{})) {
-	// test struct accessor
-	b := flatbuffers.NewBuilder(0)
-	pos := example.CreateVec3(b, 1.0, 2.0, 3.0, 3.0, 4, 5, 6)
-	b.Finish(pos)
-	vec3Bytes := b.FinishedBytes()
-	vec3 := &example.Vec3{}
-	flatbuffers.GetRootAs(vec3Bytes, 0, vec3)
-
-	if bytes.Compare(vec3Bytes, vec3.Table().Bytes) != 0 {
-		fail("invalid vec3 table")
-	}
-
-	// test table accessor
-	b = flatbuffers.NewBuilder(0)
-	str := b.CreateString("MyStat")
-	example.StatStart(b)
-	example.StatAddId(b, str)
-	example.StatAddVal(b, 12345678)
-	example.StatAddCount(b, 12345)
-	pos = example.StatEnd(b)
-	b.Finish(pos)
-	statBytes := b.FinishedBytes()
-	stat := &example.Stat{}
-	flatbuffers.GetRootAs(statBytes, 0, stat)
-
-	if bytes.Compare(statBytes, stat.Table().Bytes) != 0 {
-		fail("invalid stat table")
-	}
-}
-
-// CheckVtableDeduplication verifies that vtables are deduplicated.
-func CheckVtableDeduplication(fail func(string, ...interface{})) {
-	b := flatbuffers.NewBuilder(0)
-
-	b.StartObject(4)
-	b.PrependByteSlot(0, 0, 0)
-	b.PrependByteSlot(1, 11, 0)
-	b.PrependByteSlot(2, 22, 0)
-	b.PrependInt16Slot(3, 33, 0)
-	obj0 := b.EndObject()
-
-	b.StartObject(4)
-	b.PrependByteSlot(0, 0, 0)
-	b.PrependByteSlot(1, 44, 0)
-	b.PrependByteSlot(2, 55, 0)
-	b.PrependInt16Slot(3, 66, 0)
-	obj1 := b.EndObject()
-
-	b.StartObject(4)
-	b.PrependByteSlot(0, 0, 0)
-	b.PrependByteSlot(1, 77, 0)
-	b.PrependByteSlot(2, 88, 0)
-	b.PrependInt16Slot(3, 99, 0)
-	obj2 := b.EndObject()
-
-	got := b.Bytes[b.Head():]
-
-	want := []byte{
-		240, 255, 255, 255, // == -12. offset to dedupped vtable.
-		99, 0,
-		88,
-		77,
-		248, 255, 255, 255, // == -8. offset to dedupped vtable.
-		66, 0,
-		55,
-		44,
-		12, 0,
-		8, 0,
-		0, 0,
-		7, 0,
-		6, 0,
-		4, 0,
-		12, 0, 0, 0,
-		33, 0,
-		22,
-		11,
-	}
-
-	if !bytes.Equal(want, got) {
-		fail("testVtableDeduplication want:\n%d %v\nbut got:\n%d %v\n",
-			len(want), want, len(got), got)
-	}
-
-	table0 := &flatbuffers.Table{Bytes: b.Bytes, Pos: flatbuffers.UOffsetT(len(b.Bytes)) - obj0}
-	table1 := &flatbuffers.Table{Bytes: b.Bytes, Pos: flatbuffers.UOffsetT(len(b.Bytes)) - obj1}
-	table2 := &flatbuffers.Table{Bytes: b.Bytes, Pos: flatbuffers.UOffsetT(len(b.Bytes)) - obj2}
-
-	testTable := func(tab *flatbuffers.Table, a flatbuffers.VOffsetT, b, c, d byte) {
-		// vtable size
-		if got := tab.GetVOffsetTSlot(0, 0); 12 != got {
-			fail("failed 0, 0: %d", got)
-		}
-		// object size
-		if got := tab.GetVOffsetTSlot(2, 0); 8 != got {
-			fail("failed 2, 0: %d", got)
-		}
-		// default value
-		if got := tab.GetVOffsetTSlot(4, 0); a != got {
-			fail("failed 4, 0: %d", got)
-		}
-		if got := tab.GetByteSlot(6, 0); b != got {
-			fail("failed 6, 0: %d", got)
-		}
-		if val := tab.GetByteSlot(8, 0); c != val {
-			fail("failed 8, 0: %d", got)
-		}
-		if got := tab.GetByteSlot(10, 0); d != got {
-			fail("failed 10, 0: %d", got)
-		}
-	}
-
-	testTable(table0, 0, 11, 22, 33)
-	testTable(table1, 0, 44, 55, 66)
-	testTable(table2, 0, 77, 88, 99)
-}
-
-// CheckNotInObjectError verifies that `EndObject` fails if not inside an
-// object.
-func CheckNotInObjectError(fail func(string, ...interface{})) {
-	b := flatbuffers.NewBuilder(0)
-
-	defer func() {
-		r := recover()
-		if r == nil {
-			fail("expected panic in CheckNotInObjectError")
-		}
-	}()
-	b.EndObject()
-}
-
-// CheckStringIsNestedError verifies that a string can not be created inside
-// another object.
-func CheckStringIsNestedError(fail func(string, ...interface{})) {
-	b := flatbuffers.NewBuilder(0)
-	b.StartObject(0)
-	defer func() {
-		r := recover()
-		if r == nil {
-			fail("expected panic in CheckStringIsNestedError")
-		}
-	}()
-	b.CreateString("foo")
-}
-
-// CheckByteStringIsNestedError verifies that a bytestring can not be created
-// inside another object.
-func CheckByteStringIsNestedError(fail func(string, ...interface{})) {
-	b := flatbuffers.NewBuilder(0)
-	b.StartObject(0)
-	defer func() {
-		r := recover()
-		if r == nil {
-			fail("expected panic in CheckByteStringIsNestedError")
-		}
-	}()
-	b.CreateByteString([]byte("foo"))
-}
-
-// CheckStructIsNotInlineError verifies that writing a struct in a location
-// away from where it is used will cause a panic.
-func CheckStructIsNotInlineError(fail func(string, ...interface{})) {
-	b := flatbuffers.NewBuilder(0)
-	b.StartObject(0)
-	defer func() {
-		r := recover()
-		if r == nil {
-			fail("expected panic in CheckStructIsNotInlineError")
-		}
-	}()
-	b.PrependStructSlot(0, 1, 0)
-}
-
-// CheckFinishedBytesError verifies that `FinishedBytes` panics if the table
-// is not finished.
-func CheckFinishedBytesError(fail func(string, ...interface{})) {
-	b := flatbuffers.NewBuilder(0)
-
-	defer func() {
-		r := recover()
-		if r == nil {
-			fail("expected panic in CheckFinishedBytesError")
-		}
-	}()
-	b.FinishedBytes()
-}
-
-// CheckEnumNames checks that the generated enum names are correct.
-func CheckEnumNames(fail func(string, ...interface{})) {
-	type testEnumNames struct {
-		EnumNames map[int]string
-		Expected  map[int]string
-	}
-	data := [...]testEnumNames{
-		{example.EnumNamesAny,
-			map[int]string{
-				example.AnyNONE:                    "NONE",
-				example.AnyMonster:                 "Monster",
-				example.AnyTestSimpleTableWithEnum: "TestSimpleTableWithEnum",
-			},
-		},
-		{example.EnumNamesColor,
-			map[int]string{
-				example.ColorRed:   "Red",
-				example.ColorGreen: "Green",
-				example.ColorBlue:  "Blue",
-			},
-		},
-	}
-	for _, t := range data {
-		for val, name := range t.Expected {
-			if name != t.EnumNames[val] {
-				fail("enum name is not equal")
-			}
-		}
-	}
-}
-
-// CheckDocExample checks that the code given in FlatBuffers documentation
-// is syntactically correct.
-func CheckDocExample(buf []byte, off flatbuffers.UOffsetT, fail func(string, ...interface{})) {
-	monster := example.GetRootAsMonster(buf, off)
-	_ = monster.Hp()
-	_ = monster.Pos(nil)
-	for i := 0; i < monster.InventoryLength(); i++ {
-		_ = monster.Inventory(i) // do something here
-	}
-
-	builder := flatbuffers.NewBuilder(0)
-
-	example.MonsterStartInventoryVector(builder, 5)
-	for i := 4; i >= 0; i-- {
-		builder.PrependByte(byte(i))
-	}
-	inv := builder.EndVector(5)
-
-	str := builder.CreateString("MyMonster")
-	example.MonsterStart(builder)
-	example.MonsterAddPos(builder, example.CreateVec3(builder, 1.0, 2.0, 3.0, 3.0, 4, 5, 6))
-	example.MonsterAddHp(builder, 80)
-	example.MonsterAddName(builder, str)
-	example.MonsterAddInventory(builder, inv)
-	example.MonsterAddTestType(builder, 1)
-	// example.MonsterAddTest(builder, mon2)
-	// example.MonsterAddTest4(builder, test4s)
-	_ = example.MonsterEnd(builder)
-}
-
-func CheckCreateByteVector(fail func(string, ...interface{})) {
-	raw := [30]byte{}
-	for i := 0; i < len(raw); i++ {
-		raw[i] = byte(i)
-	}
-
-	for size := 0; size < len(raw); size++ {
-		b1 := flatbuffers.NewBuilder(0)
-		b2 := flatbuffers.NewBuilder(0)
-		b1.StartVector(1, size, 1)
-		for i := size - 1; i >= 0; i-- {
-			b1.PrependByte(raw[i])
-		}
-		b1.EndVector(size)
-		b2.CreateByteVector(raw[:size])
-		CheckByteEquality(b1.Bytes, b2.Bytes, fail)
-	}
-}
-
-// Include simple random number generator to ensure results will be the
-// same cross platform.
-// http://en.wikipedia.org/wiki/Park%E2%80%93Miller_random_number_generator
-type LCG uint32
-
-const InitialLCGSeed = 48271
-
-func NewLCG() *LCG {
-	n := uint32(InitialLCGSeed)
-	l := LCG(n)
-	return &l
-}
-
-func (lcg *LCG) Reset() {
-	*lcg = InitialLCGSeed
-}
-
-func (lcg *LCG) Next() uint32 {
-	n := uint32((uint64(*lcg) * uint64(279470273)) % uint64(4294967291))
-	*lcg = LCG(n)
-	return n
-}
-
-// CheckByteEquality verifies that two byte buffers are the same.
-func CheckByteEquality(a, b []byte, fail func(string, ...interface{})) {
-	if !bytes.Equal(a, b) {
-		fail("objects are not byte-wise equal")
-	}
-}
-
-// CheckMutateMethods checks all mutate methods one by one
-func CheckMutateMethods(fail func(string, ...interface{})) {
-	b := flatbuffers.NewBuilder(0)
-	b.StartObject(15)
-	b.PrependBoolSlot(0, true, false)
-	b.PrependByteSlot(1, 1, 0)
-	b.PrependUint8Slot(2, 2, 0)
-	b.PrependUint16Slot(3, 3, 0)
-	b.PrependUint32Slot(4, 4, 0)
-	b.PrependUint64Slot(5, 5, 0)
-	b.PrependInt8Slot(6, 6, 0)
-	b.PrependInt16Slot(7, 7, 0)
-	b.PrependInt32Slot(8, 8, 0)
-	b.PrependInt64Slot(9, 9, 0)
-	b.PrependFloat32Slot(10, 10, 0)
-	b.PrependFloat64Slot(11, 11, 0)
-
-	b.PrependUOffsetTSlot(12, 12, 0)
-	uoVal := b.Offset() - 12
-
-	b.PrependVOffsetT(13)
-	b.Slot(13)
-
-	b.PrependSOffsetT(14)
-	b.Slot(14)
-	soVal := flatbuffers.SOffsetT(b.Offset() - 14)
-
-	offset := b.EndObject()
-
-	t := &flatbuffers.Table{
-		Bytes: b.Bytes,
-		Pos:   flatbuffers.UOffsetT(len(b.Bytes)) - offset,
-	}
-
-	calcVOffsetT := func(slot int) (vtableOffset flatbuffers.VOffsetT) {
-		return flatbuffers.VOffsetT((flatbuffers.VtableMetadataFields + slot) * flatbuffers.SizeVOffsetT)
-	}
-	calcUOffsetT := func(vtableOffset flatbuffers.VOffsetT) (valueOffset flatbuffers.UOffsetT) {
-		return t.Pos + flatbuffers.UOffsetT(t.Offset(vtableOffset))
-	}
-
-	type testcase struct {
-		field  string
-		testfn func() bool
-	}
-
-	testForOriginalValues := []testcase{
-		testcase{"BoolSlot", func() bool { return t.GetBoolSlot(calcVOffsetT(0), true) == true }},
-		testcase{"ByteSlot", func() bool { return t.GetByteSlot(calcVOffsetT(1), 1) == 1 }},
-		testcase{"Uint8Slot", func() bool { return t.GetUint8Slot(calcVOffsetT(2), 2) == 2 }},
-		testcase{"Uint16Slot", func() bool { return t.GetUint16Slot(calcVOffsetT(3), 3) == 3 }},
-		testcase{"Uint32Slot", func() bool { return t.GetUint32Slot(calcVOffsetT(4), 4) == 4 }},
-		testcase{"Uint64Slot", func() bool { return t.GetUint64Slot(calcVOffsetT(5), 5) == 5 }},
-		testcase{"Int8Slot", func() bool { return t.GetInt8Slot(calcVOffsetT(6), 6) == 6 }},
-		testcase{"Int16Slot", func() bool { return t.GetInt16Slot(calcVOffsetT(7), 7) == 7 }},
-		testcase{"Int32Slot", func() bool { return t.GetInt32Slot(calcVOffsetT(8), 8) == 8 }},
-		testcase{"Int64Slot", func() bool { return t.GetInt64Slot(calcVOffsetT(9), 9) == 9 }},
-		testcase{"Float32Slot", func() bool { return t.GetFloat32Slot(calcVOffsetT(10), 10) == 10 }},
-		testcase{"Float64Slot", func() bool { return t.GetFloat64Slot(calcVOffsetT(11), 11) == 11 }},
-		testcase{"UOffsetTSlot", func() bool { return t.GetUOffsetT(calcUOffsetT(calcVOffsetT(12))) == uoVal }},
-		testcase{"VOffsetTSlot", func() bool { return t.GetVOffsetT(calcUOffsetT(calcVOffsetT(13))) == 13 }},
-		testcase{"SOffsetTSlot", func() bool { return t.GetSOffsetT(calcUOffsetT(calcVOffsetT(14))) == soVal }},
-	}
-
-	testMutability := []testcase{
-		testcase{"BoolSlot", func() bool { return t.MutateBoolSlot(calcVOffsetT(0), false) }},
-		testcase{"ByteSlot", func() bool { return t.MutateByteSlot(calcVOffsetT(1), 2) }},
-		testcase{"Uint8Slot", func() bool { return t.MutateUint8Slot(calcVOffsetT(2), 4) }},
-		testcase{"Uint16Slot", func() bool { return t.MutateUint16Slot(calcVOffsetT(3), 6) }},
-		testcase{"Uint32Slot", func() bool { return t.MutateUint32Slot(calcVOffsetT(4), 8) }},
-		testcase{"Uint64Slot", func() bool { return t.MutateUint64Slot(calcVOffsetT(5), 10) }},
-		testcase{"Int8Slot", func() bool { return t.MutateInt8Slot(calcVOffsetT(6), 12) }},
-		testcase{"Int16Slot", func() bool { return t.MutateInt16Slot(calcVOffsetT(7), 14) }},
-		testcase{"Int32Slot", func() bool { return t.MutateInt32Slot(calcVOffsetT(8), 16) }},
-		testcase{"Int64Slot", func() bool { return t.MutateInt64Slot(calcVOffsetT(9), 18) }},
-		testcase{"Float32Slot", func() bool { return t.MutateFloat32Slot(calcVOffsetT(10), 20) }},
-		testcase{"Float64Slot", func() bool { return t.MutateFloat64Slot(calcVOffsetT(11), 22) }},
-		testcase{"UOffsetTSlot", func() bool { return t.MutateUOffsetT(calcUOffsetT(calcVOffsetT(12)), 24) }},
-		testcase{"VOffsetTSlot", func() bool { return t.MutateVOffsetT(calcUOffsetT(calcVOffsetT(13)), 26) }},
-		testcase{"SOffsetTSlot", func() bool { return t.MutateSOffsetT(calcUOffsetT(calcVOffsetT(14)), 28) }},
-	}
-
-	testMutabilityWithoutSlot := []testcase{
-		testcase{"BoolSlot", func() bool { return t.MutateBoolSlot(calcVOffsetT(16), false) }},
-		testcase{"ByteSlot", func() bool { return t.MutateByteSlot(calcVOffsetT(16), 2) }},
-		testcase{"Uint8Slot", func() bool { return t.MutateUint8Slot(calcVOffsetT(16), 2) }},
-		testcase{"Uint16Slot", func() bool { return t.MutateUint16Slot(calcVOffsetT(16), 2) }},
-		testcase{"Uint32Slot", func() bool { return t.MutateUint32Slot(calcVOffsetT(16), 2) }},
-		testcase{"Uint64Slot", func() bool { return t.MutateUint64Slot(calcVOffsetT(16), 2) }},
-		testcase{"Int8Slot", func() bool { return t.MutateInt8Slot(calcVOffsetT(16), 2) }},
-		testcase{"Int16Slot", func() bool { return t.MutateInt16Slot(calcVOffsetT(16), 2) }},
-		testcase{"Int32Slot", func() bool { return t.MutateInt32Slot(calcVOffsetT(16), 2) }},
-		testcase{"Int64Slot", func() bool { return t.MutateInt64Slot(calcVOffsetT(16), 2) }},
-		testcase{"Float32Slot", func() bool { return t.MutateFloat32Slot(calcVOffsetT(16), 2) }},
-		testcase{"Float64Slot", func() bool { return t.MutateFloat64Slot(calcVOffsetT(16), 2) }},
-	}
-
-	testForMutatedValues := []testcase{
-		testcase{"BoolSlot", func() bool { return t.GetBoolSlot(calcVOffsetT(0), true) == false }},
-		testcase{"ByteSlot", func() bool { return t.GetByteSlot(calcVOffsetT(1), 1) == 2 }},
-		testcase{"Uint8Slot", func() bool { return t.GetUint8Slot(calcVOffsetT(2), 1) == 4 }},
-		testcase{"Uint16Slot", func() bool { return t.GetUint16Slot(calcVOffsetT(3), 1) == 6 }},
-		testcase{"Uint32Slot", func() bool { return t.GetUint32Slot(calcVOffsetT(4), 1) == 8 }},
-		testcase{"Uint64Slot", func() bool { return t.GetUint64Slot(calcVOffsetT(5), 1) == 10 }},
-		testcase{"Int8Slot", func() bool { return t.GetInt8Slot(calcVOffsetT(6), 1) == 12 }},
-		testcase{"Int16Slot", func() bool { return t.GetInt16Slot(calcVOffsetT(7), 1) == 14 }},
-		testcase{"Int32Slot", func() bool { return t.GetInt32Slot(calcVOffsetT(8), 1) == 16 }},
-		testcase{"Int64Slot", func() bool { return t.GetInt64Slot(calcVOffsetT(9), 1) == 18 }},
-		testcase{"Float32Slot", func() bool { return t.GetFloat32Slot(calcVOffsetT(10), 1) == 20 }},
-		testcase{"Float64Slot", func() bool { return t.GetFloat64Slot(calcVOffsetT(11), 1) == 22 }},
-		testcase{"UOffsetTSlot", func() bool { return t.GetUOffsetT(calcUOffsetT(calcVOffsetT(12))) == 24 }},
-		testcase{"VOffsetTSlot", func() bool { return t.GetVOffsetT(calcUOffsetT(calcVOffsetT(13))) == 26 }},
-		testcase{"SOffsetTSlot", func() bool { return t.GetSOffsetT(calcUOffsetT(calcVOffsetT(14))) == 28 }},
-	}
-
-	// make sure original values are okay
-	for _, t := range testForOriginalValues {
-		if !t.testfn() {
-			fail(t.field + "' field doesn't have the expected original value")
-		}
-	}
-
-	// try to mutate fields and check mutability
-	for _, t := range testMutability {
-		if !t.testfn() {
-			fail(FailString(t.field+"' field failed mutability test", "passed", "failed"))
-		}
-	}
-
-	// try to mutate fields and check mutability
-	// these have wrong slots so should fail
-	for _, t := range testMutabilityWithoutSlot {
-		if t.testfn() {
-			fail(FailString(t.field+"' field failed no slot mutability test", "failed", "passed"))
-		}
-	}
-
-	// test whether values have changed
-	for _, t := range testForMutatedValues {
-		if !t.testfn() {
-			fail(t.field + "' field doesn't have the expected mutated value")
-		}
-	}
-}
-
-// BenchmarkVtableDeduplication measures the speed of vtable deduplication
-// by creating prePop vtables, then populating b.N objects with a
-// different single vtable.
-//
-// When b.N is large (as in long benchmarks), memory usage may be high.
-func BenchmarkVtableDeduplication(b *testing.B) {
-	prePop := 10
-	builder := flatbuffers.NewBuilder(0)
-
-	// pre-populate some vtables:
-	for i := 0; i < prePop; i++ {
-		builder.StartObject(i)
-		for j := 0; j < i; j++ {
-			builder.PrependInt16Slot(j, int16(j), 0)
-		}
-		builder.EndObject()
-	}
-
-	// benchmark deduplication of a new vtable:
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		lim := prePop
-
-		builder.StartObject(lim)
-		for j := 0; j < lim; j++ {
-			builder.PrependInt16Slot(j, int16(j), 0)
-		}
-		builder.EndObject()
-	}
-}
-
-// BenchmarkParseGold measures the speed of parsing the 'gold' data
-// used throughout this test suite.
-func BenchmarkParseGold(b *testing.B) {
-	buf, offset := CheckGeneratedBuild(b.Fatalf)
-	monster := example.GetRootAsMonster(buf, offset)
-
-	// use these to prevent allocations:
-	reuse_pos := example.Vec3{}
-	reuse_test3 := example.Test{}
-	reuse_table2 := flatbuffers.Table{}
-	reuse_monster2 := example.Monster{}
-	reuse_test4_0 := example.Test{}
-	reuse_test4_1 := example.Test{}
-
-	b.SetBytes(int64(len(buf[offset:])))
-	b.ReportAllocs()
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		monster.Hp()
-		monster.Mana()
-		name := monster.Name()
-		_ = name[0]
-		_ = name[len(name)-1]
-
-		monster.Pos(&reuse_pos)
-		reuse_pos.X()
-		reuse_pos.Y()
-		reuse_pos.Z()
-		reuse_pos.Test1()
-		reuse_pos.Test2()
-		reuse_pos.Test3(&reuse_test3)
-		reuse_test3.A()
-		reuse_test3.B()
-		monster.TestType()
-		monster.Test(&reuse_table2)
-		reuse_monster2.Init(reuse_table2.Bytes, reuse_table2.Pos)
-		name2 := reuse_monster2.Name()
-		_ = name2[0]
-		_ = name2[len(name2)-1]
-		monster.InventoryLength()
-		l := monster.InventoryLength()
-		for i := 0; i < l; i++ {
-			monster.Inventory(i)
-		}
-		monster.Test4Length()
-		monster.Test4(&reuse_test4_0, 0)
-		monster.Test4(&reuse_test4_1, 1)
-
-		reuse_test4_0.A()
-		reuse_test4_0.B()
-		reuse_test4_1.A()
-		reuse_test4_1.B()
-
-		monster.TestarrayofstringLength()
-		str0 := monster.Testarrayofstring(0)
-		_ = str0[0]
-		_ = str0[len(str0)-1]
-		str1 := monster.Testarrayofstring(1)
-		_ = str1[0]
-		_ = str1[len(str1)-1]
-	}
-}
-
-// BenchmarkBuildGold uses generated code to build the example Monster.
-func BenchmarkBuildGold(b *testing.B) {
-	buf, offset := CheckGeneratedBuild(b.Fatalf)
-	bytes_length := int64(len(buf[offset:]))
-
-	reuse_str := "MyMonster"
-	reuse_test1 := "test1"
-	reuse_test2 := "test2"
-	reuse_fred := "Fred"
-
-	b.SetBytes(bytes_length)
-	bldr := flatbuffers.NewBuilder(0)
-	b.ResetTimer()
-	b.ReportAllocs()
-	for i := 0; i < b.N; i++ {
-		bldr.Reset()
-
-		str := bldr.CreateString(reuse_str)
-		test1 := bldr.CreateString(reuse_test1)
-		test2 := bldr.CreateString(reuse_test2)
-		fred := bldr.CreateString(reuse_fred)
-
-		example.MonsterStartInventoryVector(bldr, 5)
-		bldr.PrependByte(4)
-		bldr.PrependByte(3)
-		bldr.PrependByte(2)
-		bldr.PrependByte(1)
-		bldr.PrependByte(0)
-		inv := bldr.EndVector(5)
-
-		example.MonsterStart(bldr)
-		example.MonsterAddName(bldr, fred)
-		mon2 := example.MonsterEnd(bldr)
-
-		example.MonsterStartTest4Vector(bldr, 2)
-		example.CreateTest(bldr, 10, 20)
-		example.CreateTest(bldr, 30, 40)
-		test4 := bldr.EndVector(2)
-
-		example.MonsterStartTestarrayofstringVector(bldr, 2)
-		bldr.PrependUOffsetT(test2)
-		bldr.PrependUOffsetT(test1)
-		testArrayOfString := bldr.EndVector(2)
-
-		example.MonsterStart(bldr)
-
-		pos := example.CreateVec3(bldr, 1.0, 2.0, 3.0, 3.0, 2, 5, 6)
-		example.MonsterAddPos(bldr, pos)
-
-		example.MonsterAddHp(bldr, 80)
-		example.MonsterAddName(bldr, str)
-		example.MonsterAddInventory(bldr, inv)
-		example.MonsterAddTestType(bldr, 1)
-		example.MonsterAddTest(bldr, mon2)
-		example.MonsterAddTest4(bldr, test4)
-		example.MonsterAddTestarrayofstring(bldr, testArrayOfString)
-		mon := example.MonsterEnd(bldr)
-
-		bldr.Finish(mon)
-	}
-}
diff --git a/third_party/flatbuffers/tests/include_test1.fbs b/third_party/flatbuffers/tests/include_test1.fbs
deleted file mode 100644
index 11aebe8..0000000
--- a/third_party/flatbuffers/tests/include_test1.fbs
+++ /dev/null
@@ -1,5 +0,0 @@
-include "include_test2.fbs";
-include "include_test2.fbs";  // should be skipped
-include "include_test1.fbs";  // should be skipped
-
-
diff --git a/third_party/flatbuffers/tests/include_test2.fbs b/third_party/flatbuffers/tests/include_test2.fbs
deleted file mode 100644
index d22c0d9..0000000
--- a/third_party/flatbuffers/tests/include_test2.fbs
+++ /dev/null
@@ -1,9 +0,0 @@
-include "include_test2.fbs";    // should be skipped
-
-namespace MyGame.OtherNameSpace;
-
-enum FromInclude:long { IncludeVal }
-
-struct Unused {}
-
-
diff --git a/third_party/flatbuffers/tests/monster_test.bfbs b/third_party/flatbuffers/tests/monster_test.bfbs
deleted file mode 100644
index 78871d5..0000000
--- a/third_party/flatbuffers/tests/monster_test.bfbs
+++ /dev/null
Binary files differ
diff --git a/third_party/flatbuffers/tests/monster_test.fbs b/third_party/flatbuffers/tests/monster_test.fbs
deleted file mode 100755
index 81ec993..0000000
--- a/third_party/flatbuffers/tests/monster_test.fbs
+++ /dev/null
@@ -1,86 +0,0 @@
-// test schema file
-
-include "include_test1.fbs";
-
-namespace MyGame.Example2;
-
-table Monster {}  // Test having same name as below, but in different namespace.
-
-namespace MyGame.Example;
-
-attribute "priority";
-
-enum Color:byte (bit_flags) { Red = 0, Green, Blue = 3, }
-
-union Any { Monster, TestSimpleTableWithEnum, MyGame.Example2.Monster }
-
-struct Test { a:short; b:byte; }
-
-table TestSimpleTableWithEnum (csharp_partial) {
-  color: Color = Green;
-}
-
-struct Vec3 (force_align: 16) {
-  x:float;
-  y:float;
-  z:float;
-  test1:double;
-  test2:Color;
-  test3:Test;
-}
-
-struct Ability {
-  id:uint(key);
-  distance:uint;
-}
-
-table Stat {
-  id:string;
-  val:long;
-  count:ushort;
-}
-
-/// an example documentation comment: monster object
-table Monster {
-  pos:Vec3 (id: 0);
-  hp:short = 100 (id: 2);
-  mana:short = 150 (id: 1);
-  name:string (id: 3, required, key);
-  color:Color = Blue (id: 6);
-  inventory:[ubyte] (id: 5);
-  friendly:bool = false (deprecated, priority: 1, id: 4);
-  /// an example documentation comment: this will end up in the generated code
-  /// multiline too
-  testarrayoftables:[Monster] (id: 11);
-  testarrayofstring:[string] (id: 10);
-  testarrayofstring2:[string] (id: 28);
-  testarrayofbools:[bool] (id: 24);
-  testarrayofsortedstruct:[Ability] (id: 29);
-  enemy:MyGame.Example.Monster (id:12);  // Test referring by full namespace.
-  test:Any (id: 8);
-  test4:[Test] (id: 9);
-  testnestedflatbuffer:[ubyte] (id:13, nested_flatbuffer: "Monster");
-  testempty:Stat (id:14);
-  testbool:bool (id:15);
-  testhashs32_fnv1:int (id:16, hash:"fnv1_32");
-  testhashu32_fnv1:uint (id:17, hash:"fnv1_32");
-  testhashs64_fnv1:long (id:18, hash:"fnv1_64");
-  testhashu64_fnv1:ulong (id:19, hash:"fnv1_64");
-  testhashs32_fnv1a:int (id:20, hash:"fnv1a_32");
-  testhashu32_fnv1a:uint (id:21, hash:"fnv1a_32", cpp_type:"Stat");
-  testhashs64_fnv1a:long (id:22, hash:"fnv1a_64");
-  testhashu64_fnv1a:ulong (id:23, hash:"fnv1a_64");
-  testf:float = 3.14159 (id:25);
-  testf2:float = 3 (id:26);
-  testf3:float (id:27);
-}
-
-rpc_service MonsterStorage {
-  Store(Monster):Stat (streaming: "none");
-  Retrieve(Stat):Monster (streaming: "server", idempotent);
-}
-
-root_type Monster;
-
-file_identifier "MONS";
-file_extension "mon";
diff --git a/third_party/flatbuffers/tests/monster_test.grpc.fb.cc b/third_party/flatbuffers/tests/monster_test.grpc.fb.cc
deleted file mode 100644
index c8ed1f5..0000000
--- a/third_party/flatbuffers/tests/monster_test.grpc.fb.cc
+++ /dev/null
@@ -1,85 +0,0 @@
-// Generated by the gRPC protobuf plugin.
-// If you make any local change, they will be lost.
-// source: monster_test
-
-#include "monster_test_generated.h"
-#include "monster_test.grpc.fb.h"
-
-#include <grpc++/impl/codegen/async_stream.h>
-#include <grpc++/impl/codegen/async_unary_call.h>
-#include <grpc++/impl/codegen/channel_interface.h>
-#include <grpc++/impl/codegen/client_unary_call.h>
-#include <grpc++/impl/codegen/method_handler_impl.h>
-#include <grpc++/impl/codegen/rpc_service_method.h>
-#include <grpc++/impl/codegen/service_type.h>
-#include <grpc++/impl/codegen/sync_stream.h>
-
-namespace MyGame {
-namespace Example {
-
-static const char* MonsterStorage_method_names[] = {
-  "/MyGame.Example.MonsterStorage/Store",
-  "/MyGame.Example.MonsterStorage/Retrieve",
-};
-
-std::unique_ptr< MonsterStorage::Stub> MonsterStorage::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) {
-  std::unique_ptr< MonsterStorage::Stub> stub(new MonsterStorage::Stub(channel));
-  return stub;
-}
-
-MonsterStorage::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel)
-  : channel_(channel)  , rpcmethod_Store_(MonsterStorage_method_names[0], ::grpc::RpcMethod::NORMAL_RPC, channel)
-  , rpcmethod_Retrieve_(MonsterStorage_method_names[1], ::grpc::RpcMethod::SERVER_STREAMING, channel)
-  {}
-  
-::grpc::Status MonsterStorage::Stub::Store(::grpc::ClientContext* context, const flatbuffers::BufferRef<Monster>& request, flatbuffers::BufferRef<Stat>* response) {
-  return ::grpc::BlockingUnaryCall(channel_.get(), rpcmethod_Store_, context, request, response);
-}
-
-::grpc::ClientAsyncResponseReader< flatbuffers::BufferRef<Stat>>* MonsterStorage::Stub::AsyncStoreRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef<Monster>& request, ::grpc::CompletionQueue* cq) {
-  return new ::grpc::ClientAsyncResponseReader< flatbuffers::BufferRef<Stat>>(channel_.get(), cq, rpcmethod_Store_, context, request);
-}
-
-::grpc::ClientReader< flatbuffers::BufferRef<Monster>>* MonsterStorage::Stub::RetrieveRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef<Stat>& request) {
-  return new ::grpc::ClientReader< flatbuffers::BufferRef<Monster>>(channel_.get(), rpcmethod_Retrieve_, context, request);
-}
-
-::grpc::ClientAsyncReader< flatbuffers::BufferRef<Monster>>* MonsterStorage::Stub::AsyncRetrieveRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef<Stat>& request, ::grpc::CompletionQueue* cq, void* tag) {
-  return new ::grpc::ClientAsyncReader< flatbuffers::BufferRef<Monster>>(channel_.get(), cq, rpcmethod_Retrieve_, context, request, tag);
-}
-
-MonsterStorage::Service::Service() {
-  (void)MonsterStorage_method_names;
-  AddMethod(new ::grpc::RpcServiceMethod(
-      MonsterStorage_method_names[0],
-      ::grpc::RpcMethod::NORMAL_RPC,
-      new ::grpc::RpcMethodHandler< MonsterStorage::Service, flatbuffers::BufferRef<Monster>, flatbuffers::BufferRef<Stat>>(
-          std::mem_fn(&MonsterStorage::Service::Store), this)));
-  AddMethod(new ::grpc::RpcServiceMethod(
-      MonsterStorage_method_names[1],
-      ::grpc::RpcMethod::SERVER_STREAMING,
-      new ::grpc::ServerStreamingHandler< MonsterStorage::Service, flatbuffers::BufferRef<Stat>, flatbuffers::BufferRef<Monster>>(
-          std::mem_fn(&MonsterStorage::Service::Retrieve), this)));
-}
-
-MonsterStorage::Service::~Service() {
-}
-
-::grpc::Status MonsterStorage::Service::Store(::grpc::ServerContext* context, const flatbuffers::BufferRef<Monster>* request, flatbuffers::BufferRef<Stat>* response) {
-  (void) context;
-  (void) request;
-  (void) response;
-  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
-}
-
-::grpc::Status MonsterStorage::Service::Retrieve(::grpc::ServerContext* context, const flatbuffers::BufferRef<Stat>* request, ::grpc::ServerWriter< flatbuffers::BufferRef<Monster>>* writer) {
-  (void) context;
-  (void) request;
-  (void) writer;
-  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
-}
-
-
-}  // namespace MyGame
-}  // namespace Example
-
diff --git a/third_party/flatbuffers/tests/monster_test.grpc.fb.h b/third_party/flatbuffers/tests/monster_test.grpc.fb.h
deleted file mode 100644
index 8228d7a..0000000
--- a/third_party/flatbuffers/tests/monster_test.grpc.fb.h
+++ /dev/null
@@ -1,161 +0,0 @@
-// Generated by the gRPC protobuf plugin.
-// If you make any local change, they will be lost.
-// source: monster_test
-#ifndef GRPC_monster_5ftest__INCLUDED
-#define GRPC_monster_5ftest__INCLUDED
-
-#include "monster_test_generated.h"
-#include "flatbuffers/grpc.h"
-
-#include <grpc++/impl/codegen/async_stream.h>
-#include <grpc++/impl/codegen/async_unary_call.h>
-#include <grpc++/impl/codegen/rpc_method.h>
-#include <grpc++/impl/codegen/service_type.h>
-#include <grpc++/impl/codegen/status.h>
-#include <grpc++/impl/codegen/stub_options.h>
-#include <grpc++/impl/codegen/sync_stream.h>
-
-namespace grpc {
-class CompletionQueue;
-class Channel;
-class RpcService;
-class ServerCompletionQueue;
-class ServerContext;
-}  // namespace grpc
-
-namespace MyGame {
-namespace Example {
-
-class MonsterStorage GRPC_FINAL {
- public:
-  class StubInterface {
-   public:
-    virtual ~StubInterface() {}
-    virtual ::grpc::Status Store(::grpc::ClientContext* context, const flatbuffers::BufferRef<Monster>& request, flatbuffers::BufferRef<Stat>* response) = 0;
-    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< flatbuffers::BufferRef<Stat>>> AsyncStore(::grpc::ClientContext* context, const flatbuffers::BufferRef<Monster>& request, ::grpc::CompletionQueue* cq) {
-      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< flatbuffers::BufferRef<Stat>>>(AsyncStoreRaw(context, request, cq));
-    }
-    std::unique_ptr< ::grpc::ClientReaderInterface< flatbuffers::BufferRef<Monster>>> Retrieve(::grpc::ClientContext* context, const flatbuffers::BufferRef<Stat>& request) {
-      return std::unique_ptr< ::grpc::ClientReaderInterface< flatbuffers::BufferRef<Monster>>>(RetrieveRaw(context, request));
-    }
-    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< flatbuffers::BufferRef<Monster>>> AsyncRetrieve(::grpc::ClientContext* context, const flatbuffers::BufferRef<Stat>& request, ::grpc::CompletionQueue* cq, void* tag) {
-      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< flatbuffers::BufferRef<Monster>>>(AsyncRetrieveRaw(context, request, cq, tag));
-    }
-  private:
-    virtual ::grpc::ClientAsyncResponseReaderInterface< flatbuffers::BufferRef<Stat>>* AsyncStoreRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef<Monster>& request, ::grpc::CompletionQueue* cq) = 0;
-    virtual ::grpc::ClientReaderInterface< flatbuffers::BufferRef<Monster>>* RetrieveRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef<Stat>& request) = 0;
-    virtual ::grpc::ClientAsyncReaderInterface< flatbuffers::BufferRef<Monster>>* AsyncRetrieveRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef<Stat>& request, ::grpc::CompletionQueue* cq, void* tag) = 0;
-  };
-  class Stub GRPC_FINAL : public StubInterface {
-   public:
-    Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel);
-    ::grpc::Status Store(::grpc::ClientContext* context, const flatbuffers::BufferRef<Monster>& request, flatbuffers::BufferRef<Stat>* response) GRPC_OVERRIDE;
-    std::unique_ptr< ::grpc::ClientAsyncResponseReader< flatbuffers::BufferRef<Stat>>> AsyncStore(::grpc::ClientContext* context, const flatbuffers::BufferRef<Monster>& request, ::grpc::CompletionQueue* cq) {
-      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< flatbuffers::BufferRef<Stat>>>(AsyncStoreRaw(context, request, cq));
-    }
-    std::unique_ptr< ::grpc::ClientReader< flatbuffers::BufferRef<Monster>>> Retrieve(::grpc::ClientContext* context, const flatbuffers::BufferRef<Stat>& request) {
-      return std::unique_ptr< ::grpc::ClientReader< flatbuffers::BufferRef<Monster>>>(RetrieveRaw(context, request));
-    }
-    std::unique_ptr< ::grpc::ClientAsyncReader< flatbuffers::BufferRef<Monster>>> AsyncRetrieve(::grpc::ClientContext* context, const flatbuffers::BufferRef<Stat>& request, ::grpc::CompletionQueue* cq, void* tag) {
-      return std::unique_ptr< ::grpc::ClientAsyncReader< flatbuffers::BufferRef<Monster>>>(AsyncRetrieveRaw(context, request, cq, tag));
-    }
-  
-   private:
-    std::shared_ptr< ::grpc::ChannelInterface> channel_;
-    ::grpc::ClientAsyncResponseReader< flatbuffers::BufferRef<Stat>>* AsyncStoreRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef<Monster>& request, ::grpc::CompletionQueue* cq) GRPC_OVERRIDE;
-    ::grpc::ClientReader< flatbuffers::BufferRef<Monster>>* RetrieveRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef<Stat>& request) GRPC_OVERRIDE;
-    ::grpc::ClientAsyncReader< flatbuffers::BufferRef<Monster>>* AsyncRetrieveRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef<Stat>& request, ::grpc::CompletionQueue* cq, void* tag) GRPC_OVERRIDE;
-    const ::grpc::RpcMethod rpcmethod_Store_;
-    const ::grpc::RpcMethod rpcmethod_Retrieve_;
-  };
-  static std::unique_ptr<Stub> NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());
-  
-  class Service : public ::grpc::Service {
-   public:
-    Service();
-    virtual ~Service();
-    virtual ::grpc::Status Store(::grpc::ServerContext* context, const flatbuffers::BufferRef<Monster>* request, flatbuffers::BufferRef<Stat>* response);
-    virtual ::grpc::Status Retrieve(::grpc::ServerContext* context, const flatbuffers::BufferRef<Stat>* request, ::grpc::ServerWriter< flatbuffers::BufferRef<Monster>>* writer);
-  };
-  template <class BaseClass>
-  class WithAsyncMethod_Store : public BaseClass {
-   private:
-    void BaseClassMustBeDerivedFromService(const Service *service) {}
-   public:
-    WithAsyncMethod_Store() {
-      ::grpc::Service::MarkMethodAsync(0);
-    }
-    ~WithAsyncMethod_Store() GRPC_OVERRIDE {
-      BaseClassMustBeDerivedFromService(this);
-    }
-    // disable synchronous version of this method
-    ::grpc::Status Store(::grpc::ServerContext* context, const flatbuffers::BufferRef<Monster>* request, flatbuffers::BufferRef<Stat>* response) GRPC_FINAL GRPC_OVERRIDE {
-      abort();
-      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
-    }
-    void RequestStore(::grpc::ServerContext* context, flatbuffers::BufferRef<Monster>* request, ::grpc::ServerAsyncResponseWriter< flatbuffers::BufferRef<Stat>>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
-      ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag);
-    }
-  };
-  template <class BaseClass>
-  class WithAsyncMethod_Retrieve : public BaseClass {
-   private:
-    void BaseClassMustBeDerivedFromService(const Service *service) {}
-   public:
-    WithAsyncMethod_Retrieve() {
-      ::grpc::Service::MarkMethodAsync(1);
-    }
-    ~WithAsyncMethod_Retrieve() GRPC_OVERRIDE {
-      BaseClassMustBeDerivedFromService(this);
-    }
-    // disable synchronous version of this method
-    ::grpc::Status Retrieve(::grpc::ServerContext* context, const flatbuffers::BufferRef<Stat>* request, ::grpc::ServerWriter< flatbuffers::BufferRef<Monster>>* writer) GRPC_FINAL GRPC_OVERRIDE {
-      abort();
-      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
-    }
-    void RequestRetrieve(::grpc::ServerContext* context, flatbuffers::BufferRef<Stat>* request, ::grpc::ServerAsyncWriter< flatbuffers::BufferRef<Monster>>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
-      ::grpc::Service::RequestAsyncServerStreaming(1, context, request, writer, new_call_cq, notification_cq, tag);
-    }
-  };
-  typedef   WithAsyncMethod_Store<  WithAsyncMethod_Retrieve<  Service   >   >   AsyncService;
-  template <class BaseClass>
-  class WithGenericMethod_Store : public BaseClass {
-   private:
-    void BaseClassMustBeDerivedFromService(const Service *service) {}
-   public:
-    WithGenericMethod_Store() {
-      ::grpc::Service::MarkMethodGeneric(0);
-    }
-    ~WithGenericMethod_Store() GRPC_OVERRIDE {
-      BaseClassMustBeDerivedFromService(this);
-    }
-    // disable synchronous version of this method
-    ::grpc::Status Store(::grpc::ServerContext* context, const flatbuffers::BufferRef<Monster>* request, flatbuffers::BufferRef<Stat>* response) GRPC_FINAL GRPC_OVERRIDE {
-      abort();
-      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
-    }
-  };
-  template <class BaseClass>
-  class WithGenericMethod_Retrieve : public BaseClass {
-   private:
-    void BaseClassMustBeDerivedFromService(const Service *service) {}
-   public:
-    WithGenericMethod_Retrieve() {
-      ::grpc::Service::MarkMethodGeneric(1);
-    }
-    ~WithGenericMethod_Retrieve() GRPC_OVERRIDE {
-      BaseClassMustBeDerivedFromService(this);
-    }
-    // disable synchronous version of this method
-    ::grpc::Status Retrieve(::grpc::ServerContext* context, const flatbuffers::BufferRef<Stat>* request, ::grpc::ServerWriter< flatbuffers::BufferRef<Monster>>* writer) GRPC_FINAL GRPC_OVERRIDE {
-      abort();
-      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
-    }
-  };
-};
-
-}  // namespace Example
-}  // namespace MyGame
-
-
-#endif  // GRPC_monster_5ftest__INCLUDED
diff --git a/third_party/flatbuffers/tests/monster_test_generated.js b/third_party/flatbuffers/tests/monster_test_generated.js
deleted file mode 100644
index 7b0165c..0000000
--- a/third_party/flatbuffers/tests/monster_test_generated.js
+++ /dev/null
@@ -1,1674 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-/**
- * @const
- * @namespace
- */
-var MyGame = MyGame || {};
-
-/**
- * @const
- * @namespace
- */
-MyGame.Example = MyGame.Example || {};
-
-/**
- * @const
- * @namespace
- */
-MyGame.Example2 = MyGame.Example2 || {};
-
-/**
- * @const
- * @namespace
- */
-MyGame.OtherNameSpace = MyGame.OtherNameSpace || {};
-
-/**
- * @enum
- */
-MyGame.Example.Color = {
-  Red: 1,
-  Green: 2,
-  Blue: 8
-};
-
-/**
- * @enum
- */
-MyGame.Example.Any = {
-  NONE: 0,
-  Monster: 1,
-  TestSimpleTableWithEnum: 2,
-  MyGame_Example2_Monster: 3
-};
-
-/**
- * @constructor
- */
-MyGame.Example2.Monster = function() {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  this.bb = null;
-
-  /**
-   * @type {number}
-   */
-  this.bb_pos = 0;
-};
-
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {MyGame.Example2.Monster}
- */
-MyGame.Example2.Monster.prototype.__init = function(i, bb) {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {MyGame.Example2.Monster=} obj
- * @returns {MyGame.Example2.Monster}
- */
-MyGame.Example2.Monster.getRootAsMonster = function(bb, obj) {
-  return (obj || new MyGame.Example2.Monster).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-MyGame.Example2.Monster.startMonster = function(builder) {
-  builder.startObject(0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-MyGame.Example2.Monster.endMonster = function(builder) {
-  var offset = builder.endObject();
-  return offset;
-};
-
-/**
- * @constructor
- */
-MyGame.Example.Test = function() {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  this.bb = null;
-
-  /**
-   * @type {number}
-   */
-  this.bb_pos = 0;
-};
-
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {MyGame.Example.Test}
- */
-MyGame.Example.Test.prototype.__init = function(i, bb) {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Test.prototype.a = function() {
-  return this.bb.readInt16(this.bb_pos);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Test.prototype.mutate_a = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 0);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt16(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Test.prototype.b = function() {
-  return this.bb.readInt8(this.bb_pos + 2);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Test.prototype.mutate_b = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 2);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt8(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} a
- * @param {number} b
- * @returns {flatbuffers.Offset}
- */
-MyGame.Example.Test.createTest = function(builder, a, b) {
-  builder.prep(2, 4);
-  builder.pad(1);
-  builder.writeInt8(b);
-  builder.writeInt16(a);
-  return builder.offset();
-};
-
-/**
- * @constructor
- */
-MyGame.Example.TestSimpleTableWithEnum = function() {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  this.bb = null;
-
-  /**
-   * @type {number}
-   */
-  this.bb_pos = 0;
-};
-
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {MyGame.Example.TestSimpleTableWithEnum}
- */
-MyGame.Example.TestSimpleTableWithEnum.prototype.__init = function(i, bb) {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {MyGame.Example.TestSimpleTableWithEnum=} obj
- * @returns {MyGame.Example.TestSimpleTableWithEnum}
- */
-MyGame.Example.TestSimpleTableWithEnum.getRootAsTestSimpleTableWithEnum = function(bb, obj) {
-  return (obj || new MyGame.Example.TestSimpleTableWithEnum).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @returns {MyGame.Example.Color}
- */
-MyGame.Example.TestSimpleTableWithEnum.prototype.color = function() {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-  return offset ? /** @type {MyGame.Example.Color} */ (this.bb.readInt8(this.bb_pos + offset)) : MyGame.Example.Color.Green;
-};
-
-/**
- * @param {MyGame.Example.Color} value
- * @returns {boolean}
- */
-MyGame.Example.TestSimpleTableWithEnum.prototype.mutate_color = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt8(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-MyGame.Example.TestSimpleTableWithEnum.startTestSimpleTableWithEnum = function(builder) {
-  builder.startObject(1);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {MyGame.Example.Color} color
- */
-MyGame.Example.TestSimpleTableWithEnum.addColor = function(builder, color) {
-  builder.addFieldInt8(0, color, MyGame.Example.Color.Green);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-MyGame.Example.TestSimpleTableWithEnum.endTestSimpleTableWithEnum = function(builder) {
-  var offset = builder.endObject();
-  return offset;
-};
-
-/**
- * @constructor
- */
-MyGame.Example.Vec3 = function() {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  this.bb = null;
-
-  /**
-   * @type {number}
-   */
-  this.bb_pos = 0;
-};
-
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {MyGame.Example.Vec3}
- */
-MyGame.Example.Vec3.prototype.__init = function(i, bb) {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Vec3.prototype.x = function() {
-  return this.bb.readFloat32(this.bb_pos);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Vec3.prototype.mutate_x = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 0);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeFloat32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Vec3.prototype.y = function() {
-  return this.bb.readFloat32(this.bb_pos + 4);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Vec3.prototype.mutate_y = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeFloat32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Vec3.prototype.z = function() {
-  return this.bb.readFloat32(this.bb_pos + 8);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Vec3.prototype.mutate_z = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 8);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeFloat32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Vec3.prototype.test1 = function() {
-  return this.bb.readFloat64(this.bb_pos + 16);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Vec3.prototype.mutate_test1 = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 16);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeFloat64(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {MyGame.Example.Color}
- */
-MyGame.Example.Vec3.prototype.test2 = function() {
-  return /** @type {MyGame.Example.Color} */ (this.bb.readInt8(this.bb_pos + 24));
-};
-
-/**
- * @param {MyGame.Example.Color} value
- * @returns {boolean}
- */
-MyGame.Example.Vec3.prototype.mutate_test2 = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 24);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt8(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {MyGame.Example.Test=} obj
- * @returns {MyGame.Example.Test}
- */
-MyGame.Example.Vec3.prototype.test3 = function(obj) {
-  return (obj || new MyGame.Example.Test).__init(this.bb_pos + 26, this.bb);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} x
- * @param {number} y
- * @param {number} z
- * @param {number} test1
- * @param {MyGame.Example.Color} test2
- * @param {number} test3_a
- * @param {number} test3_b
- * @returns {flatbuffers.Offset}
- */
-MyGame.Example.Vec3.createVec3 = function(builder, x, y, z, test1, test2, test3_a, test3_b) {
-  builder.prep(16, 32);
-  builder.pad(2);
-  builder.prep(2, 4);
-  builder.pad(1);
-  builder.writeInt8(test3_b);
-  builder.writeInt16(test3_a);
-  builder.pad(1);
-  builder.writeInt8(test2);
-  builder.writeFloat64(test1);
-  builder.pad(4);
-  builder.writeFloat32(z);
-  builder.writeFloat32(y);
-  builder.writeFloat32(x);
-  return builder.offset();
-};
-
-/**
- * @constructor
- */
-MyGame.Example.Ability = function() {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  this.bb = null;
-
-  /**
-   * @type {number}
-   */
-  this.bb_pos = 0;
-};
-
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {MyGame.Example.Ability}
- */
-MyGame.Example.Ability.prototype.__init = function(i, bb) {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Ability.prototype.id = function() {
-  return this.bb.readUint32(this.bb_pos);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Ability.prototype.mutate_id = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 0);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Ability.prototype.distance = function() {
-  return this.bb.readUint32(this.bb_pos + 4);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Ability.prototype.mutate_distance = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} id
- * @param {number} distance
- * @returns {flatbuffers.Offset}
- */
-MyGame.Example.Ability.createAbility = function(builder, id, distance) {
-  builder.prep(4, 8);
-  builder.writeInt32(distance);
-  builder.writeInt32(id);
-  return builder.offset();
-};
-
-/**
- * @constructor
- */
-MyGame.Example.Stat = function() {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  this.bb = null;
-
-  /**
-   * @type {number}
-   */
-  this.bb_pos = 0;
-};
-
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {MyGame.Example.Stat}
- */
-MyGame.Example.Stat.prototype.__init = function(i, bb) {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {MyGame.Example.Stat=} obj
- * @returns {MyGame.Example.Stat}
- */
-MyGame.Example.Stat.getRootAsStat = function(bb, obj) {
-  return (obj || new MyGame.Example.Stat).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @param {flatbuffers.Encoding=} optionalEncoding
- * @returns {string|Uint8Array}
- */
-MyGame.Example.Stat.prototype.id = function(optionalEncoding) {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-  return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;
-};
-
-/**
- * @returns {flatbuffers.Long}
- */
-MyGame.Example.Stat.prototype.val = function() {
-  var offset = this.bb.__offset(this.bb_pos, 6);
-  return offset ? this.bb.readInt64(this.bb_pos + offset) : this.bb.createLong(0, 0);
-};
-
-/**
- * @param {flatbuffers.Long} value
- * @returns {boolean}
- */
-MyGame.Example.Stat.prototype.mutate_val = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 6);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt64(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Stat.prototype.count = function() {
-  var offset = this.bb.__offset(this.bb_pos, 8);
-  return offset ? this.bb.readUint16(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Stat.prototype.mutate_count = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 8);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint16(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-MyGame.Example.Stat.startStat = function(builder) {
-  builder.startObject(3);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} idOffset
- */
-MyGame.Example.Stat.addId = function(builder, idOffset) {
-  builder.addFieldOffset(0, idOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Long} val
- */
-MyGame.Example.Stat.addVal = function(builder, val) {
-  builder.addFieldInt64(1, val, builder.createLong(0, 0));
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} count
- */
-MyGame.Example.Stat.addCount = function(builder, count) {
-  builder.addFieldInt16(2, count, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-MyGame.Example.Stat.endStat = function(builder) {
-  var offset = builder.endObject();
-  return offset;
-};
-
-/**
- * an example documentation comment: monster object
- *
- * @constructor
- */
-MyGame.Example.Monster = function() {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  this.bb = null;
-
-  /**
-   * @type {number}
-   */
-  this.bb_pos = 0;
-};
-
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {MyGame.Example.Monster}
- */
-MyGame.Example.Monster.prototype.__init = function(i, bb) {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {MyGame.Example.Monster=} obj
- * @returns {MyGame.Example.Monster}
- */
-MyGame.Example.Monster.getRootAsMonster = function(bb, obj) {
-  return (obj || new MyGame.Example.Monster).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {boolean}
- */
-MyGame.Example.Monster.bufferHasIdentifier = function(bb) {
-  return bb.__has_identifier('MONS');
-};
-
-/**
- * @param {MyGame.Example.Vec3=} obj
- * @returns {MyGame.Example.Vec3}
- */
-MyGame.Example.Monster.prototype.pos = function(obj) {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-  return offset ? (obj || new MyGame.Example.Vec3).__init(this.bb_pos + offset, this.bb) : null;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.mana = function() {
-  var offset = this.bb.__offset(this.bb_pos, 6);
-  return offset ? this.bb.readInt16(this.bb_pos + offset) : 150;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_mana = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 6);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt16(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.hp = function() {
-  var offset = this.bb.__offset(this.bb_pos, 8);
-  return offset ? this.bb.readInt16(this.bb_pos + offset) : 100;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_hp = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 8);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt16(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Encoding=} optionalEncoding
- * @returns {string|Uint8Array}
- */
-MyGame.Example.Monster.prototype.name = function(optionalEncoding) {
-  var offset = this.bb.__offset(this.bb_pos, 10);
-  return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;
-};
-
-/**
- * @param {number} index
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.inventory = function(index) {
-  var offset = this.bb.__offset(this.bb_pos, 14);
-  return offset ? this.bb.readUint8(this.bb.__vector(this.bb_pos + offset) + index) : 0;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.inventoryLength = function() {
-  var offset = this.bb.__offset(this.bb_pos, 14);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * @returns {Uint8Array}
- */
-MyGame.Example.Monster.prototype.inventoryArray = function() {
-  var offset = this.bb.__offset(this.bb_pos, 14);
-  return offset ? new Uint8Array(this.bb.bytes().buffer, this.bb.bytes().byteOffset + this.bb.__vector(this.bb_pos + offset), this.bb.__vector_len(this.bb_pos + offset)) : null;
-};
-
-/**
- * @returns {MyGame.Example.Color}
- */
-MyGame.Example.Monster.prototype.color = function() {
-  var offset = this.bb.__offset(this.bb_pos, 16);
-  return offset ? /** @type {MyGame.Example.Color} */ (this.bb.readInt8(this.bb_pos + offset)) : MyGame.Example.Color.Blue;
-};
-
-/**
- * @param {MyGame.Example.Color} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_color = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 16);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt8(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {MyGame.Example.Any}
- */
-MyGame.Example.Monster.prototype.testType = function() {
-  var offset = this.bb.__offset(this.bb_pos, 18);
-  return offset ? /** @type {MyGame.Example.Any} */ (this.bb.readUint8(this.bb_pos + offset)) : MyGame.Example.Any.NONE;
-};
-
-/**
- * @param {MyGame.Example.Any} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_test_type = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 18);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint8(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Table} obj
- * @returns {?flatbuffers.Table}
- */
-MyGame.Example.Monster.prototype.test = function(obj) {
-  var offset = this.bb.__offset(this.bb_pos, 20);
-  return offset ? this.bb.__union(obj, this.bb_pos + offset) : null;
-};
-
-/**
- * @param {number} index
- * @param {MyGame.Example.Test=} obj
- * @returns {MyGame.Example.Test}
- */
-MyGame.Example.Monster.prototype.test4 = function(index, obj) {
-  var offset = this.bb.__offset(this.bb_pos, 22);
-  return offset ? (obj || new MyGame.Example.Test).__init(this.bb.__vector(this.bb_pos + offset) + index * 4, this.bb) : null;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.test4Length = function() {
-  var offset = this.bb.__offset(this.bb_pos, 22);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} index
- * @param {flatbuffers.Encoding=} optionalEncoding
- * @returns {string|Uint8Array}
- */
-MyGame.Example.Monster.prototype.testarrayofstring = function(index, optionalEncoding) {
-  var offset = this.bb.__offset(this.bb_pos, 24);
-  return offset ? this.bb.__string(this.bb.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.testarrayofstringLength = function() {
-  var offset = this.bb.__offset(this.bb_pos, 24);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * an example documentation comment: this will end up in the generated code
- * multiline too
- *
- * @param {number} index
- * @param {MyGame.Example.Monster=} obj
- * @returns {MyGame.Example.Monster}
- */
-MyGame.Example.Monster.prototype.testarrayoftables = function(index, obj) {
-  var offset = this.bb.__offset(this.bb_pos, 26);
-  return offset ? (obj || new MyGame.Example.Monster).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.testarrayoftablesLength = function() {
-  var offset = this.bb.__offset(this.bb_pos, 26);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {MyGame.Example.Monster=} obj
- * @returns {MyGame.Example.Monster}
- */
-MyGame.Example.Monster.prototype.enemy = function(obj) {
-  var offset = this.bb.__offset(this.bb_pos, 28);
-  return offset ? (obj || new MyGame.Example.Monster).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;
-};
-
-/**
- * @param {number} index
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.testnestedflatbuffer = function(index) {
-  var offset = this.bb.__offset(this.bb_pos, 30);
-  return offset ? this.bb.readUint8(this.bb.__vector(this.bb_pos + offset) + index) : 0;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.testnestedflatbufferLength = function() {
-  var offset = this.bb.__offset(this.bb_pos, 30);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * @returns {Uint8Array}
- */
-MyGame.Example.Monster.prototype.testnestedflatbufferArray = function() {
-  var offset = this.bb.__offset(this.bb_pos, 30);
-  return offset ? new Uint8Array(this.bb.bytes().buffer, this.bb.bytes().byteOffset + this.bb.__vector(this.bb_pos + offset), this.bb.__vector_len(this.bb_pos + offset)) : null;
-};
-
-/**
- * @param {MyGame.Example.Stat=} obj
- * @returns {MyGame.Example.Stat}
- */
-MyGame.Example.Monster.prototype.testempty = function(obj) {
-  var offset = this.bb.__offset(this.bb_pos, 32);
-  return offset ? (obj || new MyGame.Example.Stat).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;
-};
-
-/**
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.testbool = function() {
-  var offset = this.bb.__offset(this.bb_pos, 34);
-  return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;
-};
-
-/**
- * @param {boolean} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_testbool = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 34);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt8(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.testhashs32Fnv1 = function() {
-  var offset = this.bb.__offset(this.bb_pos, 36);
-  return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_testhashs32_fnv1 = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 36);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.testhashu32Fnv1 = function() {
-  var offset = this.bb.__offset(this.bb_pos, 38);
-  return offset ? this.bb.readUint32(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_testhashu32_fnv1 = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 38);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {flatbuffers.Long}
- */
-MyGame.Example.Monster.prototype.testhashs64Fnv1 = function() {
-  var offset = this.bb.__offset(this.bb_pos, 40);
-  return offset ? this.bb.readInt64(this.bb_pos + offset) : this.bb.createLong(0, 0);
-};
-
-/**
- * @param {flatbuffers.Long} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_testhashs64_fnv1 = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 40);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt64(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {flatbuffers.Long}
- */
-MyGame.Example.Monster.prototype.testhashu64Fnv1 = function() {
-  var offset = this.bb.__offset(this.bb_pos, 42);
-  return offset ? this.bb.readUint64(this.bb_pos + offset) : this.bb.createLong(0, 0);
-};
-
-/**
- * @param {flatbuffers.Long} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_testhashu64_fnv1 = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 42);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint64(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.testhashs32Fnv1a = function() {
-  var offset = this.bb.__offset(this.bb_pos, 44);
-  return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_testhashs32_fnv1a = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 44);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.testhashu32Fnv1a = function() {
-  var offset = this.bb.__offset(this.bb_pos, 46);
-  return offset ? this.bb.readUint32(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_testhashu32_fnv1a = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 46);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {flatbuffers.Long}
- */
-MyGame.Example.Monster.prototype.testhashs64Fnv1a = function() {
-  var offset = this.bb.__offset(this.bb_pos, 48);
-  return offset ? this.bb.readInt64(this.bb_pos + offset) : this.bb.createLong(0, 0);
-};
-
-/**
- * @param {flatbuffers.Long} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_testhashs64_fnv1a = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 48);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt64(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {flatbuffers.Long}
- */
-MyGame.Example.Monster.prototype.testhashu64Fnv1a = function() {
-  var offset = this.bb.__offset(this.bb_pos, 50);
-  return offset ? this.bb.readUint64(this.bb_pos + offset) : this.bb.createLong(0, 0);
-};
-
-/**
- * @param {flatbuffers.Long} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_testhashu64_fnv1a = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 50);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint64(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {number} index
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.testarrayofbools = function(index) {
-  var offset = this.bb.__offset(this.bb_pos, 52);
-  return offset ? !!this.bb.readInt8(this.bb.__vector(this.bb_pos + offset) + index) : false;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.testarrayofboolsLength = function() {
-  var offset = this.bb.__offset(this.bb_pos, 52);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * @returns {Int8Array}
- */
-MyGame.Example.Monster.prototype.testarrayofboolsArray = function() {
-  var offset = this.bb.__offset(this.bb_pos, 52);
-  return offset ? new Int8Array(this.bb.bytes().buffer, this.bb.bytes().byteOffset + this.bb.__vector(this.bb_pos + offset), this.bb.__vector_len(this.bb_pos + offset)) : null;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.testf = function() {
-  var offset = this.bb.__offset(this.bb_pos, 54);
-  return offset ? this.bb.readFloat32(this.bb_pos + offset) : 3.14159;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_testf = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 54);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeFloat32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.testf2 = function() {
-  var offset = this.bb.__offset(this.bb_pos, 56);
-  return offset ? this.bb.readFloat32(this.bb_pos + offset) : 3.0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_testf2 = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 56);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeFloat32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.testf3 = function() {
-  var offset = this.bb.__offset(this.bb_pos, 58);
-  return offset ? this.bb.readFloat32(this.bb_pos + offset) : 0.0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-MyGame.Example.Monster.prototype.mutate_testf3 = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 58);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeFloat32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {number} index
- * @param {flatbuffers.Encoding=} optionalEncoding
- * @returns {string|Uint8Array}
- */
-MyGame.Example.Monster.prototype.testarrayofstring2 = function(index, optionalEncoding) {
-  var offset = this.bb.__offset(this.bb_pos, 60);
-  return offset ? this.bb.__string(this.bb.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.testarrayofstring2Length = function() {
-  var offset = this.bb.__offset(this.bb_pos, 60);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} index
- * @param {MyGame.Example.Ability=} obj
- * @returns {MyGame.Example.Ability}
- */
-MyGame.Example.Monster.prototype.testarrayofsortedstruct = function(index, obj) {
-  var offset = this.bb.__offset(this.bb_pos, 62);
-  return offset ? (obj || new MyGame.Example.Ability).__init(this.bb.__vector(this.bb_pos + offset) + index * 8, this.bb) : null;
-};
-
-/**
- * @returns {number}
- */
-MyGame.Example.Monster.prototype.testarrayofsortedstructLength = function() {
-  var offset = this.bb.__offset(this.bb_pos, 62);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-MyGame.Example.Monster.startMonster = function(builder) {
-  builder.startObject(30);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} posOffset
- */
-MyGame.Example.Monster.addPos = function(builder, posOffset) {
-  builder.addFieldStruct(0, posOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} mana
- */
-MyGame.Example.Monster.addMana = function(builder, mana) {
-  builder.addFieldInt16(1, mana, 150);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} hp
- */
-MyGame.Example.Monster.addHp = function(builder, hp) {
-  builder.addFieldInt16(2, hp, 100);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} nameOffset
- */
-MyGame.Example.Monster.addName = function(builder, nameOffset) {
-  builder.addFieldOffset(3, nameOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} inventoryOffset
- */
-MyGame.Example.Monster.addInventory = function(builder, inventoryOffset) {
-  builder.addFieldOffset(5, inventoryOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {Array.<number>} data
- * @returns {flatbuffers.Offset}
- */
-MyGame.Example.Monster.createInventoryVector = function(builder, data) {
-  builder.startVector(1, data.length, 1);
-  for (var i = data.length - 1; i >= 0; i--) {
-    builder.addInt8(data[i]);
-  }
-  return builder.endVector();
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-MyGame.Example.Monster.startInventoryVector = function(builder, numElems) {
-  builder.startVector(1, numElems, 1);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {MyGame.Example.Color} color
- */
-MyGame.Example.Monster.addColor = function(builder, color) {
-  builder.addFieldInt8(6, color, MyGame.Example.Color.Blue);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {MyGame.Example.Any} testType
- */
-MyGame.Example.Monster.addTestType = function(builder, testType) {
-  builder.addFieldInt8(7, testType, MyGame.Example.Any.NONE);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testOffset
- */
-MyGame.Example.Monster.addTest = function(builder, testOffset) {
-  builder.addFieldOffset(8, testOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} test4Offset
- */
-MyGame.Example.Monster.addTest4 = function(builder, test4Offset) {
-  builder.addFieldOffset(9, test4Offset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-MyGame.Example.Monster.startTest4Vector = function(builder, numElems) {
-  builder.startVector(4, numElems, 2);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testarrayofstringOffset
- */
-MyGame.Example.Monster.addTestarrayofstring = function(builder, testarrayofstringOffset) {
-  builder.addFieldOffset(10, testarrayofstringOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {Array.<flatbuffers.Offset>} data
- * @returns {flatbuffers.Offset}
- */
-MyGame.Example.Monster.createTestarrayofstringVector = function(builder, data) {
-  builder.startVector(4, data.length, 4);
-  for (var i = data.length - 1; i >= 0; i--) {
-    builder.addOffset(data[i]);
-  }
-  return builder.endVector();
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-MyGame.Example.Monster.startTestarrayofstringVector = function(builder, numElems) {
-  builder.startVector(4, numElems, 4);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testarrayoftablesOffset
- */
-MyGame.Example.Monster.addTestarrayoftables = function(builder, testarrayoftablesOffset) {
-  builder.addFieldOffset(11, testarrayoftablesOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {Array.<flatbuffers.Offset>} data
- * @returns {flatbuffers.Offset}
- */
-MyGame.Example.Monster.createTestarrayoftablesVector = function(builder, data) {
-  builder.startVector(4, data.length, 4);
-  for (var i = data.length - 1; i >= 0; i--) {
-    builder.addOffset(data[i]);
-  }
-  return builder.endVector();
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-MyGame.Example.Monster.startTestarrayoftablesVector = function(builder, numElems) {
-  builder.startVector(4, numElems, 4);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} enemyOffset
- */
-MyGame.Example.Monster.addEnemy = function(builder, enemyOffset) {
-  builder.addFieldOffset(12, enemyOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testnestedflatbufferOffset
- */
-MyGame.Example.Monster.addTestnestedflatbuffer = function(builder, testnestedflatbufferOffset) {
-  builder.addFieldOffset(13, testnestedflatbufferOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {Array.<number>} data
- * @returns {flatbuffers.Offset}
- */
-MyGame.Example.Monster.createTestnestedflatbufferVector = function(builder, data) {
-  builder.startVector(1, data.length, 1);
-  for (var i = data.length - 1; i >= 0; i--) {
-    builder.addInt8(data[i]);
-  }
-  return builder.endVector();
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-MyGame.Example.Monster.startTestnestedflatbufferVector = function(builder, numElems) {
-  builder.startVector(1, numElems, 1);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testemptyOffset
- */
-MyGame.Example.Monster.addTestempty = function(builder, testemptyOffset) {
-  builder.addFieldOffset(14, testemptyOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {boolean} testbool
- */
-MyGame.Example.Monster.addTestbool = function(builder, testbool) {
-  builder.addFieldInt8(15, +testbool, +false);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} testhashs32Fnv1
- */
-MyGame.Example.Monster.addTesthashs32Fnv1 = function(builder, testhashs32Fnv1) {
-  builder.addFieldInt32(16, testhashs32Fnv1, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} testhashu32Fnv1
- */
-MyGame.Example.Monster.addTesthashu32Fnv1 = function(builder, testhashu32Fnv1) {
-  builder.addFieldInt32(17, testhashu32Fnv1, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Long} testhashs64Fnv1
- */
-MyGame.Example.Monster.addTesthashs64Fnv1 = function(builder, testhashs64Fnv1) {
-  builder.addFieldInt64(18, testhashs64Fnv1, builder.createLong(0, 0));
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Long} testhashu64Fnv1
- */
-MyGame.Example.Monster.addTesthashu64Fnv1 = function(builder, testhashu64Fnv1) {
-  builder.addFieldInt64(19, testhashu64Fnv1, builder.createLong(0, 0));
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} testhashs32Fnv1a
- */
-MyGame.Example.Monster.addTesthashs32Fnv1a = function(builder, testhashs32Fnv1a) {
-  builder.addFieldInt32(20, testhashs32Fnv1a, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} testhashu32Fnv1a
- */
-MyGame.Example.Monster.addTesthashu32Fnv1a = function(builder, testhashu32Fnv1a) {
-  builder.addFieldInt32(21, testhashu32Fnv1a, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Long} testhashs64Fnv1a
- */
-MyGame.Example.Monster.addTesthashs64Fnv1a = function(builder, testhashs64Fnv1a) {
-  builder.addFieldInt64(22, testhashs64Fnv1a, builder.createLong(0, 0));
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Long} testhashu64Fnv1a
- */
-MyGame.Example.Monster.addTesthashu64Fnv1a = function(builder, testhashu64Fnv1a) {
-  builder.addFieldInt64(23, testhashu64Fnv1a, builder.createLong(0, 0));
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testarrayofboolsOffset
- */
-MyGame.Example.Monster.addTestarrayofbools = function(builder, testarrayofboolsOffset) {
-  builder.addFieldOffset(24, testarrayofboolsOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {Array.<boolean>} data
- * @returns {flatbuffers.Offset}
- */
-MyGame.Example.Monster.createTestarrayofboolsVector = function(builder, data) {
-  builder.startVector(1, data.length, 1);
-  for (var i = data.length - 1; i >= 0; i--) {
-    builder.addInt8(+data[i]);
-  }
-  return builder.endVector();
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-MyGame.Example.Monster.startTestarrayofboolsVector = function(builder, numElems) {
-  builder.startVector(1, numElems, 1);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} testf
- */
-MyGame.Example.Monster.addTestf = function(builder, testf) {
-  builder.addFieldFloat32(25, testf, 3.14159);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} testf2
- */
-MyGame.Example.Monster.addTestf2 = function(builder, testf2) {
-  builder.addFieldFloat32(26, testf2, 3.0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} testf3
- */
-MyGame.Example.Monster.addTestf3 = function(builder, testf3) {
-  builder.addFieldFloat32(27, testf3, 0.0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testarrayofstring2Offset
- */
-MyGame.Example.Monster.addTestarrayofstring2 = function(builder, testarrayofstring2Offset) {
-  builder.addFieldOffset(28, testarrayofstring2Offset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {Array.<flatbuffers.Offset>} data
- * @returns {flatbuffers.Offset}
- */
-MyGame.Example.Monster.createTestarrayofstring2Vector = function(builder, data) {
-  builder.startVector(4, data.length, 4);
-  for (var i = data.length - 1; i >= 0; i--) {
-    builder.addOffset(data[i]);
-  }
-  return builder.endVector();
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-MyGame.Example.Monster.startTestarrayofstring2Vector = function(builder, numElems) {
-  builder.startVector(4, numElems, 4);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testarrayofsortedstructOffset
- */
-MyGame.Example.Monster.addTestarrayofsortedstruct = function(builder, testarrayofsortedstructOffset) {
-  builder.addFieldOffset(29, testarrayofsortedstructOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-MyGame.Example.Monster.startTestarrayofsortedstructVector = function(builder, numElems) {
-  builder.startVector(8, numElems, 4);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-MyGame.Example.Monster.endMonster = function(builder) {
-  var offset = builder.endObject();
-  builder.requiredField(offset, 10); // name
-  return offset;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} offset
- */
-MyGame.Example.Monster.finishMonsterBuffer = function(builder, offset) {
-  builder.finish(offset, 'MONS');
-};
-
-// Exports for Node.js and RequireJS
-this.MyGame = MyGame;
diff --git a/third_party/flatbuffers/tests/monster_test_generated.ts b/third_party/flatbuffers/tests/monster_test_generated.ts
deleted file mode 100644
index 3ff1bf9..0000000
--- a/third_party/flatbuffers/tests/monster_test_generated.ts
+++ /dev/null
@@ -1,1683 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-/**
- * @enum
- */
-export namespace MyGame.Example{
-export enum Color{
-  Red= 1,
-  Green= 2,
-  Blue= 8
-}};
-
-/**
- * @enum
- */
-export namespace MyGame.Example{
-export enum Any{
-  NONE= 0,
-  Monster= 1,
-  TestSimpleTableWithEnum= 2,
-  MyGame_Example2_Monster= 3
-}};
-
-/**
- * @constructor
- */
-export namespace MyGame.Example2{
-export class Monster {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  bb: flatbuffers.ByteBuffer= null;
-
-  /**
-   * @type {number}
-   */
-  bb_pos:number = 0;
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {Monster}
- */
-__init(i:number, bb:flatbuffers.ByteBuffer):Monster {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {Monster=} obj
- * @returns {Monster}
- */
-static getRootAsMonster(bb:flatbuffers.ByteBuffer, obj?:Monster):Monster {
-  return (obj || new Monster).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-static startMonster(builder:flatbuffers.Builder) {
-  builder.startObject(0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-static endMonster(builder:flatbuffers.Builder):flatbuffers.Offset {
-  var offset = builder.endObject();
-  return offset;
-};
-
-}
-}
-/**
- * @constructor
- */
-export namespace MyGame.Example{
-export class Test {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  bb: flatbuffers.ByteBuffer= null;
-
-  /**
-   * @type {number}
-   */
-  bb_pos:number = 0;
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {Test}
- */
-__init(i:number, bb:flatbuffers.ByteBuffer):Test {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @returns {number}
- */
-a():number {
-  return this.bb.readInt16(this.bb_pos);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_a(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 0);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt16(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-b():number {
-  return this.bb.readInt8(this.bb_pos + 2);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_b(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 2);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt8(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} a
- * @param {number} b
- * @returns {flatbuffers.Offset}
- */
-static createTest(builder:flatbuffers.Builder, a: number, b: number):flatbuffers.Offset {
-  builder.prep(2, 4);
-  builder.pad(1);
-  builder.writeInt8(b);
-  builder.writeInt16(a);
-  return builder.offset();
-};
-
-}
-}
-/**
- * @constructor
- */
-export namespace MyGame.Example{
-export class TestSimpleTableWithEnum {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  bb: flatbuffers.ByteBuffer= null;
-
-  /**
-   * @type {number}
-   */
-  bb_pos:number = 0;
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {TestSimpleTableWithEnum}
- */
-__init(i:number, bb:flatbuffers.ByteBuffer):TestSimpleTableWithEnum {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {TestSimpleTableWithEnum=} obj
- * @returns {TestSimpleTableWithEnum}
- */
-static getRootAsTestSimpleTableWithEnum(bb:flatbuffers.ByteBuffer, obj?:TestSimpleTableWithEnum):TestSimpleTableWithEnum {
-  return (obj || new TestSimpleTableWithEnum).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @returns {MyGame.Example.Color}
- */
-color():MyGame.Example.Color {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-  return offset ? /** @type {MyGame.Example.Color} */ (this.bb.readInt8(this.bb_pos + offset)) : MyGame.Example.Color.Green;
-};
-
-/**
- * @param {MyGame.Example.Color} value
- * @returns {boolean}
- */
-mutate_color(value:MyGame.Example.Color):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt8(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-static startTestSimpleTableWithEnum(builder:flatbuffers.Builder) {
-  builder.startObject(1);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {MyGame.Example.Color} color
- */
-static addColor(builder:flatbuffers.Builder, color:MyGame.Example.Color) {
-  builder.addFieldInt8(0, color, MyGame.Example.Color.Green);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-static endTestSimpleTableWithEnum(builder:flatbuffers.Builder):flatbuffers.Offset {
-  var offset = builder.endObject();
-  return offset;
-};
-
-}
-}
-/**
- * @constructor
- */
-export namespace MyGame.Example{
-export class Vec3 {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  bb: flatbuffers.ByteBuffer= null;
-
-  /**
-   * @type {number}
-   */
-  bb_pos:number = 0;
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {Vec3}
- */
-__init(i:number, bb:flatbuffers.ByteBuffer):Vec3 {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @returns {number}
- */
-x():number {
-  return this.bb.readFloat32(this.bb_pos);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_x(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 0);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeFloat32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-y():number {
-  return this.bb.readFloat32(this.bb_pos + 4);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_y(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeFloat32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-z():number {
-  return this.bb.readFloat32(this.bb_pos + 8);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_z(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 8);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeFloat32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-test1():number {
-  return this.bb.readFloat64(this.bb_pos + 16);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_test1(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 16);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeFloat64(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {MyGame.Example.Color}
- */
-test2():MyGame.Example.Color {
-  return /** @type {MyGame.Example.Color} */ (this.bb.readInt8(this.bb_pos + 24));
-};
-
-/**
- * @param {MyGame.Example.Color} value
- * @returns {boolean}
- */
-mutate_test2(value:MyGame.Example.Color):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 24);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt8(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {MyGame.Example.Test=} obj
- * @returns {MyGame.Example.Test}
- */
-test3(obj?:MyGame.Example.Test):MyGame.Example.Test {
-  return (obj || new MyGame.Example.Test).__init(this.bb_pos + 26, this.bb);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} x
- * @param {number} y
- * @param {number} z
- * @param {number} test1
- * @param {MyGame.Example.Color} test2
- * @param {number} test3_a
- * @param {number} test3_b
- * @returns {flatbuffers.Offset}
- */
-static createVec3(builder:flatbuffers.Builder, x: number, y: number, z: number, test1: number, test2: MyGame.Example.Color, test3_a: number, test3_b: number):flatbuffers.Offset {
-  builder.prep(16, 32);
-  builder.pad(2);
-  builder.prep(2, 4);
-  builder.pad(1);
-  builder.writeInt8(test3_b);
-  builder.writeInt16(test3_a);
-  builder.pad(1);
-  builder.writeInt8(test2);
-  builder.writeFloat64(test1);
-  builder.pad(4);
-  builder.writeFloat32(z);
-  builder.writeFloat32(y);
-  builder.writeFloat32(x);
-  return builder.offset();
-};
-
-}
-}
-/**
- * @constructor
- */
-export namespace MyGame.Example{
-export class Ability {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  bb: flatbuffers.ByteBuffer= null;
-
-  /**
-   * @type {number}
-   */
-  bb_pos:number = 0;
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {Ability}
- */
-__init(i:number, bb:flatbuffers.ByteBuffer):Ability {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @returns {number}
- */
-id():number {
-  return this.bb.readUint32(this.bb_pos);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_id(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 0);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-distance():number {
-  return this.bb.readUint32(this.bb_pos + 4);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_distance(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} id
- * @param {number} distance
- * @returns {flatbuffers.Offset}
- */
-static createAbility(builder:flatbuffers.Builder, id: number, distance: number):flatbuffers.Offset {
-  builder.prep(4, 8);
-  builder.writeInt32(distance);
-  builder.writeInt32(id);
-  return builder.offset();
-};
-
-}
-}
-/**
- * @constructor
- */
-export namespace MyGame.Example{
-export class Stat {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  bb: flatbuffers.ByteBuffer= null;
-
-  /**
-   * @type {number}
-   */
-  bb_pos:number = 0;
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {Stat}
- */
-__init(i:number, bb:flatbuffers.ByteBuffer):Stat {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {Stat=} obj
- * @returns {Stat}
- */
-static getRootAsStat(bb:flatbuffers.ByteBuffer, obj?:Stat):Stat {
-  return (obj || new Stat).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @param {flatbuffers.Encoding=} optionalEncoding
- * @returns {string|Uint8Array}
- */
-id():string
-id(optionalEncoding:flatbuffers.Encoding):string|Uint8Array
-id(optionalEncoding?:any):string|Uint8Array {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-  return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;
-};
-
-/**
- * @returns {flatbuffers.Long}
- */
-val():flatbuffers.Long {
-  var offset = this.bb.__offset(this.bb_pos, 6);
-  return offset ? this.bb.readInt64(this.bb_pos + offset) : this.bb.createLong(0, 0);
-};
-
-/**
- * @param {flatbuffers.Long} value
- * @returns {boolean}
- */
-mutate_val(value:flatbuffers.Long):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 6);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt64(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-count():number {
-  var offset = this.bb.__offset(this.bb_pos, 8);
-  return offset ? this.bb.readUint16(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_count(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 8);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint16(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-static startStat(builder:flatbuffers.Builder) {
-  builder.startObject(3);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} idOffset
- */
-static addId(builder:flatbuffers.Builder, idOffset:flatbuffers.Offset) {
-  builder.addFieldOffset(0, idOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Long} val
- */
-static addVal(builder:flatbuffers.Builder, val:flatbuffers.Long) {
-  builder.addFieldInt64(1, val, builder.createLong(0, 0));
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} count
- */
-static addCount(builder:flatbuffers.Builder, count:number) {
-  builder.addFieldInt16(2, count, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-static endStat(builder:flatbuffers.Builder):flatbuffers.Offset {
-  var offset = builder.endObject();
-  return offset;
-};
-
-}
-}
-/**
- * an example documentation comment: monster object
- *
- * @constructor
- */
-export namespace MyGame.Example{
-export class Monster {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  bb: flatbuffers.ByteBuffer= null;
-
-  /**
-   * @type {number}
-   */
-  bb_pos:number = 0;
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {Monster}
- */
-__init(i:number, bb:flatbuffers.ByteBuffer):Monster {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {Monster=} obj
- * @returns {Monster}
- */
-static getRootAsMonster(bb:flatbuffers.ByteBuffer, obj?:Monster):Monster {
-  return (obj || new Monster).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {boolean}
- */
-static bufferHasIdentifier(bb:flatbuffers.ByteBuffer):boolean {
-  return bb.__has_identifier('MONS');
-};
-
-/**
- * @param {MyGame.Example.Vec3=} obj
- * @returns {MyGame.Example.Vec3}
- */
-pos(obj?:MyGame.Example.Vec3):MyGame.Example.Vec3 {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-  return offset ? (obj || new MyGame.Example.Vec3).__init(this.bb_pos + offset, this.bb) : null;
-};
-
-/**
- * @returns {number}
- */
-mana():number {
-  var offset = this.bb.__offset(this.bb_pos, 6);
-  return offset ? this.bb.readInt16(this.bb_pos + offset) : 150;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_mana(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 6);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt16(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-hp():number {
-  var offset = this.bb.__offset(this.bb_pos, 8);
-  return offset ? this.bb.readInt16(this.bb_pos + offset) : 100;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_hp(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 8);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt16(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Encoding=} optionalEncoding
- * @returns {string|Uint8Array}
- */
-name():string
-name(optionalEncoding:flatbuffers.Encoding):string|Uint8Array
-name(optionalEncoding?:any):string|Uint8Array {
-  var offset = this.bb.__offset(this.bb_pos, 10);
-  return offset ? this.bb.__string(this.bb_pos + offset, optionalEncoding) : null;
-};
-
-/**
- * @param {number} index
- * @returns {number}
- */
-inventory(index: number):number {
-  var offset = this.bb.__offset(this.bb_pos, 14);
-  return offset ? this.bb.readUint8(this.bb.__vector(this.bb_pos + offset) + index) : 0;
-};
-
-/**
- * @returns {number}
- */
-inventoryLength():number {
-  var offset = this.bb.__offset(this.bb_pos, 14);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * @returns {Uint8Array}
- */
-inventoryArray():Uint8Array {
-  var offset = this.bb.__offset(this.bb_pos, 14);
-  return offset ? new Uint8Array(this.bb.bytes().buffer, this.bb.bytes().byteOffset + this.bb.__vector(this.bb_pos + offset), this.bb.__vector_len(this.bb_pos + offset)) : null;
-};
-
-/**
- * @returns {MyGame.Example.Color}
- */
-color():MyGame.Example.Color {
-  var offset = this.bb.__offset(this.bb_pos, 16);
-  return offset ? /** @type {MyGame.Example.Color} */ (this.bb.readInt8(this.bb_pos + offset)) : MyGame.Example.Color.Blue;
-};
-
-/**
- * @param {MyGame.Example.Color} value
- * @returns {boolean}
- */
-mutate_color(value:MyGame.Example.Color):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 16);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt8(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {MyGame.Example.Any}
- */
-testType():MyGame.Example.Any {
-  var offset = this.bb.__offset(this.bb_pos, 18);
-  return offset ? /** @type {MyGame.Example.Any} */ (this.bb.readUint8(this.bb_pos + offset)) : MyGame.Example.Any.NONE;
-};
-
-/**
- * @param {MyGame.Example.Any} value
- * @returns {boolean}
- */
-mutate_test_type(value:MyGame.Example.Any):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 18);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint8(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Table} obj
- * @returns {?flatbuffers.Table}
- */
-test<T extends flatbuffers.Table>(obj:T):T {
-  var offset = this.bb.__offset(this.bb_pos, 20);
-  return offset ? this.bb.__union(obj, this.bb_pos + offset) : null;
-};
-
-/**
- * @param {number} index
- * @param {MyGame.Example.Test=} obj
- * @returns {MyGame.Example.Test}
- */
-test4(index: number, obj?:MyGame.Example.Test):MyGame.Example.Test {
-  var offset = this.bb.__offset(this.bb_pos, 22);
-  return offset ? (obj || new MyGame.Example.Test).__init(this.bb.__vector(this.bb_pos + offset) + index * 4, this.bb) : null;
-};
-
-/**
- * @returns {number}
- */
-test4Length():number {
-  var offset = this.bb.__offset(this.bb_pos, 22);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} index
- * @param {flatbuffers.Encoding=} optionalEncoding
- * @returns {string|Uint8Array}
- */
-testarrayofstring(index: number):string
-testarrayofstring(index: number,optionalEncoding:flatbuffers.Encoding):string|Uint8Array
-testarrayofstring(index: number,optionalEncoding?:any):string|Uint8Array {
-  var offset = this.bb.__offset(this.bb_pos, 24);
-  return offset ? this.bb.__string(this.bb.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;
-};
-
-/**
- * @returns {number}
- */
-testarrayofstringLength():number {
-  var offset = this.bb.__offset(this.bb_pos, 24);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * an example documentation comment: this will end up in the generated code
- * multiline too
- *
- * @param {number} index
- * @param {MyGame.Example.Monster=} obj
- * @returns {MyGame.Example.Monster}
- */
-testarrayoftables(index: number, obj?:MyGame.Example.Monster):MyGame.Example.Monster {
-  var offset = this.bb.__offset(this.bb_pos, 26);
-  return offset ? (obj || new MyGame.Example.Monster).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null;
-};
-
-/**
- * @returns {number}
- */
-testarrayoftablesLength():number {
-  var offset = this.bb.__offset(this.bb_pos, 26);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {MyGame.Example.Monster=} obj
- * @returns {MyGame.Example.Monster}
- */
-enemy(obj?:MyGame.Example.Monster):MyGame.Example.Monster {
-  var offset = this.bb.__offset(this.bb_pos, 28);
-  return offset ? (obj || new MyGame.Example.Monster).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;
-};
-
-/**
- * @param {number} index
- * @returns {number}
- */
-testnestedflatbuffer(index: number):number {
-  var offset = this.bb.__offset(this.bb_pos, 30);
-  return offset ? this.bb.readUint8(this.bb.__vector(this.bb_pos + offset) + index) : 0;
-};
-
-/**
- * @returns {number}
- */
-testnestedflatbufferLength():number {
-  var offset = this.bb.__offset(this.bb_pos, 30);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * @returns {Uint8Array}
- */
-testnestedflatbufferArray():Uint8Array {
-  var offset = this.bb.__offset(this.bb_pos, 30);
-  return offset ? new Uint8Array(this.bb.bytes().buffer, this.bb.bytes().byteOffset + this.bb.__vector(this.bb_pos + offset), this.bb.__vector_len(this.bb_pos + offset)) : null;
-};
-
-/**
- * @param {MyGame.Example.Stat=} obj
- * @returns {MyGame.Example.Stat}
- */
-testempty(obj?:MyGame.Example.Stat):MyGame.Example.Stat {
-  var offset = this.bb.__offset(this.bb_pos, 32);
-  return offset ? (obj || new MyGame.Example.Stat).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;
-};
-
-/**
- * @returns {boolean}
- */
-testbool():boolean {
-  var offset = this.bb.__offset(this.bb_pos, 34);
-  return offset ? !!this.bb.readInt8(this.bb_pos + offset) : false;
-};
-
-/**
- * @param {boolean} value
- * @returns {boolean}
- */
-mutate_testbool(value:boolean):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 34);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt8(this.bb_pos + offset, +value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-testhashs32Fnv1():number {
-  var offset = this.bb.__offset(this.bb_pos, 36);
-  return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_testhashs32_fnv1(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 36);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-testhashu32Fnv1():number {
-  var offset = this.bb.__offset(this.bb_pos, 38);
-  return offset ? this.bb.readUint32(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_testhashu32_fnv1(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 38);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {flatbuffers.Long}
- */
-testhashs64Fnv1():flatbuffers.Long {
-  var offset = this.bb.__offset(this.bb_pos, 40);
-  return offset ? this.bb.readInt64(this.bb_pos + offset) : this.bb.createLong(0, 0);
-};
-
-/**
- * @param {flatbuffers.Long} value
- * @returns {boolean}
- */
-mutate_testhashs64_fnv1(value:flatbuffers.Long):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 40);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt64(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {flatbuffers.Long}
- */
-testhashu64Fnv1():flatbuffers.Long {
-  var offset = this.bb.__offset(this.bb_pos, 42);
-  return offset ? this.bb.readUint64(this.bb_pos + offset) : this.bb.createLong(0, 0);
-};
-
-/**
- * @param {flatbuffers.Long} value
- * @returns {boolean}
- */
-mutate_testhashu64_fnv1(value:flatbuffers.Long):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 42);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint64(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-testhashs32Fnv1a():number {
-  var offset = this.bb.__offset(this.bb_pos, 44);
-  return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_testhashs32_fnv1a(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 44);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-testhashu32Fnv1a():number {
-  var offset = this.bb.__offset(this.bb_pos, 46);
-  return offset ? this.bb.readUint32(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_testhashu32_fnv1a(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 46);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {flatbuffers.Long}
- */
-testhashs64Fnv1a():flatbuffers.Long {
-  var offset = this.bb.__offset(this.bb_pos, 48);
-  return offset ? this.bb.readInt64(this.bb_pos + offset) : this.bb.createLong(0, 0);
-};
-
-/**
- * @param {flatbuffers.Long} value
- * @returns {boolean}
- */
-mutate_testhashs64_fnv1a(value:flatbuffers.Long):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 48);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt64(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {flatbuffers.Long}
- */
-testhashu64Fnv1a():flatbuffers.Long {
-  var offset = this.bb.__offset(this.bb_pos, 50);
-  return offset ? this.bb.readUint64(this.bb_pos + offset) : this.bb.createLong(0, 0);
-};
-
-/**
- * @param {flatbuffers.Long} value
- * @returns {boolean}
- */
-mutate_testhashu64_fnv1a(value:flatbuffers.Long):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 50);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeUint64(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {number} index
- * @returns {boolean}
- */
-testarrayofbools(index: number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 52);
-  return offset ? !!this.bb.readInt8(this.bb.__vector(this.bb_pos + offset) + index) : false;
-};
-
-/**
- * @returns {number}
- */
-testarrayofboolsLength():number {
-  var offset = this.bb.__offset(this.bb_pos, 52);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * @returns {Int8Array}
- */
-testarrayofboolsArray():Int8Array {
-  var offset = this.bb.__offset(this.bb_pos, 52);
-  return offset ? new Int8Array(this.bb.bytes().buffer, this.bb.bytes().byteOffset + this.bb.__vector(this.bb_pos + offset), this.bb.__vector_len(this.bb_pos + offset)) : null;
-};
-
-/**
- * @returns {number}
- */
-testf():number {
-  var offset = this.bb.__offset(this.bb_pos, 54);
-  return offset ? this.bb.readFloat32(this.bb_pos + offset) : 3.14159;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_testf(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 54);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeFloat32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-testf2():number {
-  var offset = this.bb.__offset(this.bb_pos, 56);
-  return offset ? this.bb.readFloat32(this.bb_pos + offset) : 3.0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_testf2(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 56);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeFloat32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-testf3():number {
-  var offset = this.bb.__offset(this.bb_pos, 58);
-  return offset ? this.bb.readFloat32(this.bb_pos + offset) : 0.0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_testf3(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 58);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeFloat32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {number} index
- * @param {flatbuffers.Encoding=} optionalEncoding
- * @returns {string|Uint8Array}
- */
-testarrayofstring2(index: number):string
-testarrayofstring2(index: number,optionalEncoding:flatbuffers.Encoding):string|Uint8Array
-testarrayofstring2(index: number,optionalEncoding?:any):string|Uint8Array {
-  var offset = this.bb.__offset(this.bb_pos, 60);
-  return offset ? this.bb.__string(this.bb.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;
-};
-
-/**
- * @returns {number}
- */
-testarrayofstring2Length():number {
-  var offset = this.bb.__offset(this.bb_pos, 60);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} index
- * @param {MyGame.Example.Ability=} obj
- * @returns {MyGame.Example.Ability}
- */
-testarrayofsortedstruct(index: number, obj?:MyGame.Example.Ability):MyGame.Example.Ability {
-  var offset = this.bb.__offset(this.bb_pos, 62);
-  return offset ? (obj || new MyGame.Example.Ability).__init(this.bb.__vector(this.bb_pos + offset) + index * 8, this.bb) : null;
-};
-
-/**
- * @returns {number}
- */
-testarrayofsortedstructLength():number {
-  var offset = this.bb.__offset(this.bb_pos, 62);
-  return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-static startMonster(builder:flatbuffers.Builder) {
-  builder.startObject(30);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} posOffset
- */
-static addPos(builder:flatbuffers.Builder, posOffset:flatbuffers.Offset) {
-  builder.addFieldStruct(0, posOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} mana
- */
-static addMana(builder:flatbuffers.Builder, mana:number) {
-  builder.addFieldInt16(1, mana, 150);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} hp
- */
-static addHp(builder:flatbuffers.Builder, hp:number) {
-  builder.addFieldInt16(2, hp, 100);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} nameOffset
- */
-static addName(builder:flatbuffers.Builder, nameOffset:flatbuffers.Offset) {
-  builder.addFieldOffset(3, nameOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} inventoryOffset
- */
-static addInventory(builder:flatbuffers.Builder, inventoryOffset:flatbuffers.Offset) {
-  builder.addFieldOffset(5, inventoryOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {Array.<number>} data
- * @returns {flatbuffers.Offset}
- */
-static createInventoryVector(builder:flatbuffers.Builder, data:number[] | Uint8Array):flatbuffers.Offset {
-if(!data){
-  return null
-}
-  builder.startVector(1, data.length, 1);
-  for (var i = data.length - 1; i >= 0; i--) {
-    builder.addInt8(data[i]);
-  }
-  return builder.endVector();
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-static startInventoryVector(builder:flatbuffers.Builder, numElems:number) {
-  builder.startVector(1, numElems, 1);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {MyGame.Example.Color} color
- */
-static addColor(builder:flatbuffers.Builder, color:MyGame.Example.Color) {
-  builder.addFieldInt8(6, color, MyGame.Example.Color.Blue);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {MyGame.Example.Any} testType
- */
-static addTestType(builder:flatbuffers.Builder, testType:MyGame.Example.Any) {
-  builder.addFieldInt8(7, testType, MyGame.Example.Any.NONE);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testOffset
- */
-static addTest(builder:flatbuffers.Builder, testOffset:flatbuffers.Offset) {
-  builder.addFieldOffset(8, testOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} test4Offset
- */
-static addTest4(builder:flatbuffers.Builder, test4Offset:flatbuffers.Offset) {
-  builder.addFieldOffset(9, test4Offset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-static startTest4Vector(builder:flatbuffers.Builder, numElems:number) {
-  builder.startVector(4, numElems, 2);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testarrayofstringOffset
- */
-static addTestarrayofstring(builder:flatbuffers.Builder, testarrayofstringOffset:flatbuffers.Offset) {
-  builder.addFieldOffset(10, testarrayofstringOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {Array.<flatbuffers.Offset>} data
- * @returns {flatbuffers.Offset}
- */
-static createTestarrayofstringVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {
-if(!data){
-  return null
-}
-  builder.startVector(4, data.length, 4);
-  for (var i = data.length - 1; i >= 0; i--) {
-    builder.addOffset(data[i]);
-  }
-  return builder.endVector();
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-static startTestarrayofstringVector(builder:flatbuffers.Builder, numElems:number) {
-  builder.startVector(4, numElems, 4);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testarrayoftablesOffset
- */
-static addTestarrayoftables(builder:flatbuffers.Builder, testarrayoftablesOffset:flatbuffers.Offset) {
-  builder.addFieldOffset(11, testarrayoftablesOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {Array.<flatbuffers.Offset>} data
- * @returns {flatbuffers.Offset}
- */
-static createTestarrayoftablesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {
-if(!data){
-  return null
-}
-  builder.startVector(4, data.length, 4);
-  for (var i = data.length - 1; i >= 0; i--) {
-    builder.addOffset(data[i]);
-  }
-  return builder.endVector();
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-static startTestarrayoftablesVector(builder:flatbuffers.Builder, numElems:number) {
-  builder.startVector(4, numElems, 4);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} enemyOffset
- */
-static addEnemy(builder:flatbuffers.Builder, enemyOffset:flatbuffers.Offset) {
-  builder.addFieldOffset(12, enemyOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testnestedflatbufferOffset
- */
-static addTestnestedflatbuffer(builder:flatbuffers.Builder, testnestedflatbufferOffset:flatbuffers.Offset) {
-  builder.addFieldOffset(13, testnestedflatbufferOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {Array.<number>} data
- * @returns {flatbuffers.Offset}
- */
-static createTestnestedflatbufferVector(builder:flatbuffers.Builder, data:number[] | Uint8Array):flatbuffers.Offset {
-if(!data){
-  return null
-}
-  builder.startVector(1, data.length, 1);
-  for (var i = data.length - 1; i >= 0; i--) {
-    builder.addInt8(data[i]);
-  }
-  return builder.endVector();
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-static startTestnestedflatbufferVector(builder:flatbuffers.Builder, numElems:number) {
-  builder.startVector(1, numElems, 1);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testemptyOffset
- */
-static addTestempty(builder:flatbuffers.Builder, testemptyOffset:flatbuffers.Offset) {
-  builder.addFieldOffset(14, testemptyOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {boolean} testbool
- */
-static addTestbool(builder:flatbuffers.Builder, testbool:boolean) {
-  builder.addFieldInt8(15, +testbool, +false);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} testhashs32Fnv1
- */
-static addTesthashs32Fnv1(builder:flatbuffers.Builder, testhashs32Fnv1:number) {
-  builder.addFieldInt32(16, testhashs32Fnv1, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} testhashu32Fnv1
- */
-static addTesthashu32Fnv1(builder:flatbuffers.Builder, testhashu32Fnv1:number) {
-  builder.addFieldInt32(17, testhashu32Fnv1, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Long} testhashs64Fnv1
- */
-static addTesthashs64Fnv1(builder:flatbuffers.Builder, testhashs64Fnv1:flatbuffers.Long) {
-  builder.addFieldInt64(18, testhashs64Fnv1, builder.createLong(0, 0));
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Long} testhashu64Fnv1
- */
-static addTesthashu64Fnv1(builder:flatbuffers.Builder, testhashu64Fnv1:flatbuffers.Long) {
-  builder.addFieldInt64(19, testhashu64Fnv1, builder.createLong(0, 0));
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} testhashs32Fnv1a
- */
-static addTesthashs32Fnv1a(builder:flatbuffers.Builder, testhashs32Fnv1a:number) {
-  builder.addFieldInt32(20, testhashs32Fnv1a, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} testhashu32Fnv1a
- */
-static addTesthashu32Fnv1a(builder:flatbuffers.Builder, testhashu32Fnv1a:number) {
-  builder.addFieldInt32(21, testhashu32Fnv1a, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Long} testhashs64Fnv1a
- */
-static addTesthashs64Fnv1a(builder:flatbuffers.Builder, testhashs64Fnv1a:flatbuffers.Long) {
-  builder.addFieldInt64(22, testhashs64Fnv1a, builder.createLong(0, 0));
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Long} testhashu64Fnv1a
- */
-static addTesthashu64Fnv1a(builder:flatbuffers.Builder, testhashu64Fnv1a:flatbuffers.Long) {
-  builder.addFieldInt64(23, testhashu64Fnv1a, builder.createLong(0, 0));
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testarrayofboolsOffset
- */
-static addTestarrayofbools(builder:flatbuffers.Builder, testarrayofboolsOffset:flatbuffers.Offset) {
-  builder.addFieldOffset(24, testarrayofboolsOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {Array.<boolean>} data
- * @returns {flatbuffers.Offset}
- */
-static createTestarrayofboolsVector(builder:flatbuffers.Builder, data:boolean[]):flatbuffers.Offset {
-if(!data){
-  return null
-}
-  builder.startVector(1, data.length, 1);
-  for (var i = data.length - 1; i >= 0; i--) {
-    builder.addInt8(+data[i]);
-  }
-  return builder.endVector();
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-static startTestarrayofboolsVector(builder:flatbuffers.Builder, numElems:number) {
-  builder.startVector(1, numElems, 1);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} testf
- */
-static addTestf(builder:flatbuffers.Builder, testf:number) {
-  builder.addFieldFloat32(25, testf, 3.14159);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} testf2
- */
-static addTestf2(builder:flatbuffers.Builder, testf2:number) {
-  builder.addFieldFloat32(26, testf2, 3.0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} testf3
- */
-static addTestf3(builder:flatbuffers.Builder, testf3:number) {
-  builder.addFieldFloat32(27, testf3, 0.0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testarrayofstring2Offset
- */
-static addTestarrayofstring2(builder:flatbuffers.Builder, testarrayofstring2Offset:flatbuffers.Offset) {
-  builder.addFieldOffset(28, testarrayofstring2Offset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {Array.<flatbuffers.Offset>} data
- * @returns {flatbuffers.Offset}
- */
-static createTestarrayofstring2Vector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {
-if(!data){
-  return null
-}
-  builder.startVector(4, data.length, 4);
-  for (var i = data.length - 1; i >= 0; i--) {
-    builder.addOffset(data[i]);
-  }
-  return builder.endVector();
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-static startTestarrayofstring2Vector(builder:flatbuffers.Builder, numElems:number) {
-  builder.startVector(4, numElems, 4);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} testarrayofsortedstructOffset
- */
-static addTestarrayofsortedstruct(builder:flatbuffers.Builder, testarrayofsortedstructOffset:flatbuffers.Offset) {
-  builder.addFieldOffset(29, testarrayofsortedstructOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} numElems
- */
-static startTestarrayofsortedstructVector(builder:flatbuffers.Builder, numElems:number) {
-  builder.startVector(8, numElems, 4);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-static endMonster(builder:flatbuffers.Builder):flatbuffers.Offset {
-  var offset = builder.endObject();
-  builder.requiredField(offset, 10); // name
-  return offset;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} offset
- */
-static finishMonsterBuffer(builder:flatbuffers.Builder, offset:flatbuffers.Offset) {
-  builder.finish(offset, 'MONS');
-};
-
-}
-}
diff --git a/third_party/flatbuffers/tests/monsterdata_python_wire.mon b/third_party/flatbuffers/tests/monsterdata_python_wire.mon
deleted file mode 100644
index 190f43a..0000000
--- a/third_party/flatbuffers/tests/monsterdata_python_wire.mon
+++ /dev/null
Binary files differ
diff --git a/third_party/flatbuffers/tests/monsterdata_test.golden b/third_party/flatbuffers/tests/monsterdata_test.golden
deleted file mode 100644
index 73afc42..0000000
--- a/third_party/flatbuffers/tests/monsterdata_test.golden
+++ /dev/null
@@ -1,48 +0,0 @@
-{
-  pos: {
-    x: 1,
-    y: 2,
-    z: 3,
-    test1: 3,
-    test2: Green,
-    test3: {
-      a: 5,
-      b: 6
-    }
-  },
-  hp: 80,
-  name: "MyMonster",
-  inventory: [
-    0,
-    1,
-    2,
-    3,
-    4
-  ],
-  test_type: Monster,
-  test: {
-    name: "Fred"
-  },
-  test4: [
-    {
-      a: 10,
-      b: 20
-    },
-    {
-      a: 30,
-      b: 40
-    }
-  ],
-  testarrayofstring: [
-    "test1",
-    "test2"
-  ],
-  testhashs32_fnv1: -579221183,
-  testhashu32_fnv1: 3715746113,
-  testhashs64_fnv1: 7930699090847568257,
-  testhashu64_fnv1: 7930699090847568257,
-  testhashs32_fnv1a: -1904106383,
-  testhashu32_fnv1a: 2390860913,
-  testhashs64_fnv1a: 4898026182817603057,
-  testhashu64_fnv1a: 4898026182817603057
-}
diff --git a/third_party/flatbuffers/tests/monsterdata_test.json b/third_party/flatbuffers/tests/monsterdata_test.json
deleted file mode 100755
index e8e3e1d..0000000
--- a/third_party/flatbuffers/tests/monsterdata_test.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
-  pos: {
-    x: 1,
-    y: "2",
-    z: 3,
-    test1: 3,
-    test2: Green,
-    test3: {
-      a: 5,
-      b: 6
-    }
-  },
-  hp: 80,
-  name: "MyMonster",
-  inventory: [
-    0,
-    1,
-    2,
-    3,
-    4
-  ],
-  test_type: Monster,
-  test: {
-    name: "Fred",
-    pos: null
-  },
-  test4: [
-    {
-      a: 10,
-      b: 20
-    },
-    {
-      b: "40",
-      a: 30
-    }
-  ],
-  testarrayofstring: [
-    "test1",
-    "test2"
-  ],
-  enemy: {
-    name: "Fred"
-  },
-  testarrayofbools:[
-    true, false, true
-  ],
-  testhashs32_fnv1: "This string is being hashed!",
-  testhashu32_fnv1: "This string is being hashed!",
-  testhashs64_fnv1: "This string is being hashed!",
-  testhashu64_fnv1: "This string is being hashed!",
-  testhashs32_fnv1a: "This string is being hashed!",
-  testhashu32_fnv1a: "This string is being hashed!",
-  testhashs64_fnv1a: "This string is being hashed!",
-  testhashu64_fnv1a: "This string is being hashed!",
-}
diff --git a/third_party/flatbuffers/tests/monsterdata_test.mon b/third_party/flatbuffers/tests/monsterdata_test.mon
deleted file mode 100644
index 21c4216..0000000
--- a/third_party/flatbuffers/tests/monsterdata_test.mon
+++ /dev/null
Binary files differ
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.cs b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.cs
deleted file mode 100644
index 5f979fe..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace NamespaceA.NamespaceB
-{
-
-public enum EnumInNestedNS : sbyte
-{
- A = 0,
- B = 1,
- C = 2,
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.go b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.go
deleted file mode 100644
index 2b68991..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package NamespaceB
-
-const (
-	EnumInNestedNSA = 0
-	EnumInNestedNSB = 1
-	EnumInNestedNSC = 2
-)
-
-var EnumNamesEnumInNestedNS = map[int]string{
-	EnumInNestedNSA:"A",
-	EnumInNestedNSB:"B",
-	EnumInNestedNSC:"C",
-}
-
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.java b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.java
deleted file mode 100644
index e23cecc..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.java
+++ /dev/null
@@ -1,15 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package NamespaceA.NamespaceB;
-
-public final class EnumInNestedNS {
-  private EnumInNestedNS() { }
-  public static final byte A = 0;
-  public static final byte B = 1;
-  public static final byte C = 2;
-
-  public static final String[] names = { "A", "B", "C", };
-
-  public static String name(int e) { return names[e]; }
-}
-
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.php b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.php
deleted file mode 100644
index d51cb41..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace NamespaceA\NamespaceB;
-
-class EnumInNestedNS
-{
-    const A = 0;
-    const B = 1;
-    const C = 2;
-
-    private static $names = array(
-        "A",
-        "B",
-        "C",
-    );
-
-    public static function Name($e)
-    {
-        if (!isset(self::$names[$e])) {
-            throw new \Exception();
-        }
-        return self::$names[$e];
-    }
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.py b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.py
deleted file mode 100644
index cb8218f..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/EnumInNestedNS.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: NamespaceB
-
-class EnumInNestedNS(object):
-    A = 0
-    B = 1
-    C = 2
-
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.cs b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.cs
deleted file mode 100644
index bb627ad..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace NamespaceA.NamespaceB
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct StructInNestedNS : IFlatbufferObject
-{
-  private Struct __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public StructInNestedNS __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public int A { get { return __p.bb.GetInt(__p.bb_pos + 0); } }
-  public void MutateA(int a) { __p.bb.PutInt(__p.bb_pos + 0, a); }
-  public int B { get { return __p.bb.GetInt(__p.bb_pos + 4); } }
-  public void MutateB(int b) { __p.bb.PutInt(__p.bb_pos + 4, b); }
-
-  public static Offset<StructInNestedNS> CreateStructInNestedNS(FlatBufferBuilder builder, int A, int B) {
-    builder.Prep(4, 8);
-    builder.PutInt(B);
-    builder.PutInt(A);
-    return new Offset<StructInNestedNS>(builder.Offset);
-  }
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.go b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.go
deleted file mode 100644
index 00840aa..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package NamespaceB
-
-import (
-	flatbuffers "github.com/google/flatbuffers/go"
-)
-
-type StructInNestedNS struct {
-	_tab flatbuffers.Struct
-}
-
-func (rcv *StructInNestedNS) Init(buf []byte, i flatbuffers.UOffsetT) {
-	rcv._tab.Bytes = buf
-	rcv._tab.Pos = i
-}
-
-func (rcv *StructInNestedNS) Table() flatbuffers.Table {
-	return rcv._tab.Table
-}
-
-func (rcv *StructInNestedNS) A() int32 {
-	return rcv._tab.GetInt32(rcv._tab.Pos + flatbuffers.UOffsetT(0))
-}
-func (rcv *StructInNestedNS) MutateA(n int32) bool {
-	return rcv._tab.MutateInt32(rcv._tab.Pos+flatbuffers.UOffsetT(0), n)
-}
-
-func (rcv *StructInNestedNS) B() int32 {
-	return rcv._tab.GetInt32(rcv._tab.Pos + flatbuffers.UOffsetT(4))
-}
-func (rcv *StructInNestedNS) MutateB(n int32) bool {
-	return rcv._tab.MutateInt32(rcv._tab.Pos+flatbuffers.UOffsetT(4), n)
-}
-
-func CreateStructInNestedNS(builder *flatbuffers.Builder, a int32, b int32) flatbuffers.UOffsetT {
-	builder.Prep(4, 8)
-	builder.PrependInt32(b)
-	builder.PrependInt32(a)
-	return builder.Offset()
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.java b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.java
deleted file mode 100644
index 42d47c1..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package NamespaceA.NamespaceB;
-
-import java.nio.*;
-import java.lang.*;
-import java.util.*;
-import com.google.flatbuffers.*;
-
-@SuppressWarnings("unused")
-public final class StructInNestedNS extends Struct {
-  public void __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; }
-  public StructInNestedNS __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public int a() { return bb.getInt(bb_pos + 0); }
-  public void mutateA(int a) { bb.putInt(bb_pos + 0, a); }
-  public int b() { return bb.getInt(bb_pos + 4); }
-  public void mutateB(int b) { bb.putInt(bb_pos + 4, b); }
-
-  public static int createStructInNestedNS(FlatBufferBuilder builder, int a, int b) {
-    builder.prep(4, 8);
-    builder.putInt(b);
-    builder.putInt(a);
-    return builder.offset();
-  }
-}
-
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.php b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.php
deleted file mode 100644
index d305484..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace NamespaceA\NamespaceB;
-
-use \Google\FlatBuffers\Struct;
-use \Google\FlatBuffers\Table;
-use \Google\FlatBuffers\ByteBuffer;
-use \Google\FlatBuffers\FlatBufferBuilder;
-
-class StructInNestedNS extends Struct
-{
-    /**
-     * @param int $_i offset
-     * @param ByteBuffer $_bb
-     * @return StructInNestedNS
-     **/
-    public function init($_i, ByteBuffer $_bb)
-    {
-        $this->bb_pos = $_i;
-        $this->bb = $_bb;
-        return $this;
-    }
-
-    /**
-     * @return int
-     */
-    public function GetA()
-    {
-        return $this->bb->getInt($this->bb_pos + 0);
-    }
-
-    /**
-     * @return int
-     */
-    public function GetB()
-    {
-        return $this->bb->getInt($this->bb_pos + 4);
-    }
-
-
-    /**
-     * @return int offset
-     */
-    public static function createStructInNestedNS(FlatBufferBuilder $builder, $a, $b)
-    {
-        $builder->prep(4, 8);
-        $builder->putInt($b);
-        $builder->putInt($a);
-        return $builder->offset();
-    }
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.py b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.py
deleted file mode 100644
index 59cceaa..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/StructInNestedNS.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: NamespaceB
-
-import flatbuffers
-
-class StructInNestedNS(object):
-    __slots__ = ['_tab']
-
-    # StructInNestedNS
-    def Init(self, buf, pos):
-        self._tab = flatbuffers.table.Table(buf, pos)
-
-    # StructInNestedNS
-    def A(self): return self._tab.Get(flatbuffers.number_types.Int32Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(0))
-    # StructInNestedNS
-    def B(self): return self._tab.Get(flatbuffers.number_types.Int32Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(4))
-
-def CreateStructInNestedNS(builder, a, b):
-    builder.Prep(4, 8)
-    builder.PrependInt32(b)
-    builder.PrependInt32(a)
-    return builder.Offset()
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.cs b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.cs
deleted file mode 100644
index c33d1fb..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace NamespaceA.NamespaceB
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct TableInNestedNS : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static TableInNestedNS GetRootAsTableInNestedNS(ByteBuffer _bb) { return GetRootAsTableInNestedNS(_bb, new TableInNestedNS()); }
-  public static TableInNestedNS GetRootAsTableInNestedNS(ByteBuffer _bb, TableInNestedNS obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public TableInNestedNS __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public int Foo { get { int o = __p.__offset(4); return o != 0 ? __p.bb.GetInt(o + __p.bb_pos) : (int)0; } }
-  public bool MutateFoo(int foo) { int o = __p.__offset(4); if (o != 0) { __p.bb.PutInt(o + __p.bb_pos, foo); return true; } else { return false; } }
-
-  public static Offset<TableInNestedNS> CreateTableInNestedNS(FlatBufferBuilder builder,
-      int foo = 0) {
-    builder.StartObject(1);
-    TableInNestedNS.AddFoo(builder, foo);
-    return TableInNestedNS.EndTableInNestedNS(builder);
-  }
-
-  public static void StartTableInNestedNS(FlatBufferBuilder builder) { builder.StartObject(1); }
-  public static void AddFoo(FlatBufferBuilder builder, int foo) { builder.AddInt(0, foo, 0); }
-  public static Offset<TableInNestedNS> EndTableInNestedNS(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<TableInNestedNS>(o);
-  }
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.go b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.go
deleted file mode 100644
index 0e767b8..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package NamespaceB
-
-import (
-	flatbuffers "github.com/google/flatbuffers/go"
-)
-
-type TableInNestedNS struct {
-	_tab flatbuffers.Table
-}
-
-func GetRootAsTableInNestedNS(buf []byte, offset flatbuffers.UOffsetT) *TableInNestedNS {
-	n := flatbuffers.GetUOffsetT(buf[offset:])
-	x := &TableInNestedNS{}
-	x.Init(buf, n+offset)
-	return x
-}
-
-func (rcv *TableInNestedNS) Init(buf []byte, i flatbuffers.UOffsetT) {
-	rcv._tab.Bytes = buf
-	rcv._tab.Pos = i
-}
-
-func (rcv *TableInNestedNS) Table() flatbuffers.Table {
-	return rcv._tab
-}
-
-func (rcv *TableInNestedNS) Foo() int32 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(4))
-	if o != 0 {
-		return rcv._tab.GetInt32(o + rcv._tab.Pos)
-	}
-	return 0
-}
-
-func (rcv *TableInNestedNS) MutateFoo(n int32) bool {
-	return rcv._tab.MutateInt32Slot(4, n)
-}
-
-func TableInNestedNSStart(builder *flatbuffers.Builder) {
-	builder.StartObject(1)
-}
-func TableInNestedNSAddFoo(builder *flatbuffers.Builder, foo int32) {
-	builder.PrependInt32Slot(0, foo, 0)
-}
-func TableInNestedNSEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
-	return builder.EndObject()
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.java b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.java
deleted file mode 100644
index 415fa69..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package NamespaceA.NamespaceB;
-
-import java.nio.*;
-import java.lang.*;
-import java.util.*;
-import com.google.flatbuffers.*;
-
-@SuppressWarnings("unused")
-public final class TableInNestedNS extends Table {
-  public static TableInNestedNS getRootAsTableInNestedNS(ByteBuffer _bb) { return getRootAsTableInNestedNS(_bb, new TableInNestedNS()); }
-  public static TableInNestedNS getRootAsTableInNestedNS(ByteBuffer _bb, TableInNestedNS obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; }
-  public TableInNestedNS __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public int foo() { int o = __offset(4); return o != 0 ? bb.getInt(o + bb_pos) : 0; }
-  public boolean mutateFoo(int foo) { int o = __offset(4); if (o != 0) { bb.putInt(o + bb_pos, foo); return true; } else { return false; } }
-
-  public static int createTableInNestedNS(FlatBufferBuilder builder,
-      int foo) {
-    builder.startObject(1);
-    TableInNestedNS.addFoo(builder, foo);
-    return TableInNestedNS.endTableInNestedNS(builder);
-  }
-
-  public static void startTableInNestedNS(FlatBufferBuilder builder) { builder.startObject(1); }
-  public static void addFoo(FlatBufferBuilder builder, int foo) { builder.addInt(0, foo, 0); }
-  public static int endTableInNestedNS(FlatBufferBuilder builder) {
-    int o = builder.endObject();
-    return o;
-  }
-}
-
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.php b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.php
deleted file mode 100644
index d16379d..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace NamespaceA\NamespaceB;
-
-use \Google\FlatBuffers\Struct;
-use \Google\FlatBuffers\Table;
-use \Google\FlatBuffers\ByteBuffer;
-use \Google\FlatBuffers\FlatBufferBuilder;
-
-class TableInNestedNS extends Table
-{
-    /**
-     * @param ByteBuffer $bb
-     * @return TableInNestedNS
-     */
-    public static function getRootAsTableInNestedNS(ByteBuffer $bb)
-    {
-        $obj = new TableInNestedNS();
-        return ($obj->init($bb->getInt($bb->getPosition()) + $bb->getPosition(), $bb));
-    }
-
-    /**
-     * @param int $_i offset
-     * @param ByteBuffer $_bb
-     * @return TableInNestedNS
-     **/
-    public function init($_i, ByteBuffer $_bb)
-    {
-        $this->bb_pos = $_i;
-        $this->bb = $_bb;
-        return $this;
-    }
-
-    /**
-     * @return int
-     */
-    public function getFoo()
-    {
-        $o = $this->__offset(4);
-        return $o != 0 ? $this->bb->getInt($o + $this->bb_pos) : 0;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return void
-     */
-    public static function startTableInNestedNS(FlatBufferBuilder $builder)
-    {
-        $builder->StartObject(1);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return TableInNestedNS
-     */
-    public static function createTableInNestedNS(FlatBufferBuilder $builder, $foo)
-    {
-        $builder->startObject(1);
-        self::addFoo($builder, $foo);
-        $o = $builder->endObject();
-        return $o;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int
-     * @return void
-     */
-    public static function addFoo(FlatBufferBuilder $builder, $foo)
-    {
-        $builder->addIntX(0, $foo, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return int table offset
-     */
-    public static function endTableInNestedNS(FlatBufferBuilder $builder)
-    {
-        $o = $builder->endObject();
-        return $o;
-    }
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.py b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.py
deleted file mode 100644
index d6d1674..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: NamespaceB
-
-import flatbuffers
-
-class TableInNestedNS(object):
-    __slots__ = ['_tab']
-
-    @classmethod
-    def GetRootAsTableInNestedNS(cls, buf, offset):
-        n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
-        x = TableInNestedNS()
-        x.Init(buf, n + offset)
-        return x
-
-    # TableInNestedNS
-    def Init(self, buf, pos):
-        self._tab = flatbuffers.table.Table(buf, pos)
-
-    # TableInNestedNS
-    def Foo(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos)
-        return 0
-
-def TableInNestedNSStart(builder): builder.StartObject(1)
-def TableInNestedNSAddFoo(builder, foo): builder.PrependInt32Slot(0, foo, 0)
-def TableInNestedNSEnd(builder): return builder.EndObject()
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/__init__.py b/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/NamespaceB/__init__.py
+++ /dev/null
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/SecondTableInA.cs b/third_party/flatbuffers/tests/namespace_test/NamespaceA/SecondTableInA.cs
deleted file mode 100644
index f28ed86..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/SecondTableInA.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace NamespaceA
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct SecondTableInA : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static SecondTableInA GetRootAsSecondTableInA(ByteBuffer _bb) { return GetRootAsSecondTableInA(_bb, new SecondTableInA()); }
-  public static SecondTableInA GetRootAsSecondTableInA(ByteBuffer _bb, SecondTableInA obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public SecondTableInA __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public NamespaceC.TableInC? ReferToC { get { int o = __p.__offset(4); return o != 0 ? (NamespaceC.TableInC?)(new NamespaceC.TableInC()).__assign(__p.__indirect(o + __p.bb_pos), __p.bb) : null; } }
-
-  public static Offset<SecondTableInA> CreateSecondTableInA(FlatBufferBuilder builder,
-      Offset<NamespaceC.TableInC> refer_to_cOffset = default(Offset<NamespaceC.TableInC>)) {
-    builder.StartObject(1);
-    SecondTableInA.AddReferToC(builder, refer_to_cOffset);
-    return SecondTableInA.EndSecondTableInA(builder);
-  }
-
-  public static void StartSecondTableInA(FlatBufferBuilder builder) { builder.StartObject(1); }
-  public static void AddReferToC(FlatBufferBuilder builder, Offset<NamespaceC.TableInC> referToCOffset) { builder.AddOffset(0, referToCOffset.Value, 0); }
-  public static Offset<SecondTableInA> EndSecondTableInA(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<SecondTableInA>(o);
-  }
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/SecondTableInA.go b/third_party/flatbuffers/tests/namespace_test/NamespaceA/SecondTableInA.go
deleted file mode 100644
index bd691e8..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/SecondTableInA.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package NamespaceA
-
-import (
-	flatbuffers "github.com/google/flatbuffers/go"
-)
-
-type SecondTableInA struct {
-	_tab flatbuffers.Table
-}
-
-func GetRootAsSecondTableInA(buf []byte, offset flatbuffers.UOffsetT) *SecondTableInA {
-	n := flatbuffers.GetUOffsetT(buf[offset:])
-	x := &SecondTableInA{}
-	x.Init(buf, n+offset)
-	return x
-}
-
-func (rcv *SecondTableInA) Init(buf []byte, i flatbuffers.UOffsetT) {
-	rcv._tab.Bytes = buf
-	rcv._tab.Pos = i
-}
-
-func (rcv *SecondTableInA) Table() flatbuffers.Table {
-	return rcv._tab
-}
-
-func (rcv *SecondTableInA) ReferToC(obj *TableInC) *TableInC {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(4))
-	if o != 0 {
-		x := rcv._tab.Indirect(o + rcv._tab.Pos)
-		if obj == nil {
-			obj = new(TableInC)
-		}
-		obj.Init(rcv._tab.Bytes, x)
-		return obj
-	}
-	return nil
-}
-
-func SecondTableInAStart(builder *flatbuffers.Builder) {
-	builder.StartObject(1)
-}
-func SecondTableInAAddReferToC(builder *flatbuffers.Builder, referToC flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(0, flatbuffers.UOffsetT(referToC), 0)
-}
-func SecondTableInAEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
-	return builder.EndObject()
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/SecondTableInA.java b/third_party/flatbuffers/tests/namespace_test/NamespaceA/SecondTableInA.java
deleted file mode 100644
index 7c56b88..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/SecondTableInA.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package NamespaceA;
-
-import java.nio.*;
-import java.lang.*;
-import java.util.*;
-import com.google.flatbuffers.*;
-
-@SuppressWarnings("unused")
-public final class SecondTableInA extends Table {
-  public static SecondTableInA getRootAsSecondTableInA(ByteBuffer _bb) { return getRootAsSecondTableInA(_bb, new SecondTableInA()); }
-  public static SecondTableInA getRootAsSecondTableInA(ByteBuffer _bb, SecondTableInA obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; }
-  public SecondTableInA __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public NamespaceC.TableInC referToC() { return referToC(new NamespaceC.TableInC()); }
-  public NamespaceC.TableInC referToC(NamespaceC.TableInC obj) { int o = __offset(4); return o != 0 ? obj.__assign(__indirect(o + bb_pos), bb) : null; }
-
-  public static int createSecondTableInA(FlatBufferBuilder builder,
-      int refer_to_cOffset) {
-    builder.startObject(1);
-    SecondTableInA.addReferToC(builder, refer_to_cOffset);
-    return SecondTableInA.endSecondTableInA(builder);
-  }
-
-  public static void startSecondTableInA(FlatBufferBuilder builder) { builder.startObject(1); }
-  public static void addReferToC(FlatBufferBuilder builder, int referToCOffset) { builder.addOffset(0, referToCOffset, 0); }
-  public static int endSecondTableInA(FlatBufferBuilder builder) {
-    int o = builder.endObject();
-    return o;
-  }
-}
-
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/SecondTableInA.php b/third_party/flatbuffers/tests/namespace_test/NamespaceA/SecondTableInA.php
deleted file mode 100644
index c9bc65c..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/SecondTableInA.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace NamespaceA;
-
-use \Google\FlatBuffers\Struct;
-use \Google\FlatBuffers\Table;
-use \Google\FlatBuffers\ByteBuffer;
-use \Google\FlatBuffers\FlatBufferBuilder;
-
-class SecondTableInA extends Table
-{
-    /**
-     * @param ByteBuffer $bb
-     * @return SecondTableInA
-     */
-    public static function getRootAsSecondTableInA(ByteBuffer $bb)
-    {
-        $obj = new SecondTableInA();
-        return ($obj->init($bb->getInt($bb->getPosition()) + $bb->getPosition(), $bb));
-    }
-
-    /**
-     * @param int $_i offset
-     * @param ByteBuffer $_bb
-     * @return SecondTableInA
-     **/
-    public function init($_i, ByteBuffer $_bb)
-    {
-        $this->bb_pos = $_i;
-        $this->bb = $_bb;
-        return $this;
-    }
-
-    public function getReferToC()
-    {
-        $obj = new TableInC();
-        $o = $this->__offset(4);
-        return $o != 0 ? $obj->init($this->__indirect($o + $this->bb_pos), $this->bb) : 0;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return void
-     */
-    public static function startSecondTableInA(FlatBufferBuilder $builder)
-    {
-        $builder->StartObject(1);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return SecondTableInA
-     */
-    public static function createSecondTableInA(FlatBufferBuilder $builder, $refer_to_c)
-    {
-        $builder->startObject(1);
-        self::addReferToC($builder, $refer_to_c);
-        $o = $builder->endObject();
-        return $o;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int
-     * @return void
-     */
-    public static function addReferToC(FlatBufferBuilder $builder, $referToC)
-    {
-        $builder->addOffsetX(0, $referToC, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return int table offset
-     */
-    public static function endSecondTableInA(FlatBufferBuilder $builder)
-    {
-        $o = $builder->endObject();
-        return $o;
-    }
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/SecondTableInA.py b/third_party/flatbuffers/tests/namespace_test/NamespaceA/SecondTableInA.py
deleted file mode 100644
index 20dac3e..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/SecondTableInA.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: NamespaceA
-
-import flatbuffers
-
-class SecondTableInA(object):
-    __slots__ = ['_tab']
-
-    @classmethod
-    def GetRootAsSecondTableInA(cls, buf, offset):
-        n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
-        x = SecondTableInA()
-        x.Init(buf, n + offset)
-        return x
-
-    # SecondTableInA
-    def Init(self, buf, pos):
-        self._tab = flatbuffers.table.Table(buf, pos)
-
-    # SecondTableInA
-    def ReferToC(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
-        if o != 0:
-            x = self._tab.Indirect(o + self._tab.Pos)
-            from .TableInC import TableInC
-            obj = TableInC()
-            obj.Init(self._tab.Bytes, x)
-            return obj
-        return None
-
-def SecondTableInAStart(builder): builder.StartObject(1)
-def SecondTableInAAddReferToC(builder, referToC): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(referToC), 0)
-def SecondTableInAEnd(builder): return builder.EndObject()
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInC.cs b/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInC.cs
deleted file mode 100644
index 98f4e13..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInC.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace NamespaceA
-{
-
-using System;
-using FlatBuffers;
-
-public sealed class TableInC : Table {
-  public static TableInC GetRootAsTableInC(ByteBuffer _bb) { return GetRootAsTableInC(_bb, new TableInC()); }
-  public static TableInC GetRootAsTableInC(ByteBuffer _bb, TableInC obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public TableInC __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
-
-  public NamespaceA.TableInFirstNS ReferToA1 { get { return GetReferToA1(new NamespaceA.TableInFirstNS()); } }
-  public NamespaceA.TableInFirstNS GetReferToA1(NamespaceA.TableInFirstNS obj) { int o = __offset(4); return o != 0 ? obj.__init(__indirect(o + bb_pos), bb) : null; }
-  public SecondTableInA ReferToA2 { get { return GetReferToA2(new SecondTableInA()); } }
-  public SecondTableInA GetReferToA2(SecondTableInA obj) { int o = __offset(6); return o != 0 ? obj.__init(__indirect(o + bb_pos), bb) : null; }
-
-  public static Offset<NamespaceC.TableInC> CreateTableInC(FlatBufferBuilder builder,
-      Offset<NamespaceA.TableInFirstNS> refer_to_a1Offset = default(Offset<NamespaceA.TableInFirstNS>),
-      Offset<SecondTableInA> refer_to_a2Offset = default(Offset<SecondTableInA>)) {
-    builder.StartObject(2);
-    TableInC.AddReferToA2(builder, refer_to_a2Offset);
-    TableInC.AddReferToA1(builder, refer_to_a1Offset);
-    return TableInC.EndTableInC(builder);
-  }
-
-  public static void StartTableInC(FlatBufferBuilder builder) { builder.StartObject(2); }
-  public static void AddReferToA1(FlatBufferBuilder builder, Offset<NamespaceA.TableInFirstNS> referToA1Offset) { builder.AddOffset(0, referToA1Offset.Value, 0); }
-  public static void AddReferToA2(FlatBufferBuilder builder, Offset<SecondTableInA> referToA2Offset) { builder.AddOffset(1, referToA2Offset.Value, 0); }
-  public static Offset<NamespaceC.TableInC> EndTableInC(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<NamespaceC.TableInC>(o);
-  }
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInC.go b/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInC.go
deleted file mode 100644
index 6f3d3f2..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInC.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package NamespaceA
-
-import (
-	flatbuffers "github.com/google/flatbuffers/go"
-)
-type TableInC struct {
-	_tab flatbuffers.Table
-}
-
-func (rcv *TableInC) Init(buf []byte, i flatbuffers.UOffsetT) {
-	rcv._tab.Bytes = buf
-	rcv._tab.Pos = i
-}
-
-func (rcv *TableInC) ReferToA1(obj *TableInFirstNS) *TableInFirstNS {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(4))
-	if o != 0 {
-		x := rcv._tab.Indirect(o + rcv._tab.Pos)
-		if obj == nil {
-			obj = new(TableInFirstNS)
-		}
-		obj.Init(rcv._tab.Bytes, x)
-		return obj
-	}
-	return nil
-}
-
-func (rcv *TableInC) ReferToA2(obj *SecondTableInA) *SecondTableInA {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(6))
-	if o != 0 {
-		x := rcv._tab.Indirect(o + rcv._tab.Pos)
-		if obj == nil {
-			obj = new(SecondTableInA)
-		}
-		obj.Init(rcv._tab.Bytes, x)
-		return obj
-	}
-	return nil
-}
-
-func TableInCStart(builder *flatbuffers.Builder) { builder.StartObject(2) }
-func TableInCAddReferToA1(builder *flatbuffers.Builder, referToA1 flatbuffers.UOffsetT) { builder.PrependUOffsetTSlot(0, flatbuffers.UOffsetT(referToA1), 0) }
-func TableInCAddReferToA2(builder *flatbuffers.Builder, referToA2 flatbuffers.UOffsetT) { builder.PrependUOffsetTSlot(1, flatbuffers.UOffsetT(referToA2), 0) }
-func TableInCEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT { return builder.EndObject() }
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInC.java b/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInC.java
deleted file mode 100644
index 38fb3ab..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInC.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package NamespaceA;
-
-import java.nio.*;
-import java.lang.*;
-import java.util.*;
-import com.google.flatbuffers.*;
-
-@SuppressWarnings("unused")
-public final class TableInC extends Table {
-  public static TableInC getRootAsTableInC(ByteBuffer _bb) { return getRootAsTableInC(_bb, new TableInC()); }
-  public static TableInC getRootAsTableInC(ByteBuffer _bb, TableInC obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__init(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
-  public TableInC __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }
-
-  public NamespaceA.TableInFirstNS referToA1() { return referToA1(new NamespaceA.TableInFirstNS()); }
-  public NamespaceA.TableInFirstNS referToA1(NamespaceA.TableInFirstNS obj) { int o = __offset(4); return o != 0 ? obj.__init(__indirect(o + bb_pos), bb) : null; }
-  public SecondTableInA referToA2() { return referToA2(new SecondTableInA()); }
-  public SecondTableInA referToA2(SecondTableInA obj) { int o = __offset(6); return o != 0 ? obj.__init(__indirect(o + bb_pos), bb) : null; }
-
-  public static int createTableInC(FlatBufferBuilder builder,
-      int refer_to_a1Offset,
-      int refer_to_a2Offset) {
-    builder.startObject(2);
-    TableInC.addReferToA2(builder, refer_to_a2Offset);
-    TableInC.addReferToA1(builder, refer_to_a1Offset);
-    return TableInC.endTableInC(builder);
-  }
-
-  public static void startTableInC(FlatBufferBuilder builder) { builder.startObject(2); }
-  public static void addReferToA1(FlatBufferBuilder builder, int referToA1Offset) { builder.addOffset(0, referToA1Offset, 0); }
-  public static void addReferToA2(FlatBufferBuilder builder, int referToA2Offset) { builder.addOffset(1, referToA2Offset, 0); }
-  public static int endTableInC(FlatBufferBuilder builder) {
-    int o = builder.endObject();
-    return o;
-  }
-};
-
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInC.php b/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInC.php
deleted file mode 100644
index 49705f8..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInC.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace NamespaceA;
-
-use \Google\FlatBuffers\Struct;
-use \Google\FlatBuffers\Table;
-use \Google\FlatBuffers\ByteBuffer;
-use \Google\FlatBuffers\FlatBufferBuilder;
-
-class TableInC extends Table
-{
-    /**
-     * @param ByteBuffer $bb
-     * @return TableInC
-     */
-    public static function getRootAsTableInC(ByteBuffer $bb)
-    {
-        $obj = new TableInC();
-        return ($obj->init($bb->getInt($bb->getPosition()) + $bb->getPosition(), $bb));
-    }
-
-    /**
-     * @param int $_i offset
-     * @param ByteBuffer $_bb
-     * @return TableInC
-     **/
-    public function init($_i, ByteBuffer $_bb)
-    {
-        $this->bb_pos = $_i;
-        $this->bb = $_bb;
-        return $this;
-    }
-
-    public function getReferToA1()
-    {
-        $obj = new TableInFirstNS();
-        $o = $this->__offset(4);
-        return $o != 0 ? $obj->init($this->__indirect($o + $this->bb_pos), $this->bb) : 0;
-    }
-
-    public function getReferToA2()
-    {
-        $obj = new SecondTableInA();
-        $o = $this->__offset(6);
-        return $o != 0 ? $obj->init($this->__indirect($o + $this->bb_pos), $this->bb) : 0;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return void
-     */
-    public static function startTableInC(FlatBufferBuilder $builder)
-    {
-        $builder->StartObject(2);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return TableInC
-     */
-    public static function createTableInC(FlatBufferBuilder $builder, $refer_to_a1, $refer_to_a2)
-    {
-        $builder->startObject(2);
-        self::addReferToA1($builder, $refer_to_a1);
-        self::addReferToA2($builder, $refer_to_a2);
-        $o = $builder->endObject();
-        return $o;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int
-     * @return void
-     */
-    public static function addReferToA1(FlatBufferBuilder $builder, $referToA1)
-    {
-        $builder->addOffsetX(0, $referToA1, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int
-     * @return void
-     */
-    public static function addReferToA2(FlatBufferBuilder $builder, $referToA2)
-    {
-        $builder->addOffsetX(1, $referToA2, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return int table offset
-     */
-    public static function endTableInC(FlatBufferBuilder $builder)
-    {
-        $o = $builder->endObject();
-        return $o;
-    }
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInC.py b/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInC.py
deleted file mode 100644
index 4afea1a..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInC.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: NamespaceA
-
-import flatbuffers
-
-class TableInC(object):
-    __slots__ = ['_tab']
-
-    # TableInC
-    def Init(self, buf, pos):
-        self._tab = flatbuffers.table.Table(buf, pos)
-
-    # TableInC
-    def ReferToA1(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
-        if o != 0:
-            x = self._tab.Indirect(o + self._tab.Pos)
-            from .TableInFirstNS import TableInFirstNS
-            obj = TableInFirstNS()
-            obj.Init(self._tab.Bytes, x)
-            return obj
-        return None
-
-    # TableInC
-    def ReferToA2(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
-        if o != 0:
-            x = self._tab.Indirect(o + self._tab.Pos)
-            from .SecondTableInA import SecondTableInA
-            obj = SecondTableInA()
-            obj.Init(self._tab.Bytes, x)
-            return obj
-        return None
-
-def TableInCStart(builder): builder.StartObject(2)
-def TableInCAddReferToA1(builder, referToA1): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(referToA1), 0)
-def TableInCAddReferToA2(builder, referToA2): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(referToA2), 0)
-def TableInCEnd(builder): return builder.EndObject()
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInFirstNS.cs b/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInFirstNS.cs
deleted file mode 100644
index 20f4b4b..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInFirstNS.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace NamespaceA
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct TableInFirstNS : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static TableInFirstNS GetRootAsTableInFirstNS(ByteBuffer _bb) { return GetRootAsTableInFirstNS(_bb, new TableInFirstNS()); }
-  public static TableInFirstNS GetRootAsTableInFirstNS(ByteBuffer _bb, TableInFirstNS obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public TableInFirstNS __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public NamespaceA.NamespaceB.TableInNestedNS? FooTable { get { int o = __p.__offset(4); return o != 0 ? (NamespaceA.NamespaceB.TableInNestedNS?)(new NamespaceA.NamespaceB.TableInNestedNS()).__assign(__p.__indirect(o + __p.bb_pos), __p.bb) : null; } }
-  public NamespaceA.NamespaceB.EnumInNestedNS FooEnum { get { int o = __p.__offset(6); return o != 0 ? (NamespaceA.NamespaceB.EnumInNestedNS)__p.bb.GetSbyte(o + __p.bb_pos) : NamespaceA.NamespaceB.EnumInNestedNS.A; } }
-  public bool MutateFooEnum(NamespaceA.NamespaceB.EnumInNestedNS foo_enum) { int o = __p.__offset(6); if (o != 0) { __p.bb.PutSbyte(o + __p.bb_pos, (sbyte)foo_enum); return true; } else { return false; } }
-  public NamespaceA.NamespaceB.StructInNestedNS? FooStruct { get { int o = __p.__offset(8); return o != 0 ? (NamespaceA.NamespaceB.StructInNestedNS?)(new NamespaceA.NamespaceB.StructInNestedNS()).__assign(o + __p.bb_pos, __p.bb) : null; } }
-
-  public static void StartTableInFirstNS(FlatBufferBuilder builder) { builder.StartObject(3); }
-  public static void AddFooTable(FlatBufferBuilder builder, Offset<NamespaceA.NamespaceB.TableInNestedNS> fooTableOffset) { builder.AddOffset(0, fooTableOffset.Value, 0); }
-  public static void AddFooEnum(FlatBufferBuilder builder, NamespaceA.NamespaceB.EnumInNestedNS fooEnum) { builder.AddSbyte(1, (sbyte)fooEnum, 0); }
-  public static void AddFooStruct(FlatBufferBuilder builder, Offset<NamespaceA.NamespaceB.StructInNestedNS> fooStructOffset) { builder.AddStruct(2, fooStructOffset.Value, 0); }
-  public static Offset<TableInFirstNS> EndTableInFirstNS(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<TableInFirstNS>(o);
-  }
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInFirstNS.go b/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInFirstNS.go
deleted file mode 100644
index b3354d3..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInFirstNS.go
+++ /dev/null
@@ -1,81 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package NamespaceA
-
-import (
-	flatbuffers "github.com/google/flatbuffers/go"
-)
-
-type TableInFirstNS struct {
-	_tab flatbuffers.Table
-}
-
-func GetRootAsTableInFirstNS(buf []byte, offset flatbuffers.UOffsetT) *TableInFirstNS {
-	n := flatbuffers.GetUOffsetT(buf[offset:])
-	x := &TableInFirstNS{}
-	x.Init(buf, n+offset)
-	return x
-}
-
-func (rcv *TableInFirstNS) Init(buf []byte, i flatbuffers.UOffsetT) {
-	rcv._tab.Bytes = buf
-	rcv._tab.Pos = i
-}
-
-func (rcv *TableInFirstNS) Table() flatbuffers.Table {
-	return rcv._tab
-}
-
-func (rcv *TableInFirstNS) FooTable(obj *TableInNestedNS) *TableInNestedNS {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(4))
-	if o != 0 {
-		x := rcv._tab.Indirect(o + rcv._tab.Pos)
-		if obj == nil {
-			obj = new(TableInNestedNS)
-		}
-		obj.Init(rcv._tab.Bytes, x)
-		return obj
-	}
-	return nil
-}
-
-func (rcv *TableInFirstNS) FooEnum() int8 {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(6))
-	if o != 0 {
-		return rcv._tab.GetInt8(o + rcv._tab.Pos)
-	}
-	return 0
-}
-
-func (rcv *TableInFirstNS) MutateFooEnum(n int8) bool {
-	return rcv._tab.MutateInt8Slot(6, n)
-}
-
-func (rcv *TableInFirstNS) FooStruct(obj *StructInNestedNS) *StructInNestedNS {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(8))
-	if o != 0 {
-		x := o + rcv._tab.Pos
-		if obj == nil {
-			obj = new(StructInNestedNS)
-		}
-		obj.Init(rcv._tab.Bytes, x)
-		return obj
-	}
-	return nil
-}
-
-func TableInFirstNSStart(builder *flatbuffers.Builder) {
-	builder.StartObject(3)
-}
-func TableInFirstNSAddFooTable(builder *flatbuffers.Builder, fooTable flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(0, flatbuffers.UOffsetT(fooTable), 0)
-}
-func TableInFirstNSAddFooEnum(builder *flatbuffers.Builder, fooEnum int8) {
-	builder.PrependInt8Slot(1, fooEnum, 0)
-}
-func TableInFirstNSAddFooStruct(builder *flatbuffers.Builder, fooStruct flatbuffers.UOffsetT) {
-	builder.PrependStructSlot(2, flatbuffers.UOffsetT(fooStruct), 0)
-}
-func TableInFirstNSEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
-	return builder.EndObject()
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInFirstNS.java b/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInFirstNS.java
deleted file mode 100644
index b03c462..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInFirstNS.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package NamespaceA;
-
-import java.nio.*;
-import java.lang.*;
-import java.util.*;
-import com.google.flatbuffers.*;
-
-@SuppressWarnings("unused")
-public final class TableInFirstNS extends Table {
-  public static TableInFirstNS getRootAsTableInFirstNS(ByteBuffer _bb) { return getRootAsTableInFirstNS(_bb, new TableInFirstNS()); }
-  public static TableInFirstNS getRootAsTableInFirstNS(ByteBuffer _bb, TableInFirstNS obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; }
-  public TableInFirstNS __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public NamespaceA.NamespaceB.TableInNestedNS fooTable() { return fooTable(new NamespaceA.NamespaceB.TableInNestedNS()); }
-  public NamespaceA.NamespaceB.TableInNestedNS fooTable(NamespaceA.NamespaceB.TableInNestedNS obj) { int o = __offset(4); return o != 0 ? obj.__assign(__indirect(o + bb_pos), bb) : null; }
-  public byte fooEnum() { int o = __offset(6); return o != 0 ? bb.get(o + bb_pos) : 0; }
-  public boolean mutateFooEnum(byte foo_enum) { int o = __offset(6); if (o != 0) { bb.put(o + bb_pos, foo_enum); return true; } else { return false; } }
-  public NamespaceA.NamespaceB.StructInNestedNS fooStruct() { return fooStruct(new NamespaceA.NamespaceB.StructInNestedNS()); }
-  public NamespaceA.NamespaceB.StructInNestedNS fooStruct(NamespaceA.NamespaceB.StructInNestedNS obj) { int o = __offset(8); return o != 0 ? obj.__assign(o + bb_pos, bb) : null; }
-
-  public static void startTableInFirstNS(FlatBufferBuilder builder) { builder.startObject(3); }
-  public static void addFooTable(FlatBufferBuilder builder, int fooTableOffset) { builder.addOffset(0, fooTableOffset, 0); }
-  public static void addFooEnum(FlatBufferBuilder builder, byte fooEnum) { builder.addByte(1, fooEnum, 0); }
-  public static void addFooStruct(FlatBufferBuilder builder, int fooStructOffset) { builder.addStruct(2, fooStructOffset, 0); }
-  public static int endTableInFirstNS(FlatBufferBuilder builder) {
-    int o = builder.endObject();
-    return o;
-  }
-}
-
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInFirstNS.php b/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInFirstNS.php
deleted file mode 100644
index 9fb29c3..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInFirstNS.php
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace NamespaceA;
-
-use \Google\FlatBuffers\Struct;
-use \Google\FlatBuffers\Table;
-use \Google\FlatBuffers\ByteBuffer;
-use \Google\FlatBuffers\FlatBufferBuilder;
-
-class TableInFirstNS extends Table
-{
-    /**
-     * @param ByteBuffer $bb
-     * @return TableInFirstNS
-     */
-    public static function getRootAsTableInFirstNS(ByteBuffer $bb)
-    {
-        $obj = new TableInFirstNS();
-        return ($obj->init($bb->getInt($bb->getPosition()) + $bb->getPosition(), $bb));
-    }
-
-    /**
-     * @param int $_i offset
-     * @param ByteBuffer $_bb
-     * @return TableInFirstNS
-     **/
-    public function init($_i, ByteBuffer $_bb)
-    {
-        $this->bb_pos = $_i;
-        $this->bb = $_bb;
-        return $this;
-    }
-
-    public function getFooTable()
-    {
-        $obj = new TableInNestedNS();
-        $o = $this->__offset(4);
-        return $o != 0 ? $obj->init($this->__indirect($o + $this->bb_pos), $this->bb) : 0;
-    }
-
-    /**
-     * @return sbyte
-     */
-    public function getFooEnum()
-    {
-        $o = $this->__offset(6);
-        return $o != 0 ? $this->bb->getSbyte($o + $this->bb_pos) : \NamespaceA\NamespaceB\EnumInNestedNS::A;
-    }
-
-    public function getFooStruct()
-    {
-        $obj = new StructInNestedNS();
-        $o = $this->__offset(8);
-        return $o != 0 ? $obj->init($o + $this->bb_pos, $this->bb) : 0;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return void
-     */
-    public static function startTableInFirstNS(FlatBufferBuilder $builder)
-    {
-        $builder->StartObject(3);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return TableInFirstNS
-     */
-    public static function createTableInFirstNS(FlatBufferBuilder $builder, $foo_table, $foo_enum, $foo_struct)
-    {
-        $builder->startObject(3);
-        self::addFooTable($builder, $foo_table);
-        self::addFooEnum($builder, $foo_enum);
-        self::addFooStruct($builder, $foo_struct);
-        $o = $builder->endObject();
-        return $o;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int
-     * @return void
-     */
-    public static function addFooTable(FlatBufferBuilder $builder, $fooTable)
-    {
-        $builder->addOffsetX(0, $fooTable, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param sbyte
-     * @return void
-     */
-    public static function addFooEnum(FlatBufferBuilder $builder, $fooEnum)
-    {
-        $builder->addSbyteX(1, $fooEnum, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int
-     * @return void
-     */
-    public static function addFooStruct(FlatBufferBuilder $builder, $fooStruct)
-    {
-        $builder->addStructX(2, $fooStruct, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return int table offset
-     */
-    public static function endTableInFirstNS(FlatBufferBuilder $builder)
-    {
-        $o = $builder->endObject();
-        return $o;
-    }
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInFirstNS.py b/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInFirstNS.py
deleted file mode 100644
index 40cbeba..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/TableInFirstNS.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: NamespaceA
-
-import flatbuffers
-
-class TableInFirstNS(object):
-    __slots__ = ['_tab']
-
-    @classmethod
-    def GetRootAsTableInFirstNS(cls, buf, offset):
-        n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
-        x = TableInFirstNS()
-        x.Init(buf, n + offset)
-        return x
-
-    # TableInFirstNS
-    def Init(self, buf, pos):
-        self._tab = flatbuffers.table.Table(buf, pos)
-
-    # TableInFirstNS
-    def FooTable(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
-        if o != 0:
-            x = self._tab.Indirect(o + self._tab.Pos)
-            from .TableInNestedNS import TableInNestedNS
-            obj = TableInNestedNS()
-            obj.Init(self._tab.Bytes, x)
-            return obj
-        return None
-
-    # TableInFirstNS
-    def FooEnum(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
-        if o != 0:
-            return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos)
-        return 0
-
-    # TableInFirstNS
-    def FooStruct(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
-        if o != 0:
-            x = o + self._tab.Pos
-            from .StructInNestedNS import StructInNestedNS
-            obj = StructInNestedNS()
-            obj.Init(self._tab.Bytes, x)
-            return obj
-        return None
-
-def TableInFirstNSStart(builder): builder.StartObject(3)
-def TableInFirstNSAddFooTable(builder, fooTable): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(fooTable), 0)
-def TableInFirstNSAddFooEnum(builder, fooEnum): builder.PrependInt8Slot(1, fooEnum, 0)
-def TableInFirstNSAddFooStruct(builder, fooStruct): builder.PrependStructSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(fooStruct), 0)
-def TableInFirstNSEnd(builder): return builder.EndObject()
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceA/__init__.py b/third_party/flatbuffers/tests/namespace_test/NamespaceA/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceA/__init__.py
+++ /dev/null
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceC/TableInC.cs b/third_party/flatbuffers/tests/namespace_test/NamespaceC/TableInC.cs
deleted file mode 100644
index c7f2c8a..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceC/TableInC.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace NamespaceC
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct TableInC : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static TableInC GetRootAsTableInC(ByteBuffer _bb) { return GetRootAsTableInC(_bb, new TableInC()); }
-  public static TableInC GetRootAsTableInC(ByteBuffer _bb, TableInC obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public TableInC __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public NamespaceA.TableInFirstNS? ReferToA1 { get { int o = __p.__offset(4); return o != 0 ? (NamespaceA.TableInFirstNS?)(new NamespaceA.TableInFirstNS()).__assign(__p.__indirect(o + __p.bb_pos), __p.bb) : null; } }
-  public NamespaceA.SecondTableInA? ReferToA2 { get { int o = __p.__offset(6); return o != 0 ? (NamespaceA.SecondTableInA?)(new NamespaceA.SecondTableInA()).__assign(__p.__indirect(o + __p.bb_pos), __p.bb) : null; } }
-
-  public static Offset<TableInC> CreateTableInC(FlatBufferBuilder builder,
-      Offset<NamespaceA.TableInFirstNS> refer_to_a1Offset = default(Offset<NamespaceA.TableInFirstNS>),
-      Offset<NamespaceA.SecondTableInA> refer_to_a2Offset = default(Offset<NamespaceA.SecondTableInA>)) {
-    builder.StartObject(2);
-    TableInC.AddReferToA2(builder, refer_to_a2Offset);
-    TableInC.AddReferToA1(builder, refer_to_a1Offset);
-    return TableInC.EndTableInC(builder);
-  }
-
-  public static void StartTableInC(FlatBufferBuilder builder) { builder.StartObject(2); }
-  public static void AddReferToA1(FlatBufferBuilder builder, Offset<NamespaceA.TableInFirstNS> referToA1Offset) { builder.AddOffset(0, referToA1Offset.Value, 0); }
-  public static void AddReferToA2(FlatBufferBuilder builder, Offset<NamespaceA.SecondTableInA> referToA2Offset) { builder.AddOffset(1, referToA2Offset.Value, 0); }
-  public static Offset<TableInC> EndTableInC(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<TableInC>(o);
-  }
-};
-
-
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceC/TableInC.go b/third_party/flatbuffers/tests/namespace_test/NamespaceC/TableInC.go
deleted file mode 100644
index 7e6c733..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceC/TableInC.go
+++ /dev/null
@@ -1,66 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package NamespaceC
-
-import (
-	flatbuffers "github.com/google/flatbuffers/go"
-)
-
-type TableInC struct {
-	_tab flatbuffers.Table
-}
-
-func GetRootAsTableInC(buf []byte, offset flatbuffers.UOffsetT) *TableInC {
-	n := flatbuffers.GetUOffsetT(buf[offset:])
-	x := &TableInC{}
-	x.Init(buf, n+offset)
-	return x
-}
-
-func (rcv *TableInC) Init(buf []byte, i flatbuffers.UOffsetT) {
-	rcv._tab.Bytes = buf
-	rcv._tab.Pos = i
-}
-
-func (rcv *TableInC) Table() flatbuffers.Table {
-	return rcv._tab
-}
-
-func (rcv *TableInC) ReferToA1(obj *TableInFirstNS) *TableInFirstNS {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(4))
-	if o != 0 {
-		x := rcv._tab.Indirect(o + rcv._tab.Pos)
-		if obj == nil {
-			obj = new(TableInFirstNS)
-		}
-		obj.Init(rcv._tab.Bytes, x)
-		return obj
-	}
-	return nil
-}
-
-func (rcv *TableInC) ReferToA2(obj *SecondTableInA) *SecondTableInA {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(6))
-	if o != 0 {
-		x := rcv._tab.Indirect(o + rcv._tab.Pos)
-		if obj == nil {
-			obj = new(SecondTableInA)
-		}
-		obj.Init(rcv._tab.Bytes, x)
-		return obj
-	}
-	return nil
-}
-
-func TableInCStart(builder *flatbuffers.Builder) {
-	builder.StartObject(2)
-}
-func TableInCAddReferToA1(builder *flatbuffers.Builder, referToA1 flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(0, flatbuffers.UOffsetT(referToA1), 0)
-}
-func TableInCAddReferToA2(builder *flatbuffers.Builder, referToA2 flatbuffers.UOffsetT) {
-	builder.PrependUOffsetTSlot(1, flatbuffers.UOffsetT(referToA2), 0)
-}
-func TableInCEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
-	return builder.EndObject()
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceC/TableInC.java b/third_party/flatbuffers/tests/namespace_test/NamespaceC/TableInC.java
deleted file mode 100644
index 56d4954..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceC/TableInC.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-package NamespaceC;
-
-import java.nio.*;
-import java.lang.*;
-import java.util.*;
-import com.google.flatbuffers.*;
-
-@SuppressWarnings("unused")
-public final class TableInC extends Table {
-  public static TableInC getRootAsTableInC(ByteBuffer _bb) { return getRootAsTableInC(_bb, new TableInC()); }
-  public static TableInC getRootAsTableInC(ByteBuffer _bb, TableInC obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; }
-  public TableInC __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public NamespaceA.TableInFirstNS referToA1() { return referToA1(new NamespaceA.TableInFirstNS()); }
-  public NamespaceA.TableInFirstNS referToA1(NamespaceA.TableInFirstNS obj) { int o = __offset(4); return o != 0 ? obj.__assign(__indirect(o + bb_pos), bb) : null; }
-  public NamespaceA.SecondTableInA referToA2() { return referToA2(new NamespaceA.SecondTableInA()); }
-  public NamespaceA.SecondTableInA referToA2(NamespaceA.SecondTableInA obj) { int o = __offset(6); return o != 0 ? obj.__assign(__indirect(o + bb_pos), bb) : null; }
-
-  public static int createTableInC(FlatBufferBuilder builder,
-      int refer_to_a1Offset,
-      int refer_to_a2Offset) {
-    builder.startObject(2);
-    TableInC.addReferToA2(builder, refer_to_a2Offset);
-    TableInC.addReferToA1(builder, refer_to_a1Offset);
-    return TableInC.endTableInC(builder);
-  }
-
-  public static void startTableInC(FlatBufferBuilder builder) { builder.startObject(2); }
-  public static void addReferToA1(FlatBufferBuilder builder, int referToA1Offset) { builder.addOffset(0, referToA1Offset, 0); }
-  public static void addReferToA2(FlatBufferBuilder builder, int referToA2Offset) { builder.addOffset(1, referToA2Offset, 0); }
-  public static int endTableInC(FlatBufferBuilder builder) {
-    int o = builder.endObject();
-    return o;
-  }
-}
-
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceC/TableInC.php b/third_party/flatbuffers/tests/namespace_test/NamespaceC/TableInC.php
deleted file mode 100644
index 116aea1..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceC/TableInC.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-// automatically generated by the FlatBuffers compiler, do not modify
-
-namespace NamespaceC;
-
-use \Google\FlatBuffers\Struct;
-use \Google\FlatBuffers\Table;
-use \Google\FlatBuffers\ByteBuffer;
-use \Google\FlatBuffers\FlatBufferBuilder;
-
-class TableInC extends Table
-{
-    /**
-     * @param ByteBuffer $bb
-     * @return TableInC
-     */
-    public static function getRootAsTableInC(ByteBuffer $bb)
-    {
-        $obj = new TableInC();
-        return ($obj->init($bb->getInt($bb->getPosition()) + $bb->getPosition(), $bb));
-    }
-
-    /**
-     * @param int $_i offset
-     * @param ByteBuffer $_bb
-     * @return TableInC
-     **/
-    public function init($_i, ByteBuffer $_bb)
-    {
-        $this->bb_pos = $_i;
-        $this->bb = $_bb;
-        return $this;
-    }
-
-    public function getReferToA1()
-    {
-        $obj = new TableInFirstNS();
-        $o = $this->__offset(4);
-        return $o != 0 ? $obj->init($this->__indirect($o + $this->bb_pos), $this->bb) : 0;
-    }
-
-    public function getReferToA2()
-    {
-        $obj = new SecondTableInA();
-        $o = $this->__offset(6);
-        return $o != 0 ? $obj->init($this->__indirect($o + $this->bb_pos), $this->bb) : 0;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return void
-     */
-    public static function startTableInC(FlatBufferBuilder $builder)
-    {
-        $builder->StartObject(2);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return TableInC
-     */
-    public static function createTableInC(FlatBufferBuilder $builder, $refer_to_a1, $refer_to_a2)
-    {
-        $builder->startObject(2);
-        self::addReferToA1($builder, $refer_to_a1);
-        self::addReferToA2($builder, $refer_to_a2);
-        $o = $builder->endObject();
-        return $o;
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int
-     * @return void
-     */
-    public static function addReferToA1(FlatBufferBuilder $builder, $referToA1)
-    {
-        $builder->addOffsetX(0, $referToA1, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @param int
-     * @return void
-     */
-    public static function addReferToA2(FlatBufferBuilder $builder, $referToA2)
-    {
-        $builder->addOffsetX(1, $referToA2, 0);
-    }
-
-    /**
-     * @param FlatBufferBuilder $builder
-     * @return int table offset
-     */
-    public static function endTableInC(FlatBufferBuilder $builder)
-    {
-        $o = $builder->endObject();
-        return $o;
-    }
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/NamespaceC/TableInC.py b/third_party/flatbuffers/tests/namespace_test/NamespaceC/TableInC.py
deleted file mode 100644
index 90b8736..0000000
--- a/third_party/flatbuffers/tests/namespace_test/NamespaceC/TableInC.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# automatically generated by the FlatBuffers compiler, do not modify
-
-# namespace: NamespaceC
-
-import flatbuffers
-
-class TableInC(object):
-    __slots__ = ['_tab']
-
-    @classmethod
-    def GetRootAsTableInC(cls, buf, offset):
-        n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
-        x = TableInC()
-        x.Init(buf, n + offset)
-        return x
-
-    # TableInC
-    def Init(self, buf, pos):
-        self._tab = flatbuffers.table.Table(buf, pos)
-
-    # TableInC
-    def ReferToA1(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
-        if o != 0:
-            x = self._tab.Indirect(o + self._tab.Pos)
-            from .TableInFirstNS import TableInFirstNS
-            obj = TableInFirstNS()
-            obj.Init(self._tab.Bytes, x)
-            return obj
-        return None
-
-    # TableInC
-    def ReferToA2(self):
-        o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
-        if o != 0:
-            x = self._tab.Indirect(o + self._tab.Pos)
-            from .SecondTableInA import SecondTableInA
-            obj = SecondTableInA()
-            obj.Init(self._tab.Bytes, x)
-            return obj
-        return None
-
-def TableInCStart(builder): builder.StartObject(2)
-def TableInCAddReferToA1(builder, referToA1): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(referToA1), 0)
-def TableInCAddReferToA2(builder, referToA2): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(referToA2), 0)
-def TableInCEnd(builder): return builder.EndObject()
diff --git a/third_party/flatbuffers/tests/namespace_test/namespace_test1.fbs b/third_party/flatbuffers/tests/namespace_test/namespace_test1.fbs
deleted file mode 100644
index 49449bf..0000000
--- a/third_party/flatbuffers/tests/namespace_test/namespace_test1.fbs
+++ /dev/null
@@ -1,17 +0,0 @@
-namespace NamespaceA.NamespaceB;
-
-table TableInNestedNS
-{
-    foo:int;
-}
-
-enum EnumInNestedNS:byte
-{
-	A, B, C
-}
-
-struct StructInNestedNS
-{
-    a:int;
-	b:int;
-}
\ No newline at end of file
diff --git a/third_party/flatbuffers/tests/namespace_test/namespace_test1_generated.h b/third_party/flatbuffers/tests/namespace_test/namespace_test1_generated.h
deleted file mode 100644
index 2a71fbc..0000000
--- a/third_party/flatbuffers/tests/namespace_test/namespace_test1_generated.h
+++ /dev/null
@@ -1,116 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-
-#ifndef FLATBUFFERS_GENERATED_NAMESPACETEST1_NAMESPACEA_NAMESPACEB_H_
-#define FLATBUFFERS_GENERATED_NAMESPACETEST1_NAMESPACEA_NAMESPACEB_H_
-
-#include "flatbuffers/flatbuffers.h"
-
-namespace NamespaceA {
-namespace NamespaceB {
-
-struct TableInNestedNS;
-
-struct StructInNestedNS;
-
-enum EnumInNestedNS {
-  EnumInNestedNS_A = 0,
-  EnumInNestedNS_B = 1,
-  EnumInNestedNS_C = 2,
-  EnumInNestedNS_MIN = EnumInNestedNS_A,
-  EnumInNestedNS_MAX = EnumInNestedNS_C
-};
-
-inline const char **EnumNamesEnumInNestedNS() {
-  static const char *names[] = {
-    "A",
-    "B",
-    "C",
-    nullptr
-  };
-  return names;
-}
-
-inline const char *EnumNameEnumInNestedNS(EnumInNestedNS e) {
-  const size_t index = static_cast<int>(e);
-  return EnumNamesEnumInNestedNS()[index];
-}
-
-MANUALLY_ALIGNED_STRUCT(4) StructInNestedNS FLATBUFFERS_FINAL_CLASS {
- private:
-  int32_t a_;
-  int32_t b_;
-
- public:
-  StructInNestedNS() {
-    memset(this, 0, sizeof(StructInNestedNS));
-  }
-  StructInNestedNS(const StructInNestedNS &_o) {
-    memcpy(this, &_o, sizeof(StructInNestedNS));
-  }
-  StructInNestedNS(int32_t _a, int32_t _b)
-      : a_(flatbuffers::EndianScalar(_a)),
-        b_(flatbuffers::EndianScalar(_b)) {
-  }
-  int32_t a() const {
-    return flatbuffers::EndianScalar(a_);
-  }
-  void mutate_a(int32_t _a) {
-    flatbuffers::WriteScalar(&a_, _a);
-  }
-  int32_t b() const {
-    return flatbuffers::EndianScalar(b_);
-  }
-  void mutate_b(int32_t _b) {
-    flatbuffers::WriteScalar(&b_, _b);
-  }
-};
-STRUCT_END(StructInNestedNS, 8);
-
-struct TableInNestedNS FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_FOO = 4
-  };
-  int32_t foo() const {
-    return GetField<int32_t>(VT_FOO, 0);
-  }
-  bool mutate_foo(int32_t _foo) {
-    return SetField<int32_t>(VT_FOO, _foo, 0);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyField<int32_t>(verifier, VT_FOO) &&
-           verifier.EndTable();
-  }
-};
-
-struct TableInNestedNSBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_foo(int32_t foo) {
-    fbb_.AddElement<int32_t>(TableInNestedNS::VT_FOO, foo, 0);
-  }
-  TableInNestedNSBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  TableInNestedNSBuilder &operator=(const TableInNestedNSBuilder &);
-  flatbuffers::Offset<TableInNestedNS> Finish() {
-    const auto end = fbb_.EndTable(start_, 1);
-    auto o = flatbuffers::Offset<TableInNestedNS>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<TableInNestedNS> CreateTableInNestedNS(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    int32_t foo = 0) {
-  TableInNestedNSBuilder builder_(_fbb);
-  builder_.add_foo(foo);
-  return builder_.Finish();
-}
-
-}  // namespace NamespaceB
-}  // namespace NamespaceA
-
-#endif  // FLATBUFFERS_GENERATED_NAMESPACETEST1_NAMESPACEA_NAMESPACEB_H_
diff --git a/third_party/flatbuffers/tests/namespace_test/namespace_test1_generated.js b/third_party/flatbuffers/tests/namespace_test/namespace_test1_generated.js
deleted file mode 100644
index 7551a18..0000000
--- a/third_party/flatbuffers/tests/namespace_test/namespace_test1_generated.js
+++ /dev/null
@@ -1,190 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-/**
- * @const
- * @namespace
- */
-var NamespaceA = NamespaceA || {};
-
-/**
- * @const
- * @namespace
- */
-NamespaceA.NamespaceB = NamespaceA.NamespaceB || {};
-
-/**
- * @enum
- */
-NamespaceA.NamespaceB.EnumInNestedNS = {
-  A: 0,
-  B: 1,
-  C: 2
-};
-
-/**
- * @constructor
- */
-NamespaceA.NamespaceB.TableInNestedNS = function() {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  this.bb = null;
-
-  /**
-   * @type {number}
-   */
-  this.bb_pos = 0;
-};
-
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {NamespaceA.NamespaceB.TableInNestedNS}
- */
-NamespaceA.NamespaceB.TableInNestedNS.prototype.__init = function(i, bb) {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {NamespaceA.NamespaceB.TableInNestedNS=} obj
- * @returns {NamespaceA.NamespaceB.TableInNestedNS}
- */
-NamespaceA.NamespaceB.TableInNestedNS.getRootAsTableInNestedNS = function(bb, obj) {
-  return (obj || new NamespaceA.NamespaceB.TableInNestedNS).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @returns {number}
- */
-NamespaceA.NamespaceB.TableInNestedNS.prototype.foo = function() {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-  return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-NamespaceA.NamespaceB.TableInNestedNS.prototype.mutate_foo = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-NamespaceA.NamespaceB.TableInNestedNS.startTableInNestedNS = function(builder) {
-  builder.startObject(1);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} foo
- */
-NamespaceA.NamespaceB.TableInNestedNS.addFoo = function(builder, foo) {
-  builder.addFieldInt32(0, foo, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-NamespaceA.NamespaceB.TableInNestedNS.endTableInNestedNS = function(builder) {
-  var offset = builder.endObject();
-  return offset;
-};
-
-/**
- * @constructor
- */
-NamespaceA.NamespaceB.StructInNestedNS = function() {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  this.bb = null;
-
-  /**
-   * @type {number}
-   */
-  this.bb_pos = 0;
-};
-
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {NamespaceA.NamespaceB.StructInNestedNS}
- */
-NamespaceA.NamespaceB.StructInNestedNS.prototype.__init = function(i, bb) {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @returns {number}
- */
-NamespaceA.NamespaceB.StructInNestedNS.prototype.a = function() {
-  return this.bb.readInt32(this.bb_pos);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-NamespaceA.NamespaceB.StructInNestedNS.prototype.mutate_a = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 0);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-NamespaceA.NamespaceB.StructInNestedNS.prototype.b = function() {
-  return this.bb.readInt32(this.bb_pos + 4);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-NamespaceA.NamespaceB.StructInNestedNS.prototype.mutate_b = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} a
- * @param {number} b
- * @returns {flatbuffers.Offset}
- */
-NamespaceA.NamespaceB.StructInNestedNS.createStructInNestedNS = function(builder, a, b) {
-  builder.prep(4, 8);
-  builder.writeInt32(b);
-  builder.writeInt32(a);
-  return builder.offset();
-};
-
-// Exports for Node.js and RequireJS
-this.NamespaceA = NamespaceA;
diff --git a/third_party/flatbuffers/tests/namespace_test/namespace_test1_generated.ts b/third_party/flatbuffers/tests/namespace_test/namespace_test1_generated.ts
deleted file mode 100644
index 42a1a69..0000000
--- a/third_party/flatbuffers/tests/namespace_test/namespace_test1_generated.ts
+++ /dev/null
@@ -1,179 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-/**
- * @enum
- */
-export namespace NamespaceA.NamespaceB{
-export enum EnumInNestedNS{
-  A= 0,
-  B= 1,
-  C= 2
-}};
-
-/**
- * @constructor
- */
-export namespace NamespaceA.NamespaceB{
-export class TableInNestedNS {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  bb: flatbuffers.ByteBuffer= null;
-
-  /**
-   * @type {number}
-   */
-  bb_pos:number = 0;
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {TableInNestedNS}
- */
-__init(i:number, bb:flatbuffers.ByteBuffer):TableInNestedNS {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {TableInNestedNS=} obj
- * @returns {TableInNestedNS}
- */
-static getRootAsTableInNestedNS(bb:flatbuffers.ByteBuffer, obj?:TableInNestedNS):TableInNestedNS {
-  return (obj || new TableInNestedNS).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @returns {number}
- */
-foo():number {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-  return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_foo(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-static startTableInNestedNS(builder:flatbuffers.Builder) {
-  builder.startObject(1);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} foo
- */
-static addFoo(builder:flatbuffers.Builder, foo:number) {
-  builder.addFieldInt32(0, foo, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-static endTableInNestedNS(builder:flatbuffers.Builder):flatbuffers.Offset {
-  var offset = builder.endObject();
-  return offset;
-};
-
-}
-}
-/**
- * @constructor
- */
-export namespace NamespaceA.NamespaceB{
-export class StructInNestedNS {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  bb: flatbuffers.ByteBuffer= null;
-
-  /**
-   * @type {number}
-   */
-  bb_pos:number = 0;
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {StructInNestedNS}
- */
-__init(i:number, bb:flatbuffers.ByteBuffer):StructInNestedNS {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @returns {number}
- */
-a():number {
-  return this.bb.readInt32(this.bb_pos);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_a(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 0);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @returns {number}
- */
-b():number {
-  return this.bb.readInt32(this.bb_pos + 4);
-};
-
-/**
- * @param {number} value
- * @returns {boolean}
- */
-mutate_b(value:number):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt32(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {number} a
- * @param {number} b
- * @returns {flatbuffers.Offset}
- */
-static createStructInNestedNS(builder:flatbuffers.Builder, a: number, b: number):flatbuffers.Offset {
-  builder.prep(4, 8);
-  builder.writeInt32(b);
-  builder.writeInt32(a);
-  return builder.offset();
-};
-
-}
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/namespace_test2.fbs b/third_party/flatbuffers/tests/namespace_test/namespace_test2.fbs
deleted file mode 100644
index 11d7dea..0000000
--- a/third_party/flatbuffers/tests/namespace_test/namespace_test2.fbs
+++ /dev/null
@@ -1,24 +0,0 @@
-include "namespace_test1.fbs";
-
-namespace NamespaceA;
-
-table TableInFirstNS
-{
-    foo_table:NamespaceB.TableInNestedNS;
-	foo_enum:NamespaceB.EnumInNestedNS;
-	foo_struct:NamespaceB.StructInNestedNS;
-}
-
-// Test switching namespaces inside a file.
-namespace NamespaceC;
-
-table TableInC {
-    refer_to_a1:NamespaceA.TableInFirstNS;
-    refer_to_a2:NamespaceA.SecondTableInA;
-}
-
-namespace NamespaceA;
-
-table SecondTableInA {
-    refer_to_c:NamespaceC.TableInC;
-}
diff --git a/third_party/flatbuffers/tests/namespace_test/namespace_test2_generated.h b/third_party/flatbuffers/tests/namespace_test/namespace_test2_generated.h
deleted file mode 100644
index 4e2a622..0000000
--- a/third_party/flatbuffers/tests/namespace_test/namespace_test2_generated.h
+++ /dev/null
@@ -1,217 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-
-#ifndef FLATBUFFERS_GENERATED_NAMESPACETEST2_NAMESPACEA_H_
-#define FLATBUFFERS_GENERATED_NAMESPACETEST2_NAMESPACEA_H_
-
-#include "flatbuffers/flatbuffers.h"
-
-#include "namespace_test1_generated.h"
-
-namespace NamespaceA {
-
-struct TableInFirstNS;
-
-}  // namespace NamespaceA
-
-namespace NamespaceC {
-
-struct TableInC;
-
-}  // namespace NamespaceC
-
-namespace NamespaceA {
-
-struct SecondTableInA;
-
-struct TableInFirstNS FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_FOO_TABLE = 4,
-    VT_FOO_ENUM = 6,
-    VT_FOO_STRUCT = 8
-  };
-  const NamespaceA::NamespaceB::TableInNestedNS *foo_table() const {
-    return GetPointer<const NamespaceA::NamespaceB::TableInNestedNS *>(VT_FOO_TABLE);
-  }
-  NamespaceA::NamespaceB::TableInNestedNS *mutable_foo_table() {
-    return GetPointer<NamespaceA::NamespaceB::TableInNestedNS *>(VT_FOO_TABLE);
-  }
-  NamespaceA::NamespaceB::EnumInNestedNS foo_enum() const {
-    return static_cast<NamespaceA::NamespaceB::EnumInNestedNS>(GetField<int8_t>(VT_FOO_ENUM, 0));
-  }
-  bool mutate_foo_enum(NamespaceA::NamespaceB::EnumInNestedNS _foo_enum) {
-    return SetField<int8_t>(VT_FOO_ENUM, static_cast<int8_t>(_foo_enum), 0);
-  }
-  const NamespaceA::NamespaceB::StructInNestedNS *foo_struct() const {
-    return GetStruct<const NamespaceA::NamespaceB::StructInNestedNS *>(VT_FOO_STRUCT);
-  }
-  NamespaceA::NamespaceB::StructInNestedNS *mutable_foo_struct() {
-    return GetStruct<NamespaceA::NamespaceB::StructInNestedNS *>(VT_FOO_STRUCT);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_FOO_TABLE) &&
-           verifier.VerifyTable(foo_table()) &&
-           VerifyField<int8_t>(verifier, VT_FOO_ENUM) &&
-           VerifyField<NamespaceA::NamespaceB::StructInNestedNS>(verifier, VT_FOO_STRUCT) &&
-           verifier.EndTable();
-  }
-};
-
-struct TableInFirstNSBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_foo_table(flatbuffers::Offset<NamespaceA::NamespaceB::TableInNestedNS> foo_table) {
-    fbb_.AddOffset(TableInFirstNS::VT_FOO_TABLE, foo_table);
-  }
-  void add_foo_enum(NamespaceA::NamespaceB::EnumInNestedNS foo_enum) {
-    fbb_.AddElement<int8_t>(TableInFirstNS::VT_FOO_ENUM, static_cast<int8_t>(foo_enum), 0);
-  }
-  void add_foo_struct(const NamespaceA::NamespaceB::StructInNestedNS *foo_struct) {
-    fbb_.AddStruct(TableInFirstNS::VT_FOO_STRUCT, foo_struct);
-  }
-  TableInFirstNSBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  TableInFirstNSBuilder &operator=(const TableInFirstNSBuilder &);
-  flatbuffers::Offset<TableInFirstNS> Finish() {
-    const auto end = fbb_.EndTable(start_, 3);
-    auto o = flatbuffers::Offset<TableInFirstNS>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<TableInFirstNS> CreateTableInFirstNS(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<NamespaceA::NamespaceB::TableInNestedNS> foo_table = 0,
-    NamespaceA::NamespaceB::EnumInNestedNS foo_enum = NamespaceA::NamespaceB::EnumInNestedNS_A,
-    const NamespaceA::NamespaceB::StructInNestedNS *foo_struct = 0) {
-  TableInFirstNSBuilder builder_(_fbb);
-  builder_.add_foo_struct(foo_struct);
-  builder_.add_foo_table(foo_table);
-  builder_.add_foo_enum(foo_enum);
-  return builder_.Finish();
-}
-
-}  // namespace NamespaceA
-
-namespace NamespaceC {
-
-struct TableInC FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_REFER_TO_A1 = 4,
-    VT_REFER_TO_A2 = 6
-  };
-  const NamespaceA::TableInFirstNS *refer_to_a1() const {
-    return GetPointer<const NamespaceA::TableInFirstNS *>(VT_REFER_TO_A1);
-  }
-  NamespaceA::TableInFirstNS *mutable_refer_to_a1() {
-    return GetPointer<NamespaceA::TableInFirstNS *>(VT_REFER_TO_A1);
-  }
-  const NamespaceA::SecondTableInA *refer_to_a2() const {
-    return GetPointer<const NamespaceA::SecondTableInA *>(VT_REFER_TO_A2);
-  }
-  NamespaceA::SecondTableInA *mutable_refer_to_a2() {
-    return GetPointer<NamespaceA::SecondTableInA *>(VT_REFER_TO_A2);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_REFER_TO_A1) &&
-           verifier.VerifyTable(refer_to_a1()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_REFER_TO_A2) &&
-           verifier.VerifyTable(refer_to_a2()) &&
-           verifier.EndTable();
-  }
-};
-
-struct TableInCBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_refer_to_a1(flatbuffers::Offset<NamespaceA::TableInFirstNS> refer_to_a1) {
-    fbb_.AddOffset(TableInC::VT_REFER_TO_A1, refer_to_a1);
-  }
-  void add_refer_to_a2(flatbuffers::Offset<NamespaceA::SecondTableInA> refer_to_a2) {
-    fbb_.AddOffset(TableInC::VT_REFER_TO_A2, refer_to_a2);
-  }
-  TableInCBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  TableInCBuilder &operator=(const TableInCBuilder &);
-  flatbuffers::Offset<TableInC> Finish() {
-    const auto end = fbb_.EndTable(start_, 2);
-    auto o = flatbuffers::Offset<TableInC>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<TableInC> CreateTableInC(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<NamespaceA::TableInFirstNS> refer_to_a1 = 0,
-    flatbuffers::Offset<NamespaceA::SecondTableInA> refer_to_a2 = 0) {
-  TableInCBuilder builder_(_fbb);
-  builder_.add_refer_to_a2(refer_to_a2);
-  builder_.add_refer_to_a1(refer_to_a1);
-  return builder_.Finish();
-}
-
-}  // namespace NamespaceC
-
-namespace NamespaceA {
-
-struct SecondTableInA FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_REFER_TO_C = 4
-  };
-  const NamespaceC::TableInC *refer_to_c() const {
-    return GetPointer<const NamespaceC::TableInC *>(VT_REFER_TO_C);
-  }
-  NamespaceC::TableInC *mutable_refer_to_c() {
-    return GetPointer<NamespaceC::TableInC *>(VT_REFER_TO_C);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_REFER_TO_C) &&
-           verifier.VerifyTable(refer_to_c()) &&
-           verifier.EndTable();
-  }
-};
-
-struct SecondTableInABuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_refer_to_c(flatbuffers::Offset<NamespaceC::TableInC> refer_to_c) {
-    fbb_.AddOffset(SecondTableInA::VT_REFER_TO_C, refer_to_c);
-  }
-  SecondTableInABuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  SecondTableInABuilder &operator=(const SecondTableInABuilder &);
-  flatbuffers::Offset<SecondTableInA> Finish() {
-    const auto end = fbb_.EndTable(start_, 1);
-    auto o = flatbuffers::Offset<SecondTableInA>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<SecondTableInA> CreateSecondTableInA(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<NamespaceC::TableInC> refer_to_c = 0) {
-  SecondTableInABuilder builder_(_fbb);
-  builder_.add_refer_to_c(refer_to_c);
-  return builder_.Finish();
-}
-
-}  // namespace NamespaceA
-
-namespace NamespaceC {
-
-}  // namespace NamespaceC
-
-namespace NamespaceA {
-
-}  // namespace NamespaceA
-
-#endif  // FLATBUFFERS_GENERATED_NAMESPACETEST2_NAMESPACEA_H_
diff --git a/third_party/flatbuffers/tests/namespace_test/namespace_test2_generated.js b/third_party/flatbuffers/tests/namespace_test/namespace_test2_generated.js
deleted file mode 100644
index c1c25ef..0000000
--- a/third_party/flatbuffers/tests/namespace_test/namespace_test2_generated.js
+++ /dev/null
@@ -1,292 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-/**
- * @const
- * @namespace
- */
-var NamespaceA = NamespaceA || {};
-
-/**
- * @const
- * @namespace
- */
-NamespaceA.NamespaceB = NamespaceA.NamespaceB || {};
-
-/**
- * @const
- * @namespace
- */
-var NamespaceC = NamespaceC || {};
-
-/**
- * @constructor
- */
-NamespaceA.TableInFirstNS = function() {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  this.bb = null;
-
-  /**
-   * @type {number}
-   */
-  this.bb_pos = 0;
-};
-
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {NamespaceA.TableInFirstNS}
- */
-NamespaceA.TableInFirstNS.prototype.__init = function(i, bb) {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {NamespaceA.TableInFirstNS=} obj
- * @returns {NamespaceA.TableInFirstNS}
- */
-NamespaceA.TableInFirstNS.getRootAsTableInFirstNS = function(bb, obj) {
-  return (obj || new NamespaceA.TableInFirstNS).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @param {NamespaceA.NamespaceB.TableInNestedNS=} obj
- * @returns {NamespaceA.NamespaceB.TableInNestedNS}
- */
-NamespaceA.TableInFirstNS.prototype.fooTable = function(obj) {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-  return offset ? (obj || new NamespaceA.NamespaceB.TableInNestedNS).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;
-};
-
-/**
- * @returns {NamespaceA.NamespaceB.EnumInNestedNS}
- */
-NamespaceA.TableInFirstNS.prototype.fooEnum = function() {
-  var offset = this.bb.__offset(this.bb_pos, 6);
-  return offset ? /** @type {NamespaceA.NamespaceB.EnumInNestedNS} */ (this.bb.readInt8(this.bb_pos + offset)) : NamespaceA.NamespaceB.EnumInNestedNS.A;
-};
-
-/**
- * @param {NamespaceA.NamespaceB.EnumInNestedNS} value
- * @returns {boolean}
- */
-NamespaceA.TableInFirstNS.prototype.mutate_foo_enum = function(value) {
-  var offset = this.bb.__offset(this.bb_pos, 6);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt8(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {NamespaceA.NamespaceB.StructInNestedNS=} obj
- * @returns {NamespaceA.NamespaceB.StructInNestedNS}
- */
-NamespaceA.TableInFirstNS.prototype.fooStruct = function(obj) {
-  var offset = this.bb.__offset(this.bb_pos, 8);
-  return offset ? (obj || new NamespaceA.NamespaceB.StructInNestedNS).__init(this.bb_pos + offset, this.bb) : null;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-NamespaceA.TableInFirstNS.startTableInFirstNS = function(builder) {
-  builder.startObject(3);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} fooTableOffset
- */
-NamespaceA.TableInFirstNS.addFooTable = function(builder, fooTableOffset) {
-  builder.addFieldOffset(0, fooTableOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {NamespaceA.NamespaceB.EnumInNestedNS} fooEnum
- */
-NamespaceA.TableInFirstNS.addFooEnum = function(builder, fooEnum) {
-  builder.addFieldInt8(1, fooEnum, NamespaceA.NamespaceB.EnumInNestedNS.A);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} fooStructOffset
- */
-NamespaceA.TableInFirstNS.addFooStruct = function(builder, fooStructOffset) {
-  builder.addFieldStruct(2, fooStructOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-NamespaceA.TableInFirstNS.endTableInFirstNS = function(builder) {
-  var offset = builder.endObject();
-  return offset;
-};
-
-/**
- * @constructor
- */
-NamespaceC.TableInC = function() {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  this.bb = null;
-
-  /**
-   * @type {number}
-   */
-  this.bb_pos = 0;
-};
-
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {NamespaceC.TableInC}
- */
-NamespaceC.TableInC.prototype.__init = function(i, bb) {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {NamespaceC.TableInC=} obj
- * @returns {NamespaceC.TableInC}
- */
-NamespaceC.TableInC.getRootAsTableInC = function(bb, obj) {
-  return (obj || new NamespaceC.TableInC).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @param {NamespaceA.TableInFirstNS=} obj
- * @returns {NamespaceA.TableInFirstNS}
- */
-NamespaceC.TableInC.prototype.referToA1 = function(obj) {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-  return offset ? (obj || new NamespaceA.TableInFirstNS).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;
-};
-
-/**
- * @param {NamespaceA.SecondTableInA=} obj
- * @returns {NamespaceA.SecondTableInA}
- */
-NamespaceC.TableInC.prototype.referToA2 = function(obj) {
-  var offset = this.bb.__offset(this.bb_pos, 6);
-  return offset ? (obj || new NamespaceA.SecondTableInA).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-NamespaceC.TableInC.startTableInC = function(builder) {
-  builder.startObject(2);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} referToA1Offset
- */
-NamespaceC.TableInC.addReferToA1 = function(builder, referToA1Offset) {
-  builder.addFieldOffset(0, referToA1Offset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} referToA2Offset
- */
-NamespaceC.TableInC.addReferToA2 = function(builder, referToA2Offset) {
-  builder.addFieldOffset(1, referToA2Offset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-NamespaceC.TableInC.endTableInC = function(builder) {
-  var offset = builder.endObject();
-  return offset;
-};
-
-/**
- * @constructor
- */
-NamespaceA.SecondTableInA = function() {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  this.bb = null;
-
-  /**
-   * @type {number}
-   */
-  this.bb_pos = 0;
-};
-
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {NamespaceA.SecondTableInA}
- */
-NamespaceA.SecondTableInA.prototype.__init = function(i, bb) {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {NamespaceA.SecondTableInA=} obj
- * @returns {NamespaceA.SecondTableInA}
- */
-NamespaceA.SecondTableInA.getRootAsSecondTableInA = function(bb, obj) {
-  return (obj || new NamespaceA.SecondTableInA).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @param {NamespaceC.TableInC=} obj
- * @returns {NamespaceC.TableInC}
- */
-NamespaceA.SecondTableInA.prototype.referToC = function(obj) {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-  return offset ? (obj || new NamespaceC.TableInC).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-NamespaceA.SecondTableInA.startSecondTableInA = function(builder) {
-  builder.startObject(1);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} referToCOffset
- */
-NamespaceA.SecondTableInA.addReferToC = function(builder, referToCOffset) {
-  builder.addFieldOffset(0, referToCOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-NamespaceA.SecondTableInA.endSecondTableInA = function(builder) {
-  var offset = builder.endObject();
-  return offset;
-};
-
-// Exports for Node.js and RequireJS
-this.NamespaceA = NamespaceA;
-this.NamespaceC = NamespaceC;
diff --git a/third_party/flatbuffers/tests/namespace_test/namespace_test2_generated.ts b/third_party/flatbuffers/tests/namespace_test/namespace_test2_generated.ts
deleted file mode 100644
index d08366b..0000000
--- a/third_party/flatbuffers/tests/namespace_test/namespace_test2_generated.ts
+++ /dev/null
@@ -1,275 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-import * as NS9459827973991502386 from "./namespace_test1_generated";
-/**
- * @constructor
- */
-export namespace NamespaceA{
-export class TableInFirstNS {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  bb: flatbuffers.ByteBuffer= null;
-
-  /**
-   * @type {number}
-   */
-  bb_pos:number = 0;
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {TableInFirstNS}
- */
-__init(i:number, bb:flatbuffers.ByteBuffer):TableInFirstNS {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {TableInFirstNS=} obj
- * @returns {TableInFirstNS}
- */
-static getRootAsTableInFirstNS(bb:flatbuffers.ByteBuffer, obj?:TableInFirstNS):TableInFirstNS {
-  return (obj || new TableInFirstNS).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @param {NamespaceA.NamespaceB.TableInNestedNS=} obj
- * @returns {NamespaceA.NamespaceB.TableInNestedNS}
- */
-fooTable(obj?:NS9459827973991502386.NamespaceA.NamespaceB.TableInNestedNS):NS9459827973991502386.NamespaceA.NamespaceB.TableInNestedNS {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-  return offset ? (obj || new NS9459827973991502386.NamespaceA.NamespaceB.TableInNestedNS).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;
-};
-
-/**
- * @returns {NamespaceA.NamespaceB.EnumInNestedNS}
- */
-fooEnum():NS9459827973991502386.NamespaceA.NamespaceB.EnumInNestedNS {
-  var offset = this.bb.__offset(this.bb_pos, 6);
-  return offset ? /** @type {NamespaceA.NamespaceB.EnumInNestedNS} */ (this.bb.readInt8(this.bb_pos + offset)) : NS9459827973991502386.NamespaceA.NamespaceB.EnumInNestedNS.A;
-};
-
-/**
- * @param {NamespaceA.NamespaceB.EnumInNestedNS} value
- * @returns {boolean}
- */
-mutate_foo_enum(value:NS9459827973991502386.NamespaceA.NamespaceB.EnumInNestedNS):boolean {
-  var offset = this.bb.__offset(this.bb_pos, 6);
-
-  if (offset === 0) {
-    return false;
-  }
-
-  this.bb.writeInt8(this.bb_pos + offset, value);
-  return true;
-};
-
-/**
- * @param {NamespaceA.NamespaceB.StructInNestedNS=} obj
- * @returns {NamespaceA.NamespaceB.StructInNestedNS}
- */
-fooStruct(obj?:NS9459827973991502386.NamespaceA.NamespaceB.StructInNestedNS):NS9459827973991502386.NamespaceA.NamespaceB.StructInNestedNS {
-  var offset = this.bb.__offset(this.bb_pos, 8);
-  return offset ? (obj || new NS9459827973991502386.NamespaceA.NamespaceB.StructInNestedNS).__init(this.bb_pos + offset, this.bb) : null;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-static startTableInFirstNS(builder:flatbuffers.Builder) {
-  builder.startObject(3);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} fooTableOffset
- */
-static addFooTable(builder:flatbuffers.Builder, fooTableOffset:flatbuffers.Offset) {
-  builder.addFieldOffset(0, fooTableOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {NamespaceA.NamespaceB.EnumInNestedNS} fooEnum
- */
-static addFooEnum(builder:flatbuffers.Builder, fooEnum:NS9459827973991502386.NamespaceA.NamespaceB.EnumInNestedNS) {
-  builder.addFieldInt8(1, fooEnum, NS9459827973991502386.NamespaceA.NamespaceB.EnumInNestedNS.A);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} fooStructOffset
- */
-static addFooStruct(builder:flatbuffers.Builder, fooStructOffset:flatbuffers.Offset) {
-  builder.addFieldStruct(2, fooStructOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-static endTableInFirstNS(builder:flatbuffers.Builder):flatbuffers.Offset {
-  var offset = builder.endObject();
-  return offset;
-};
-
-}
-}
-/**
- * @constructor
- */
-export namespace NamespaceC{
-export class TableInC {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  bb: flatbuffers.ByteBuffer= null;
-
-  /**
-   * @type {number}
-   */
-  bb_pos:number = 0;
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {TableInC}
- */
-__init(i:number, bb:flatbuffers.ByteBuffer):TableInC {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {TableInC=} obj
- * @returns {TableInC}
- */
-static getRootAsTableInC(bb:flatbuffers.ByteBuffer, obj?:TableInC):TableInC {
-  return (obj || new TableInC).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @param {NamespaceA.TableInFirstNS=} obj
- * @returns {NamespaceA.TableInFirstNS}
- */
-referToA1(obj?:NamespaceA.TableInFirstNS):NamespaceA.TableInFirstNS {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-  return offset ? (obj || new NamespaceA.TableInFirstNS).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;
-};
-
-/**
- * @param {NamespaceA.SecondTableInA=} obj
- * @returns {NamespaceA.SecondTableInA}
- */
-referToA2(obj?:NamespaceA.SecondTableInA):NamespaceA.SecondTableInA {
-  var offset = this.bb.__offset(this.bb_pos, 6);
-  return offset ? (obj || new NamespaceA.SecondTableInA).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-static startTableInC(builder:flatbuffers.Builder) {
-  builder.startObject(2);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} referToA1Offset
- */
-static addReferToA1(builder:flatbuffers.Builder, referToA1Offset:flatbuffers.Offset) {
-  builder.addFieldOffset(0, referToA1Offset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} referToA2Offset
- */
-static addReferToA2(builder:flatbuffers.Builder, referToA2Offset:flatbuffers.Offset) {
-  builder.addFieldOffset(1, referToA2Offset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-static endTableInC(builder:flatbuffers.Builder):flatbuffers.Offset {
-  var offset = builder.endObject();
-  return offset;
-};
-
-}
-}
-/**
- * @constructor
- */
-export namespace NamespaceA{
-export class SecondTableInA {
-  /**
-   * @type {flatbuffers.ByteBuffer}
-   */
-  bb: flatbuffers.ByteBuffer= null;
-
-  /**
-   * @type {number}
-   */
-  bb_pos:number = 0;
-/**
- * @param {number} i
- * @param {flatbuffers.ByteBuffer} bb
- * @returns {SecondTableInA}
- */
-__init(i:number, bb:flatbuffers.ByteBuffer):SecondTableInA {
-  this.bb_pos = i;
-  this.bb = bb;
-  return this;
-};
-
-/**
- * @param {flatbuffers.ByteBuffer} bb
- * @param {SecondTableInA=} obj
- * @returns {SecondTableInA}
- */
-static getRootAsSecondTableInA(bb:flatbuffers.ByteBuffer, obj?:SecondTableInA):SecondTableInA {
-  return (obj || new SecondTableInA).__init(bb.readInt32(bb.position()) + bb.position(), bb);
-};
-
-/**
- * @param {NamespaceC.TableInC=} obj
- * @returns {NamespaceC.TableInC}
- */
-referToC(obj?:NamespaceC.TableInC):NamespaceC.TableInC {
-  var offset = this.bb.__offset(this.bb_pos, 4);
-  return offset ? (obj || new NamespaceC.TableInC).__init(this.bb.__indirect(this.bb_pos + offset), this.bb) : null;
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- */
-static startSecondTableInA(builder:flatbuffers.Builder) {
-  builder.startObject(1);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @param {flatbuffers.Offset} referToCOffset
- */
-static addReferToC(builder:flatbuffers.Builder, referToCOffset:flatbuffers.Offset) {
-  builder.addFieldOffset(0, referToCOffset, 0);
-};
-
-/**
- * @param {flatbuffers.Builder} builder
- * @returns {flatbuffers.Offset}
- */
-static endSecondTableInA(builder:flatbuffers.Builder):flatbuffers.Offset {
-  var offset = builder.endObject();
-  return offset;
-};
-
-}
-}
diff --git a/third_party/flatbuffers/tests/phpTest.php b/third_party/flatbuffers/tests/phpTest.php
deleted file mode 100644
index 4dc83b2..0000000
--- a/third_party/flatbuffers/tests/phpTest.php
+++ /dev/null
@@ -1,632 +0,0 @@
-<?php
-// manual load for testing. please use PSR style autoloader when you use flatbuffers.
-require join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)), "php", "Constants.php"));
-require join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)), "php", "ByteBuffer.php"));
-require join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)), "php", "FlatbufferBuilder.php"));
-require join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)), "php", "Table.php"));
-require join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)), "php", "Struct.php"));
-foreach (glob(join(DIRECTORY_SEPARATOR, array(dirname(__FILE__), "MyGame", "Example", "*.php"))) as $file) {
-    require $file;
-}
-
-function main()
-{
-    /// Begin Test
-    $assert = new Assert();
-
-    // First, let's test reading a FlatBuffer generated by C++ code:
-    // This file was generated from monsterdata_test.json
-
-    // Now test it:
-    $data = file_get_contents('monsterdata_test.mon');
-    $bb = Google\FlatBuffers\ByteBuffer::wrap($data);
-    test_buffer($assert, $bb);
-
-    // Second, let's create a FlatBuffer from scratch in JavaScript, and test it also.
-    // We use an initial size of 1 to exercise the reallocation algorithm,
-    // normally a size larger than the typical FlatBuffer you generate would be
-    // better for performance.
-    $fbb = new Google\FlatBuffers\FlatBufferBuilder(1);
-
-    // We set up the same values as monsterdata.json:
-    $str = $fbb->createString("MyMonster");
-    $name = $fbb->createString('Fred');
-    \MyGame\Example\Monster::startMonster($fbb);
-    \MyGame\Example\Monster::addName($fbb, $name);
-    $enemy = \MyGame\Example\Monster::endMonster($fbb);
-
-    $inv = \MyGame\Example\Monster::CreateInventoryVector($fbb, array(0, 1, 2, 3, 4));
-
-    $fred = $fbb->createString('Fred');
-    \MyGame\Example\Monster::StartMonster($fbb);
-    \MyGame\Example\Monster::AddName($fbb, $fred);
-    $mon2 = \MyGame\Example\Monster::EndMonster($fbb);
-
-    \MyGame\Example\Monster::StartTest4Vector($fbb, 2);
-    \MyGame\Example\Test::CreateTest($fbb, 10, 20);
-    \MyGame\Example\Test::CreateTest($fbb, 30, 40);
-    $test4 = $fbb->endVector();
-
-    $testArrayOfString = \MyGame\Example\Monster::CreateTestarrayofstringVector($fbb, array(
-        $fbb->createString('test1'),
-        $fbb->createString('test2')
-    ));
-
-    \MyGame\Example\Monster::StartMonster($fbb);
-    \MyGame\Example\Monster::AddPos($fbb, \MyGame\Example\Vec3::CreateVec3($fbb,
-        1.0, 2.0, 3.0, //float
-        3.0, // double
-        \MyGame\Example\Color::Green,
-        5, //short
-        6));
-    \MyGame\Example\Monster::AddHp($fbb, 80);
-    \MyGame\Example\Monster::AddName($fbb, $str);
-    \MyGame\Example\Monster::AddInventory($fbb, $inv);
-    \MyGame\Example\Monster::AddTestType($fbb, \MyGame\Example\Any::Monster);
-    \MyGame\Example\Monster::AddTest($fbb, $mon2);
-    \MyGame\Example\Monster::AddTest4($fbb, $test4);
-    \MyGame\Example\Monster::AddTestarrayofstring($fbb, $testArrayOfString);
-    \MyGame\Example\Monster::AddEnemy($fbb, $enemy);
-    \MyGame\Example\Monster::AddTestbool($fbb, false);
-    $mon = \MyGame\Example\Monster::EndMonster($fbb);
-
-    \MyGame\Example\Monster::FinishMonsterBuffer($fbb, $mon);
-
-    // Test it:
-    test_buffer($assert, $fbb->dataBuffer());
-
-    testByteBuffer($assert);
-    fuzzTest1($assert);
-//    testUnicode($assert);
-
-    echo 'FlatBuffers php test: completed successfully' . PHP_EOL;
-}
-
-try {
-    main();
-    exit(0);
-} catch(Exception $e) {
-    printf("Fatal error: Uncaught exception '%s' with message '%s. in %s:%d\n", get_class($e), $e->getMessage(), $e->getFile(), $e->getLine());
-    printf("Stack trace:\n");
-    echo $e->getTraceAsString() . PHP_EOL;
-    printf("  thrown in in %s:%d\n", $e->getFile(), $e->getLine());
-
-    die(-1);
-}
-
-function test_buffer(Assert $assert, Google\FlatBuffers\ByteBuffer $bb) {
-
-    $assert->ok(MyGame\Example\Monster::MonsterBufferHasIdentifier($bb));
-    $monster = \MyGame\Example\Monster::GetRootAsMonster($bb);
-
-    $assert->strictEqual($monster->GetHp(), 80);
-    $assert->strictEqual($monster->GetMana(), 150); // default
-
-    $assert->strictEqual($monster->GetName(), 'MyMonster');
-
-    $pos = $monster->GetPos();
-    $assert->strictEqual($pos->GetX(), 1.0);
-    $assert->strictEqual($pos->GetY(), 2.0);
-    $assert->strictEqual($pos->GetZ(), 3.0);
-
-    $assert->Equal($pos->GetTest1(), 3.0);
-    $assert->strictEqual($pos->GetTest2(), \MyGame\Example\Color::Green);
-
-    $t = $pos->GetTest3();
-    $assert->strictEqual($t->GetA(), 5);
-    $assert->strictEqual($t->GetB(), 6);
-    $assert->strictEqual($monster->GetTestType(), \MyGame\Example\Any::Monster);
-
-    $monster2 = new \MyGame\Example\Monster();
-    $assert->strictEqual($monster->GetTest($monster2) != null, true);
-    $assert->strictEqual($monster2->GetName(), 'Fred');
-
-    $assert->strictEqual($monster->GetInventoryLength(), 5);
-    $invsum = 0;
-    for ($i = 0; $i < $monster->GetInventoryLength(); $i++) {
-        $invsum += $monster->GetInventory($i);
-    }
-    $assert->strictEqual($invsum, 10);
-
-    $assert->strictEqual(bin2hex($monster->GetInventoryBytes()), "0001020304");
-
-    $test_0 = $monster->GetTest4(0);
-    $test_1 = $monster->GetTest4(1);
-    $assert->strictEqual($monster->GetTest4Length(), 2);
-    $assert->strictEqual($test_0->GetA() + $test_0->GetB() + $test_1->GetA() + $test_1->GetB(), 100);
-
-    $assert->strictEqual($monster->GetTestarrayofstringLength(), 2);
-    $assert->strictEqual($monster->GetTestarrayofstring(0), 'test1');
-    $assert->strictEqual($monster->GetTestarrayofstring(1), 'test2');
-
-    $fred = $monster->getEnemy();
-    $assert->Equal('Fred', $fred->getName());
-
-    $assert->strictEqual($monster->GetTestbool(), false);
-}
-
-//function testUnicode(Assert $assert) {
-//    // missing unicode_test.mon, implemented later
-//    $correct = file_get_contents('unicode_test.mon');
-//    $json = json_decode(file_get_contents('unicode_test.json'));
-//
-//    // Test reading
-//    $bb = flatbuffers\ByteBuffer::Wrap($correct);
-//    $monster = \MyGame\Example\Monster::GetRootAsMonster($bb);
-//    $assert->strictEqual($monster->GetName(), $json["name"]);
-//
-//    //$assert->deepEqual(new Buffer(monster.name(flatbuffers.Encoding.UTF8_BYTES)), new Buffer(json.name));
-//    //assert.strictEqual(monster.testarrayoftablesLength(), json.testarrayoftables.length);
-//    foreach ($json["testarrayoftables"]as $i => $table) {
-//        $value = $monster->GetTestArrayOfTables($i);
-//        $assert->strictEqual($value->GetName(), $table["name"]);
-//        //assert.deepEqual(new Buffer(value.name(flatbuffers.Encoding.UTF8_BYTES)), new Buffer(table.name));
-//    }
-//    $assert->strictEqual($monster->GetTestarrayofstringLength(), $json["testarrayofstring"]["length"]);
-//    foreach ($json["testarrayofstring"] as $i => $string) {
-//        $assert->strictEqual($monster->GetTestarrayofstring($i), $string);
-//        //assert.deepEqual(new Buffer(monster.testarrayofstring(i, flatbuffers.Encoding.UTF8_BYTES)), new Buffer(string));
-//    }
-//
-//    // Test writing
-//    $fbb = new FlatBuffers\FlatBufferBuilder(1);
-//    $name = $fbb->CreateString($json["name"]);
-//    $testarrayoftablesOffsets = array_map(function($table) use($fbb) {
-//        $name = $fbb->CreateString($table["name"]);
-//        \MyGame\Example\Monster::StartMonster($fbb);
-//        \MyGame\Example\Monster::AddName($fbb, $name);
-//        return \MyGame\Example\Monster::EndMonster($fbb);
-//    }, $json["testarrayoftables"]);
-//    $testarrayoftablesOffset = \MyGame\Example\Monster::CreateTestarrayoftablesVector($fbb,
-//            $testarrayoftablesOffsets);
-////    $testarrayofstringOffset = \MyGame\Example\Monster::CreateTestarrayofstringVector($fbb,
-////            $json["testarrayofstring"].map(function(string) { return fbb.createString(string); }));
-//
-//    \MyGame\Example\Monster::startMonster($fbb);
-//    \MyGame\Example\Monster::addTestarrayofstring($fbb, $testarrayoftablesOffset);
-//    \MyGame\Example\Monster::addTestarrayoftables($fbb, $testarrayoftablesOffset);
-//    \MyGame\Example\Monster::addName($fbb, $name);
-//    \MyGame\Example\Monster::finishMonsterBuffer($fbb, \MyGame\Example\Monster::endMonster($fbb));
-//    //;assert.deepEqual(new Buffer(fbb.asUint8Array()), correct);
-//}
-
-// Low level stress/fuzz test: serialize/deserialize a variety of
-// different kinds of data in different combinations
-function fuzzTest1(Assert $assert)
-{
-
-    // Values we're testing against: chosen to ensure no bits get chopped
-    // off anywhere, and also be different from eachother.
-    $bool_val = true;
-    $char_val = -127; // 0x81
-    $uchar_val = 0xFF;
-    $short_val = -32222; // 0x8222;
-    $ushort_val = 0xFEEE;
-    $int_val = 0x7fffffff | 0;
-    // for now
-    $uint_val = 1;
-    $long_val = 2;
-    $ulong_val = 3;
-
-//    var uint_val   = 0xFDDDDDDD;
-//    var long_val   = new flatbuffers.Long(0x44444444, 0x84444444);
-//    var ulong_val  = new flatbuffers.Long(0xCCCCCCCC, 0xFCCCCCCC);
-
-    $float_val = 3.14159;
-    $double_val = 3.14159265359;
-
-    $test_values_max = 11;
-    $fields_per_object = 4;
-    // current implementation is not good at encoding.
-    $num_fuzz_objects = 1000;
-    $builder = new Google\FlatBuffers\FlatBufferBuilder(1);
-
-    // can't use same implementation due to PHP_INTMAX overflow issue.
-    // we use mt_rand function to reproduce fuzzy test.
-    mt_srand(48271);
-    $objects = array();
-    // Generate num_fuzz_objects random objects each consisting of
-    // fields_per_object fields, each of a random type.
-    for ($i = 0; $i < $num_fuzz_objects; $i++) {
-        $builder->startObject($fields_per_object);
-        for ($f = 0; $f < $fields_per_object; $f++) {
-            $choice = mt_rand() % $test_values_max;
-            switch ($choice) {
-                case 0:
-                    $builder->addBoolX($f, $bool_val, 0);
-                    break;
-                case 1:
-                    $builder->addByteX($f, $char_val, 0);
-                    break;
-                case 2:
-                    $builder->addSbyteX($f, $uchar_val, 0);
-                    break;
-                case 3:
-                    $builder->addShortX($f, $short_val, 0);
-                    break;
-                case 4:
-                    $builder->addUshortX($f, $ushort_val, 0);
-                    break;
-                case 5:
-                    $builder->addIntX($f, $int_val, 0);
-                    break;
-                case 6:
-                    $builder->addUintX($f, $uint_val, 0);
-                    break;
-                case 7:
-                    $builder->addLongX($f, $long_val, 0);
-                    break;
-                case 8:
-                    $builder->addUlongX($f, $ulong_val, 0);
-                    break;
-                case 9:
-                    $builder->addFloatX($f, $float_val, 0);
-                    break;
-                case 10:
-                    $builder->addDoubleX($f, $double_val, 0);
-                    break;
-            }
-        }
-        $objects[] = $builder->endObject();
-    }
-    $builder->prep(8, 0); // Align whole buffer.
-
-    mt_srand(48271); // Reset
-    $builder->finish($objects[count($objects) - 1]);
-
-    $view = Google\FlatBuffers\ByteBuffer::wrap($builder->sizedByteArray());
-    for ($i = 0; $i < $num_fuzz_objects; $i++) {
-        $offset = $view->capacity() - $objects[$i];
-        for ($f = 0; $f < $fields_per_object; $f++) {
-            $choice = mt_rand() % $test_values_max;
-            $vtable_offset = fieldIndexToOffset($f);
-            $vtable = $offset - $view->getInt($offset);
-            $assert->ok($vtable_offset < $view->getShort($vtable));
-            $field_offset = $offset + $view->getShort($vtable + $vtable_offset);
-            switch ($choice) {
-                case 0:
-                    $assert->strictEqual(!!$view->getBool($field_offset), $bool_val);
-                    break;
-                case 1:
-                    $assert->strictEqual($view->getSbyte($field_offset), $char_val);
-                    break;
-                case 2:
-                    $assert->strictEqual($view->getByte($field_offset), $uchar_val);
-                    break;
-                case 3:
-                    $assert->strictEqual($view->getShort($field_offset), $short_val);
-                    break;
-                case 4:
-                    $assert->strictEqual($view->getUShort($field_offset), $ushort_val);
-                    break;
-                case 5:
-                    $assert->strictEqual($view->getInt($field_offset), $int_val);
-                    break;
-                case 6:
-                    $assert->strictEqual($view->getUint($field_offset), $uint_val);
-                    break;
-                case 7:
-                    if (PHP_INT_SIZE <= 4) break;
-                    $assert->strictEqual($view->getLong($field_offset), $long_val);
-                    break;
-                case 8:
-                    if (PHP_INT_SIZE <= 4) break;
-                    $assert->strictEqual($view->getUlong($field_offset), $ulong_val);
-                    break;
-                case 9:
-                    $assert->strictEqual(floor($view->getFloat($field_offset)), floor($float_val));
-                    break;
-                case 10:
-                    $assert->strictEqual($view->getDouble($field_offset), $double_val);
-                    break;
-            }
-        }
-    }
-}
-
-function fieldIndexToOffset($field_id) {
-    // Should correspond to what EndTable() below builds up.
-    $fixed_fields = 2;  // Vtable size and Object Size.
-    return ($field_id + $fixed_fields) * 2;
-}
-
-function testByteBuffer(Assert $assert) {
-
-    //Test: ByteBuffer_Length_MatchesBufferLength
-    $buffer = str_repeat("\0", 100);
-    $uut  = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Equal($uut->capacity(), strlen($buffer));
-
-    //Test: ByteBuffer_PutBytePopulatesBufferAtZeroOffset
-    $buffer = "\0";
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $uut->putByte(0, "\x63"); // 99
-    $assert->Equal("\x63", $uut->_buffer[0]); // don't share buffer as php user might confuse reference.
-
-    //Test: ByteBuffer_PutByteCannotPutAtOffsetPastLength
-    $buffer = "\0";
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-        $uut->putByte(1, "\x63"); // 99
-    });
-
-    //Test: ByteBuffer_PutShortPopulatesBufferCorrectly
-    $buffer = str_repeat("\0", 2);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $uut->putShort(0, 1);
-
-    // Ensure Endiannes was written correctly
-    $assert->Equal(chr(0x01), $uut->_buffer[0]);
-    $assert->Equal(chr(0x00), $uut->_buffer[1]);
-
-    $buffer = str_repeat("\0", 2);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $uut->putShort(0, -32768);
-
-    // Ensure Endiannes was written correctly
-    $assert->Equal(chr(0x00), $uut->_buffer[0]);
-    $assert->Equal(chr(0x80), $uut->_buffer[1]);
-
-    //Test: ByteBuffer_PutShortCannotPutAtOffsetPastLength
-    $buffer = "\0";
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-        $uut->putShort(2, "\x63"); // 99
-    });
-
-    //Test: ByteBuffer_PutShortChecksLength
-    $buffer = "\0";
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-        $uut->putShort(0, "\x63"); // 99
-    });
-
-    //Test: ByteBuffer_PutShortChecksLengthAndOffset
-    $buffer = str_repeat("\0", 2);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-        $uut->putShort(1, "\x63"); // 99
-    });
-
-    //Test: ByteBuffer_PutIntPopulatesBufferCorrectly
-    $buffer = str_repeat("\0", 4);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $uut->putInt(0, 0x0A0B0C0D);
-    $assert->Equal(chr(0x0D), $uut->_buffer[0]);
-    $assert->Equal(chr(0x0C), $uut->_buffer[1]);
-    $assert->Equal(chr(0x0B), $uut->_buffer[2]);
-    $assert->Equal(chr(0x0A), $uut->_buffer[3]);
-
-    $buffer = str_repeat("\0", 4);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $uut->putInt(0, -2147483648);
-    $assert->Equal(chr(0x00), $uut->_buffer[0]);
-    $assert->Equal(chr(0x00), $uut->_buffer[1]);
-    $assert->Equal(chr(0x00), $uut->_buffer[2]);
-    $assert->Equal(chr(0x80), $uut->_buffer[3]);
-
-    //Test: ByteBuffer_PutIntCannotPutAtOffsetPastLength
-    $buffer = str_repeat("\0", 4);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-        $uut->putInt(2, 0x0A0B0C0D);
-    });
-
-    //Test: ByteBuffer_PutIntChecksLength
-    $buffer = str_repeat("\0", 1);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-        $uut->putInt(0, 0x0A0B0C0D);
-    });
-
-    //Test: ByteBuffer_PutIntChecksLengthAndOffset
-    $buffer = str_repeat("\0", 4);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-        $uut->putInt(2, 0x0A0B0C0D);
-    });
-
-    if (PHP_INT_SIZE > 4) {
-        //Test: ByteBuffer_PutLongPopulatesBufferCorrectly
-        $buffer = str_repeat("\0", 8);
-        $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-        $uut->putLong(0, 0x010203040A0B0C0D);
-        $assert->Equal(chr(0x0D), $uut->_buffer[0]);
-        $assert->Equal(chr(0x0C), $uut->_buffer[1]);
-        $assert->Equal(chr(0x0B), $uut->_buffer[2]);
-        $assert->Equal(chr(0x0A), $uut->_buffer[3]);
-        $assert->Equal(chr(0x04), $uut->_buffer[4]);
-        $assert->Equal(chr(0x03), $uut->_buffer[5]);
-        $assert->Equal(chr(0x02), $uut->_buffer[6]);
-        $assert->Equal(chr(0x01), $uut->_buffer[7]);
-
-        //Test: ByteBuffer_PutLongCannotPutAtOffsetPastLength
-        $buffer = str_repeat("\0", 8);
-        $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-        $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-            $uut->putLong(2, 0x010203040A0B0C0D);
-        });
-
-        //Test: ByteBuffer_PutLongCannotPutAtOffsetPastLength
-        $buffer = str_repeat("\0", 1);
-        $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-        $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-            $uut->putLong(0, 0x010203040A0B0C0D);
-        });
-
-
-        //Test: ByteBuffer_PutLongChecksLengthAndOffset
-        $buffer = str_repeat("\0", 8);
-        $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-        $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-            $uut->putLong(2, 0x010203040A0B0C0D);
-        });
-    }
-
-    //Test: ByteBuffer_GetByteReturnsCorrectData
-    $buffer = str_repeat("\0", 1);
-    $buffer[0] = "\x63";
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Equal("\x63", $uut->get(0));
-
-    //Test: ByteBuffer_GetByteChecksOffset
-    $buffer = str_repeat("\0", 1);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-        $uut->get(1);
-    });
-
-    //Test: ByteBuffer_GetShortReturnsCorrectData
-    $buffer = str_repeat("\0", 2);
-    $buffer[0] = chr(0x01);
-    $buffer[1] = chr(0x00);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Equal(1, $uut->getShort(0));
-
-    //Test: ByteBuffer_GetShortReturnsCorrectData (signed value)
-    $buffer = str_repeat("\0", 2);
-    $buffer[0] = chr(0x00);
-    $buffer[1] = chr(0x80);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Equal(-32768, $uut->getShort(0));
-
-    //Test: ByteBuffer_GetShortChecksOffset
-    $buffer = str_repeat("\0", 2);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-        $uut->getShort(2);
-    });
-
-    //Test: ByteBuffer_GetShortChecksLength
-    $buffer = str_repeat("\0", 2);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-        $uut->getShort(1);
-    });
-
-    //Test: ByteBuffer_GetIntReturnsCorrectData
-    $buffer = str_repeat("\0", 4);
-    $buffer[0] = chr(0x0D);
-    $buffer[1] = chr(0x0C);
-    $buffer[2] = chr(0x0B);
-    $buffer[3] = chr(0x0A);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Equal(0x0A0B0C0D, $uut->getInt(0));
-
-    $buffer = str_repeat("\0", 4);
-    $buffer[0] = chr(0x00);
-    $buffer[1] = chr(0x00);
-    $buffer[2] = chr(0x00);
-    $buffer[3] = chr(0x80);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Equal(-2147483648, $uut->getInt(0));
-
-    //Test: ByteBuffer_GetIntChecksOffset
-    $buffer = str_repeat("\0", 4);
-
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-        $uut->getInt(4);
-    });
-
-    //Test: ByteBuffer_GetIntChecksLength
-    $buffer = str_repeat("\0", 2);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-        $uut->getInt(0);
-    });
-
-    if (PHP_INT_SIZE > 4) {
-        //Test: ByteBuffer_GetLongReturnsCorrectData
-        $buffer = str_repeat("\0", 8);
-        $buffer[0] = chr(0x0D);
-        $buffer[1] = chr(0x0C);
-        $buffer[2] = chr(0x0B);
-        $buffer[3] = chr(0x0A);
-        $buffer[4] = chr(0x04);
-        $buffer[5] = chr(0x03);
-        $buffer[6] = chr(0x02);
-        $buffer[7] = chr(0x01);
-        $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-        $assert->Equal(0x010203040A0B0C0D, $uut->getLong(0));
-
-        //Test: Signed Long
-        $buffer = str_repeat("\0", 8);
-        $buffer[0] = chr(0x00);
-        $buffer[1] = chr(0x00);
-        $buffer[2] = chr(0x00);
-        $buffer[3] = chr(0x00);
-        $buffer[4] = chr(0x00);
-        $buffer[5] = chr(0x00);
-        $buffer[6] = chr(0x00);
-        $buffer[7] = chr(0x80);
-        $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-        $assert->Equal(-1 << 63, $uut->getLong(0));
-    }
-
-    //Test: ByteBuffer_GetLongChecksOffset
-    $buffer = str_repeat("\0", 8);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-        $uut->getLong(8);
-    });
-
-    //Test: ByteBuffer_GetLongChecksLength
-    $buffer = str_repeat("\0", 7);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Throws(new OutOfRangeException(), function()  use ($uut) {
-        $uut->getLong(0);
-    });
-
-    //Test: big endian
-    $buffer = str_repeat("\0", 2);
-    // 0xFF 0x00
-    // Little Endian: 255
-    // Big Endian: 65280
-    $buffer[0] = chr(0xff);
-    $buffer[1] = chr(0x00);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Equal(65280, $uut->readLittleEndian(0, 2, true));
-
-    $buffer = str_repeat("\0", 4);
-    $buffer[0] = chr(0x0D);
-    $buffer[1] = chr(0x0C);
-    $buffer[2] = chr(0x0B);
-    $buffer[3] = chr(0x0A);
-    $uut = Google\FlatBuffers\ByteBuffer::wrap($buffer);
-    $assert->Equal(0x0D0C0B0A, $uut->readLittleEndian(0, 4, true));
-
-}
-
-class Assert {
-    public function ok($result, $message = "") {
-        if (!$result){
-            throw new Exception(!empty($message) ? $message : "{$result} is not true.");
-        }
-    }
-
-    public function Equal($result, $expected, $message = "") {
-        if ($result != $expected) {
-            throw new Exception(!empty($message) ? $message : "given the result {$result} is not equals as {$expected}");
-        }
-    }
-
-
-    public function strictEqual($result, $expected, $message = "") {
-        if ($result !== $expected) {
-            throw new Exception(!empty($message) ? $message : "given the result {$result} is not strict equals as {$expected}");
-        }
-    }
-
-    public function Throws($class, Callable $callback) {
-        try {
-            $callback();
-
-            throw new \Exception("passed statement don't throw an exception.");
-        } catch (\Exception $e) {
-            if (get_class($e) != get_class($class)) {
-                throw new Exception("passed statement doesn't throw " . get_class($class) . ". throwws " . get_class($e));
-            }
-        }
-    }
-}
diff --git a/third_party/flatbuffers/tests/prototest/imported.proto b/third_party/flatbuffers/tests/prototest/imported.proto
deleted file mode 100644
index 5b43e4b..0000000
--- a/third_party/flatbuffers/tests/prototest/imported.proto
+++ /dev/null
@@ -1,5 +0,0 @@
-package proto.test;
-
-message ImportedMessage {
-    optional int32 a = 26;
-}
diff --git a/third_party/flatbuffers/tests/prototest/test.golden b/third_party/flatbuffers/tests/prototest/test.golden
deleted file mode 100644
index 2c74413..0000000
--- a/third_party/flatbuffers/tests/prototest/test.golden
+++ /dev/null
@@ -1,52 +0,0 @@
-// Generated from test.proto
-
-namespace _proto._test;
-
-/// Enum doc comment.
-enum ProtoEnum : int {
-  FOO = 1,
-  /// Enum 2nd value doc comment misaligned.
-  BAR = 5,
-}
-
-namespace _proto._test;
-
-table ImportedMessage {
-  a:int;
-}
-
-namespace _proto._test;
-
-/// 2nd table doc comment with
-/// many lines.
-table ProtoMessage {
-  c:int = 16;
-  d:long;
-  p:uint;
-  e:ulong;
-  /// doc comment for f.
-  f:int = -1;
-  g:long;
-  h:uint;
-  q:ulong;
-  i:int;
-  j:long;
-  /// doc comment for k.
-  k:bool;
-  /// doc comment for l on 2
-  /// lines
-  l:string (required);
-  m:string;
-  n:_proto._test._ProtoMessage.OtherMessage;
-  o:[string];
-  z:_proto._test.ImportedMessage;
-}
-
-namespace _proto._test._ProtoMessage;
-
-table OtherMessage {
-  a:double;
-  /// doc comment for b.
-  b:float = 3.14149;
-}
-
diff --git a/third_party/flatbuffers/tests/prototest/test.proto b/third_party/flatbuffers/tests/prototest/test.proto
deleted file mode 100644
index 913b564..0000000
--- a/third_party/flatbuffers/tests/prototest/test.proto
+++ /dev/null
@@ -1,45 +0,0 @@
-// Sample .proto file that we can translate to the corresponding .fbs.
-
-option some_option = is_ignored;
-import "imported.proto";
-
-package proto.test;
-
-/// Enum doc comment.
-enum ProtoEnum {
-  FOO = 1;
-/// Enum 2nd value doc comment misaligned.
-  BAR = 5;
-}
-
-/// 2nd table doc comment with
-/// many lines.
-message ProtoMessage {
-  // Ignored non-doc comment.
-  // A nested message declaration, will be moved to top level in .fbs
-  message OtherMessage {
-    optional double a = 26;
-    /// doc comment for b.
-    optional float b = 32 [default = 3.14149];
-  }
-  optional int32 c = 12 [default = 16];
-  optional int64 d = 1 [default = 0];
-  optional uint32 p = 1;
-  optional uint64 e = 2;
-  /// doc comment for f.
-  optional sint32 f = 3 [default = -1];
-  optional sint64 g = 4;
-  optional fixed32 h = 5;
-  optional fixed64 q = 6;
-  optional sfixed32 i = 7;
-  optional sfixed64 j = 8;
-  /// doc comment for k.
-  optional bool k = 9;
-  /// doc comment for l on 2
-  /// lines
-  required string l = 10;
-  optional bytes m = 11;
-  optional OtherMessage n = 12;
-  repeated string o = 14;
-  optional ImportedMessage z = 16;
-}
diff --git a/third_party/flatbuffers/tests/py_test.py b/third_party/flatbuffers/tests/py_test.py
deleted file mode 100644
index e660944..0000000
--- a/third_party/flatbuffers/tests/py_test.py
+++ /dev/null
@@ -1,1371 +0,0 @@
-# coding=utf-8
-# Copyright 2014 Google Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import os.path
-import sys
-PY_VERSION = sys.version_info[:2]
-
-import ctypes
-from collections import defaultdict
-import timeit
-import unittest
-
-
-from flatbuffers import compat
-from flatbuffers.compat import range_func as compat_range
-
-import flatbuffers
-from flatbuffers import number_types as N
-
-import MyGame  # refers to generated code
-import MyGame.Example  # refers to generated code
-import MyGame.Example.Any  # refers to generated code
-import MyGame.Example.Color  # refers to generated code
-import MyGame.Example.Monster  # refers to generated code
-import MyGame.Example.Test  # refers to generated code
-import MyGame.Example.Stat  # refers to generated code
-import MyGame.Example.Vec3  # refers to generated code
-
-
-def assertRaises(test_case, fn, exception_class):
-    ''' Backwards-compatible assertion for exceptions raised. '''
-
-    exc = None
-    try:
-        fn()
-    except Exception as e:
-        exc = e
-    test_case.assertTrue(exc is not None)
-    test_case.assertTrue(isinstance(exc, exception_class))
-
-
-class TestWireFormat(unittest.TestCase):
-    def test_wire_format(self):
-        # Verify that using the generated Python code builds a buffer without
-        # returning errors, and is interpreted correctly:
-        gen_buf, gen_off = make_monster_from_generated_code()
-        CheckReadBuffer(gen_buf, gen_off)
-
-        # Verify that the canonical flatbuffer file is readable by the
-        # generated Python code. Note that context managers are not part of
-        # Python 2.5, so we use the simpler open/close methods here:
-        f = open('monsterdata_test.mon', 'rb')
-        canonicalWireData = f.read()
-        f.close()
-        CheckReadBuffer(bytearray(canonicalWireData), 0)
-
-        # Write the generated buffer out to a file:
-        f = open('monsterdata_python_wire.mon', 'wb')
-        f.write(gen_buf[gen_off:])
-        f.close()
-
-
-def CheckReadBuffer(buf, offset):
-    ''' CheckReadBuffer checks that the given buffer is evaluated correctly
-        as the example Monster. '''
-
-    def asserter(stmt):
-        ''' An assertion helper that is separated from TestCase classes. '''
-        if not stmt:
-            raise AssertionError('CheckReadBuffer case failed')
-
-    monster = MyGame.Example.Monster.Monster.GetRootAsMonster(buf, offset)
-
-    asserter(monster.Hp() == 80)
-    asserter(monster.Mana() == 150)
-    asserter(monster.Name() == b'MyMonster')
-
-    # initialize a Vec3 from Pos()
-    vec = monster.Pos()
-    asserter(vec is not None)
-
-    # verify the properties of the Vec3
-    asserter(vec.X() == 1.0)
-    asserter(vec.Y() == 2.0)
-    asserter(vec.Z() == 3.0)
-    asserter(vec.Test1() == 3.0)
-    asserter(vec.Test2() == 2)
-
-    # initialize a Test from Test3(...)
-    t = MyGame.Example.Test.Test()
-    t = vec.Test3(t)
-    asserter(t is not None)
-
-    # verify the properties of the Test
-    asserter(t.A() == 5)
-    asserter(t.B() == 6)
-
-    # verify that the enum code matches the enum declaration:
-    union_type = MyGame.Example.Any.Any
-    asserter(monster.TestType() == union_type.Monster)
-
-    # initialize a Table from a union field Test(...)
-    table2 = monster.Test()
-    asserter(type(table2) is flatbuffers.table.Table)
-
-    # initialize a Monster from the Table from the union
-    monster2 = MyGame.Example.Monster.Monster()
-    monster2.Init(table2.Bytes, table2.Pos)
-
-    asserter(monster2.Name() == b"Fred")
-
-    # iterate through the first monster's inventory:
-    asserter(monster.InventoryLength() == 5)
-
-    invsum = 0
-    for i in compat_range(monster.InventoryLength()):
-        v = monster.Inventory(i)
-        invsum += int(v)
-    asserter(invsum == 10)
-
-    asserter(monster.Test4Length() == 2)
-
-    # create a 'Test' object and populate it:
-    test0 = monster.Test4(0)
-    asserter(type(test0) is MyGame.Example.Test.Test)
-
-    test1 = monster.Test4(1)
-    asserter(type(test1) is MyGame.Example.Test.Test)
-
-    # the position of test0 and test1 are swapped in monsterdata_java_wire
-    # and monsterdata_test_wire, so ignore ordering
-    v0 = test0.A()
-    v1 = test0.B()
-    v2 = test1.A()
-    v3 = test1.B()
-    sumtest12 = int(v0) + int(v1) + int(v2) + int(v3)
-
-    asserter(sumtest12 == 100)
-
-    asserter(monster.TestarrayofstringLength() == 2)
-    asserter(monster.Testarrayofstring(0) == b"test1")
-    asserter(monster.Testarrayofstring(1) == b"test2")
-
-    asserter(monster.TestarrayoftablesLength() == 0)
-    asserter(monster.TestnestedflatbufferLength() == 0)
-    asserter(monster.Testempty() is None)
-
-
-class TestFuzz(unittest.TestCase):
-    ''' Low level stress/fuzz test: serialize/deserialize a variety of
-        different kinds of data in different combinations '''
-
-    binary_type = compat.binary_types[0] # this will always exist
-    ofInt32Bytes = binary_type([0x83, 0x33, 0x33, 0x33])
-    ofInt64Bytes = binary_type([0x84, 0x44, 0x44, 0x44,
-                                0x44, 0x44, 0x44, 0x44])
-    overflowingInt32Val = flatbuffers.encode.Get(flatbuffers.packer.int32,
-                                                 ofInt32Bytes, 0)
-    overflowingInt64Val = flatbuffers.encode.Get(flatbuffers.packer.int64,
-                                                 ofInt64Bytes, 0)
-
-    # Values we're testing against: chosen to ensure no bits get chopped
-    # off anywhere, and also be different from eachother.
-    boolVal = True
-    int8Val = N.Int8Flags.py_type(-127) # 0x81
-    uint8Val = N.Uint8Flags.py_type(0xFF)
-    int16Val = N.Int16Flags.py_type(-32222) # 0x8222
-    uint16Val = N.Uint16Flags.py_type(0xFEEE)
-    int32Val = N.Int32Flags.py_type(overflowingInt32Val)
-    uint32Val = N.Uint32Flags.py_type(0xFDDDDDDD)
-    int64Val = N.Int64Flags.py_type(overflowingInt64Val)
-    uint64Val = N.Uint64Flags.py_type(0xFCCCCCCCCCCCCCCC)
-    # Python uses doubles, so force it here
-    float32Val = N.Float32Flags.py_type(ctypes.c_float(3.14159).value)
-    float64Val = N.Float64Flags.py_type(3.14159265359)
-
-    def test_fuzz(self):
-        return self.check_once(11, 100)
-
-    def check_once(self, fuzzFields, fuzzObjects):
-        testValuesMax = 11 # hardcoded to the number of scalar types
-
-        builder = flatbuffers.Builder(0)
-        l = LCG()
-
-        objects = [0 for _ in compat_range(fuzzObjects)]
-
-        # Generate fuzzObjects random objects each consisting of
-        # fuzzFields fields, each of a random type.
-        for i in compat_range(fuzzObjects):
-            builder.StartObject(fuzzFields)
-
-            for j in compat_range(fuzzFields):
-                choice = int(l.Next()) % testValuesMax
-                if choice == 0:
-                    builder.PrependBoolSlot(int(j), self.boolVal, False)
-                elif choice == 1:
-                    builder.PrependInt8Slot(int(j), self.int8Val, 0)
-                elif choice == 2:
-                    builder.PrependUint8Slot(int(j), self.uint8Val, 0)
-                elif choice == 3:
-                    builder.PrependInt16Slot(int(j), self.int16Val, 0)
-                elif choice == 4:
-                    builder.PrependUint16Slot(int(j), self.uint16Val, 0)
-                elif choice == 5:
-                    builder.PrependInt32Slot(int(j), self.int32Val, 0)
-                elif choice == 6:
-                    builder.PrependUint32Slot(int(j), self.uint32Val, 0)
-                elif choice == 7:
-                    builder.PrependInt64Slot(int(j), self.int64Val, 0)
-                elif choice == 8:
-                    builder.PrependUint64Slot(int(j), self.uint64Val, 0)
-                elif choice == 9:
-                    builder.PrependFloat32Slot(int(j), self.float32Val, 0)
-                elif choice == 10:
-                    builder.PrependFloat64Slot(int(j), self.float64Val, 0)
-                else:
-                    raise RuntimeError('unreachable')
-
-            off = builder.EndObject()
-
-            # store the offset from the end of the builder buffer,
-            # since it will keep growing:
-            objects[i] = off
-
-        # Do some bookkeeping to generate stats on fuzzes:
-        stats = defaultdict(int)
-        def check(table, desc, want, got):
-            stats[desc] += 1
-            self.assertEqual(want, got, "%s != %s, %s" % (want, got, desc))
-
-        l = LCG()  # Reset.
-
-        # Test that all objects we generated are readable and return the
-        # expected values. We generate random objects in the same order
-        # so this is deterministic.
-        for i in compat_range(fuzzObjects):
-
-            table = flatbuffers.table.Table(builder.Bytes,
-                                            len(builder.Bytes) - objects[i])
-
-            for j in compat_range(fuzzFields):
-                field_count = flatbuffers.builder.VtableMetadataFields + j
-                f = N.VOffsetTFlags.py_type(field_count *
-                                            N.VOffsetTFlags.bytewidth)
-                choice = int(l.Next()) % testValuesMax
-
-                if choice == 0:
-                    check(table, "bool", self.boolVal,
-                          table.GetSlot(f, False, N.BoolFlags))
-                elif choice == 1:
-                    check(table, "int8", self.int8Val,
-                          table.GetSlot(f, 0, N.Int8Flags))
-                elif choice == 2:
-                    check(table, "uint8", self.uint8Val,
-                          table.GetSlot(f, 0, N.Uint8Flags))
-                elif choice == 3:
-                    check(table, "int16", self.int16Val,
-                          table.GetSlot(f, 0, N.Int16Flags))
-                elif choice == 4:
-                    check(table, "uint16", self.uint16Val,
-                          table.GetSlot(f, 0, N.Uint16Flags))
-                elif choice == 5:
-                    check(table, "int32", self.int32Val,
-                          table.GetSlot(f, 0, N.Int32Flags))
-                elif choice == 6:
-                    check(table, "uint32", self.uint32Val,
-                          table.GetSlot(f, 0, N.Uint32Flags))
-                elif choice == 7:
-                    check(table, "int64", self.int64Val,
-                          table.GetSlot(f, 0, N.Int64Flags))
-                elif choice == 8:
-                    check(table, "uint64", self.uint64Val,
-                          table.GetSlot(f, 0, N.Uint64Flags))
-                elif choice == 9:
-                    check(table, "float32", self.float32Val,
-                          table.GetSlot(f, 0, N.Float32Flags))
-                elif choice == 10:
-                    check(table, "float64", self.float64Val,
-                          table.GetSlot(f, 0, N.Float64Flags))
-                else:
-                    raise RuntimeError('unreachable')
-
-        # If enough checks were made, verify that all scalar types were used:
-        self.assertEqual(testValuesMax, len(stats),
-                "fuzzing failed to test all scalar types: %s" % stats)
-
-
-class TestByteLayout(unittest.TestCase):
-    ''' TestByteLayout checks the bytes of a Builder in various scenarios. '''
-
-    def assertBuilderEquals(self, builder, want_chars_or_ints):
-        def integerize(x):
-            if isinstance(x, compat.string_types):
-                return ord(x)
-            return x
-
-        want_ints = list(map(integerize, want_chars_or_ints))
-        want = bytearray(want_ints)
-        got = builder.Bytes[builder.Head():] # use the buffer directly
-        self.assertEqual(want, got)
-
-    def test_numbers(self):
-        b = flatbuffers.Builder(0)
-        self.assertBuilderEquals(b, [])
-        b.PrependBool(True)
-        self.assertBuilderEquals(b, [1])
-        b.PrependInt8(-127)
-        self.assertBuilderEquals(b, [129, 1])
-        b.PrependUint8(255)
-        self.assertBuilderEquals(b, [255, 129, 1])
-        b.PrependInt16(-32222)
-        self.assertBuilderEquals(b, [0x22, 0x82, 0, 255, 129, 1]) # first pad
-        b.PrependUint16(0xFEEE)
-        # no pad this time:
-        self.assertBuilderEquals(b, [0xEE, 0xFE, 0x22, 0x82, 0, 255, 129, 1])
-        b.PrependInt32(-53687092)
-        self.assertBuilderEquals(b, [204, 204, 204, 252, 0xEE, 0xFE,
-                                     0x22, 0x82, 0, 255, 129, 1])
-        b.PrependUint32(0x98765432)
-        self.assertBuilderEquals(b, [0x32, 0x54, 0x76, 0x98,
-                                     204, 204, 204, 252,
-                                     0xEE, 0xFE, 0x22, 0x82,
-                                     0, 255, 129, 1])
-
-    def test_numbers64(self):
-        b = flatbuffers.Builder(0)
-        b.PrependUint64(0x1122334455667788)
-        self.assertBuilderEquals(b, [0x88, 0x77, 0x66, 0x55,
-                                     0x44, 0x33, 0x22, 0x11])
-
-        b = flatbuffers.Builder(0)
-        b.PrependInt64(0x1122334455667788)
-        self.assertBuilderEquals(b, [0x88, 0x77, 0x66, 0x55,
-                                     0x44, 0x33, 0x22, 0x11])
-
-    def test_1xbyte_vector(self):
-        b = flatbuffers.Builder(0)
-        self.assertBuilderEquals(b, [])
-        b.StartVector(flatbuffers.number_types.Uint8Flags.bytewidth, 1, 1)
-        self.assertBuilderEquals(b, [0, 0, 0]) # align to 4bytes
-        b.PrependByte(1)
-        self.assertBuilderEquals(b, [1, 0, 0, 0])
-        b.EndVector(1)
-        self.assertBuilderEquals(b, [1, 0, 0, 0, 1, 0, 0, 0]) # padding
-
-    def test_2xbyte_vector(self):
-        b = flatbuffers.Builder(0)
-        b.StartVector(flatbuffers.number_types.Uint8Flags.bytewidth, 2, 1)
-        self.assertBuilderEquals(b, [0, 0]) # align to 4bytes
-        b.PrependByte(1)
-        self.assertBuilderEquals(b, [1, 0, 0])
-        b.PrependByte(2)
-        self.assertBuilderEquals(b, [2, 1, 0, 0])
-        b.EndVector(2)
-        self.assertBuilderEquals(b, [2, 0, 0, 0, 2, 1, 0, 0]) # padding
-
-    def test_1xuint16_vector(self):
-        b = flatbuffers.Builder(0)
-        b.StartVector(flatbuffers.number_types.Uint16Flags.bytewidth, 1, 1)
-        self.assertBuilderEquals(b, [0, 0]) # align to 4bytes
-        b.PrependUint16(1)
-        self.assertBuilderEquals(b, [1, 0, 0, 0])
-        b.EndVector(1)
-        self.assertBuilderEquals(b, [1, 0, 0, 0, 1, 0, 0, 0]) # padding
-
-    def test_2xuint16_vector(self):
-        b = flatbuffers.Builder(0)
-        b.StartVector(flatbuffers.number_types.Uint16Flags.bytewidth, 2, 1)
-        self.assertBuilderEquals(b, []) # align to 4bytes
-        b.PrependUint16(0xABCD)
-        self.assertBuilderEquals(b, [0xCD, 0xAB])
-        b.PrependUint16(0xDCBA)
-        self.assertBuilderEquals(b, [0xBA, 0xDC, 0xCD, 0xAB])
-        b.EndVector(2)
-        self.assertBuilderEquals(b, [2, 0, 0, 0, 0xBA, 0xDC, 0xCD, 0xAB])
-
-    def test_create_ascii_string(self):
-        b = flatbuffers.Builder(0)
-        b.CreateString(u"foo", encoding='ascii')
-
-        # 0-terminated, no pad:
-        self.assertBuilderEquals(b, [3, 0, 0, 0, 'f', 'o', 'o', 0])
-        b.CreateString(u"moop", encoding='ascii')
-        # 0-terminated, 3-byte pad:
-        self.assertBuilderEquals(b, [4, 0, 0, 0, 'm', 'o', 'o', 'p',
-                                     0, 0, 0, 0,
-                                     3, 0, 0, 0, 'f', 'o', 'o', 0])
-
-    def test_create_utf8_string(self):
-        b = flatbuffers.Builder(0)
-        b.CreateString(u"Цлїςσδε")
-        self.assertBuilderEquals(b, "\x0e\x00\x00\x00\xd0\xa6\xd0\xbb\xd1\x97" \
-            "\xcf\x82\xcf\x83\xce\xb4\xce\xb5\x00\x00")
-
-        b.CreateString(u"フムアムカモケモ")
-        self.assertBuilderEquals(b, "\x18\x00\x00\x00\xef\xbe\x8c\xef\xbe\x91" \
-            "\xef\xbd\xb1\xef\xbe\x91\xef\xbd\xb6\xef\xbe\x93\xef\xbd\xb9\xef" \
-            "\xbe\x93\x00\x00\x00\x00\x0e\x00\x00\x00\xd0\xa6\xd0\xbb\xd1\x97" \
-            "\xcf\x82\xcf\x83\xce\xb4\xce\xb5\x00\x00")
-
-    def test_create_arbitrary_string(self):
-        b = flatbuffers.Builder(0)
-        s = "\x01\x02\x03"
-        b.CreateString(s) # Default encoding is utf-8.
-        # 0-terminated, no pad:
-        self.assertBuilderEquals(b, [3, 0, 0, 0, 1, 2, 3, 0])
-        s2 = "\x04\x05\x06\x07"
-        b.CreateString(s2) # Default encoding is utf-8.
-        # 0-terminated, 3-byte pad:
-        self.assertBuilderEquals(b, [4, 0, 0, 0, 4, 5, 6, 7, 0, 0, 0, 0,
-                                     3, 0, 0, 0, 1, 2, 3, 0])
-
-    def test_empty_vtable(self):
-        b = flatbuffers.Builder(0)
-        b.StartObject(0)
-        self.assertBuilderEquals(b, [])
-        b.EndObject()
-        self.assertBuilderEquals(b, [4, 0, 4, 0, 4, 0, 0, 0])
-
-    def test_vtable_with_one_true_bool(self):
-        b = flatbuffers.Builder(0)
-        self.assertBuilderEquals(b, [])
-        b.StartObject(1)
-        self.assertBuilderEquals(b, [])
-        b.PrependBoolSlot(0, True, False)
-        b.EndObject()
-        self.assertBuilderEquals(b, [
-            6, 0,  # vtable bytes
-            8, 0,  # length of object including vtable offset
-            7, 0,  # start of bool value
-            6, 0, 0, 0,  # offset for start of vtable (int32)
-            0, 0, 0,  # padded to 4 bytes
-            1,  # bool value
-        ])
-
-    def test_vtable_with_one_default_bool(self):
-        b = flatbuffers.Builder(0)
-        self.assertBuilderEquals(b, [])
-        b.StartObject(1)
-        self.assertBuilderEquals(b, [])
-        b.PrependBoolSlot(0, False, False)
-        b.EndObject()
-        self.assertBuilderEquals(b, [
-            6, 0,  # vtable bytes
-            4, 0,  # end of object from here
-            0, 0,  # entry 1 is zero
-            6, 0, 0, 0,  # offset for start of vtable (int32)
-        ])
-
-    def test_vtable_with_one_int16(self):
-        b = flatbuffers.Builder(0)
-        b.StartObject(1)
-        b.PrependInt16Slot(0, 0x789A, 0)
-        b.EndObject()
-        self.assertBuilderEquals(b, [
-            6, 0,  # vtable bytes
-            8, 0,  # end of object from here
-            6, 0,  # offset to value
-            6, 0, 0, 0,  # offset for start of vtable (int32)
-            0, 0,  # padding to 4 bytes
-            0x9A, 0x78,
-        ])
-
-    def test_vtable_with_two_int16(self):
-        b = flatbuffers.Builder(0)
-        b.StartObject(2)
-        b.PrependInt16Slot(0, 0x3456, 0)
-        b.PrependInt16Slot(1, 0x789A, 0)
-        b.EndObject()
-        self.assertBuilderEquals(b, [
-            8, 0,  # vtable bytes
-            8, 0,  # end of object from here
-            6, 0,  # offset to value 0
-            4, 0,  # offset to value 1
-            8, 0, 0, 0,  # offset for start of vtable (int32)
-            0x9A, 0x78,  # value 1
-            0x56, 0x34,  # value 0
-        ])
-
-    def test_vtable_with_int16_and_bool(self):
-        b = flatbuffers.Builder(0)
-        b.StartObject(2)
-        b.PrependInt16Slot(0, 0x3456, 0)
-        b.PrependBoolSlot(1, True, False)
-        b.EndObject()
-        self.assertBuilderEquals(b, [
-            8, 0,  # vtable bytes
-            8, 0,  # end of object from here
-            6, 0,  # offset to value 0
-            5, 0,  # offset to value 1
-            8, 0, 0, 0,  # offset for start of vtable (int32)
-            0,          # padding
-            1,          # value 1
-            0x56, 0x34,  # value 0
-        ])
-
-    def test_vtable_with_empty_vector(self):
-        b = flatbuffers.Builder(0)
-        b.StartVector(flatbuffers.number_types.Uint8Flags.bytewidth, 0, 1)
-        vecend = b.EndVector(0)
-        b.StartObject(1)
-        b.PrependUOffsetTRelativeSlot(0, vecend, 0)
-        b.EndObject()
-        self.assertBuilderEquals(b, [
-            6, 0,  # vtable bytes
-            8, 0,
-            4, 0,  # offset to vector offset
-            6, 0, 0, 0,  # offset for start of vtable (int32)
-            4, 0, 0, 0,
-            0, 0, 0, 0,  # length of vector (not in struct)
-        ])
-
-    def test_vtable_with_empty_vector_of_byte_and_some_scalars(self):
-        b = flatbuffers.Builder(0)
-        b.StartVector(flatbuffers.number_types.Uint8Flags.bytewidth, 0, 1)
-        vecend = b.EndVector(0)
-        b.StartObject(2)
-        b.PrependInt16Slot(0, 55, 0)
-        b.PrependUOffsetTRelativeSlot(1, vecend, 0)
-        b.EndObject()
-        self.assertBuilderEquals(b, [
-            8, 0,  # vtable bytes
-            12, 0,
-            10, 0,  # offset to value 0
-            4, 0,  # offset to vector offset
-            8, 0, 0, 0,  # vtable loc
-            8, 0, 0, 0,  # value 1
-            0, 0, 55, 0,  # value 0
-
-            0, 0, 0, 0,  # length of vector (not in struct)
-        ])
-
-    def test_vtable_with_1_int16_and_2vector_of_int16(self):
-        b = flatbuffers.Builder(0)
-        b.StartVector(flatbuffers.number_types.Int16Flags.bytewidth, 2, 1)
-        b.PrependInt16(0x1234)
-        b.PrependInt16(0x5678)
-        vecend = b.EndVector(2)
-        b.StartObject(2)
-        b.PrependUOffsetTRelativeSlot(1, vecend, 0)
-        b.PrependInt16Slot(0, 55, 0)
-        b.EndObject()
-        self.assertBuilderEquals(b, [
-            8, 0,  # vtable bytes
-            12, 0,  # length of object
-            6, 0,  # start of value 0 from end of vtable
-            8, 0,  # start of value 1 from end of buffer
-            8, 0, 0, 0,  # offset for start of vtable (int32)
-            0, 0,  # padding
-            55, 0,  # value 0
-            4, 0, 0, 0,  # vector position from here
-            2, 0, 0, 0,  # length of vector (uint32)
-            0x78, 0x56,  # vector value 1
-            0x34, 0x12,  # vector value 0
-        ])
-
-    def test_vtable_with_1_struct_of_1_int8__1_int16__1_int32(self):
-        b = flatbuffers.Builder(0)
-        b.StartObject(1)
-        b.Prep(4+4+4, 0)
-        b.PrependInt8(55)
-        b.Pad(3)
-        b.PrependInt16(0x1234)
-        b.Pad(2)
-        b.PrependInt32(0x12345678)
-        structStart = b.Offset()
-        b.PrependStructSlot(0, structStart, 0)
-        b.EndObject()
-        self.assertBuilderEquals(b, [
-            6, 0,  # vtable bytes
-            16, 0,  # end of object from here
-            4, 0,  # start of struct from here
-            6, 0, 0, 0,  # offset for start of vtable (int32)
-            0x78, 0x56, 0x34, 0x12,  # value 2
-            0, 0,  # padding
-            0x34, 0x12,  # value 1
-            0, 0, 0,  # padding
-            55,  # value 0
-        ])
-
-    def test_vtable_with_1_vector_of_2_struct_of_2_int8(self):
-        b = flatbuffers.Builder(0)
-        b.StartVector(flatbuffers.number_types.Int8Flags.bytewidth*2, 2, 1)
-        b.PrependInt8(33)
-        b.PrependInt8(44)
-        b.PrependInt8(55)
-        b.PrependInt8(66)
-        vecend = b.EndVector(2)
-        b.StartObject(1)
-        b.PrependUOffsetTRelativeSlot(0, vecend, 0)
-        b.EndObject()
-        self.assertBuilderEquals(b, [
-            6, 0,  # vtable bytes
-            8, 0,
-            4, 0,  # offset of vector offset
-            6, 0, 0, 0,  # offset for start of vtable (int32)
-            4, 0, 0, 0,  # vector start offset
-
-            2, 0, 0, 0,  # vector length
-            66,  # vector value 1,1
-            55,  # vector value 1,0
-            44,  # vector value 0,1
-            33,  # vector value 0,0
-        ])
-
-    def test_table_with_some_elements(self):
-        b = flatbuffers.Builder(0)
-        b.StartObject(2)
-        b.PrependInt8Slot(0, 33, 0)
-        b.PrependInt16Slot(1, 66, 0)
-        off = b.EndObject()
-        b.Finish(off)
-
-        self.assertBuilderEquals(b, [
-            12, 0, 0, 0,  # root of table: points to vtable offset
-
-            8, 0,  # vtable bytes
-            8, 0,  # end of object from here
-            7, 0,  # start of value 0
-            4, 0,  # start of value 1
-
-            8, 0, 0, 0,  # offset for start of vtable (int32)
-
-            66, 0,  # value 1
-            0,  # padding
-            33,  # value 0
-        ])
-
-    def test__one_unfinished_table_and_one_finished_table(self):
-        b = flatbuffers.Builder(0)
-        b.StartObject(2)
-        b.PrependInt8Slot(0, 33, 0)
-        b.PrependInt8Slot(1, 44, 0)
-        off = b.EndObject()
-        b.Finish(off)
-
-        b.StartObject(3)
-        b.PrependInt8Slot(0, 55, 0)
-        b.PrependInt8Slot(1, 66, 0)
-        b.PrependInt8Slot(2, 77, 0)
-        off = b.EndObject()
-        b.Finish(off)
-
-        self.assertBuilderEquals(b, [
-            16, 0, 0, 0,  # root of table: points to object
-            0, 0,  # padding
-
-            10, 0,  # vtable bytes
-            8, 0,  # size of object
-            7, 0,  # start of value 0
-            6, 0,  # start of value 1
-            5, 0,  # start of value 2
-            10, 0, 0, 0,  # offset for start of vtable (int32)
-            0,  # padding
-            77,  # value 2
-            66,  # value 1
-            55,  # value 0
-
-            12, 0, 0, 0,  # root of table: points to object
-
-            8, 0,  # vtable bytes
-            8, 0,  # size of object
-            7, 0,  # start of value 0
-            6, 0,  # start of value 1
-            8, 0, 0, 0,  # offset for start of vtable (int32)
-            0, 0,  # padding
-            44,  # value 1
-            33,  # value 0
-        ])
-
-    def test_a_bunch_of_bools(self):
-        b = flatbuffers.Builder(0)
-        b.StartObject(8)
-        b.PrependBoolSlot(0, True, False)
-        b.PrependBoolSlot(1, True, False)
-        b.PrependBoolSlot(2, True, False)
-        b.PrependBoolSlot(3, True, False)
-        b.PrependBoolSlot(4, True, False)
-        b.PrependBoolSlot(5, True, False)
-        b.PrependBoolSlot(6, True, False)
-        b.PrependBoolSlot(7, True, False)
-        off = b.EndObject()
-        b.Finish(off)
-
-        self.assertBuilderEquals(b, [
-            24, 0, 0, 0,  # root of table: points to vtable offset
-
-            20, 0,  # vtable bytes
-            12, 0,  # size of object
-            11, 0,  # start of value 0
-            10, 0,  # start of value 1
-            9, 0,  # start of value 2
-            8, 0,  # start of value 3
-            7, 0,  # start of value 4
-            6, 0,  # start of value 5
-            5, 0,  # start of value 6
-            4, 0,  # start of value 7
-            20, 0, 0, 0,  # vtable offset
-
-            1,  # value 7
-            1,  # value 6
-            1,  # value 5
-            1,  # value 4
-            1,  # value 3
-            1,  # value 2
-            1,  # value 1
-            1,  # value 0
-        ])
-
-    def test_three_bools(self):
-        b = flatbuffers.Builder(0)
-        b.StartObject(3)
-        b.PrependBoolSlot(0, True, False)
-        b.PrependBoolSlot(1, True, False)
-        b.PrependBoolSlot(2, True, False)
-        off = b.EndObject()
-        b.Finish(off)
-
-        self.assertBuilderEquals(b, [
-            16, 0, 0, 0,  # root of table: points to vtable offset
-
-            0, 0,  # padding
-
-            10, 0,  # vtable bytes
-            8, 0,  # size of object
-            7, 0,  # start of value 0
-            6, 0,  # start of value 1
-            5, 0,  # start of value 2
-            10, 0, 0, 0,  # vtable offset from here
-
-            0,  # padding
-            1,  # value 2
-            1,  # value 1
-            1,  # value 0
-        ])
-
-    def test_some_floats(self):
-        b = flatbuffers.Builder(0)
-        b.StartObject(1)
-        b.PrependFloat32Slot(0, 1.0, 0.0)
-        off = b.EndObject()
-
-        self.assertBuilderEquals(b, [
-            6, 0,  # vtable bytes
-            8, 0,  # size of object
-            4, 0,  # start of value 0
-            6, 0, 0, 0,  # vtable offset
-
-            0, 0, 128, 63,  # value 0
-        ])
-
-
-def make_monster_from_generated_code():
-    ''' Use generated code to build the example Monster. '''
-
-    b = flatbuffers.Builder(0)
-    string = b.CreateString("MyMonster")
-    test1 = b.CreateString("test1")
-    test2 = b.CreateString("test2")
-    fred = b.CreateString("Fred")
-
-    MyGame.Example.Monster.MonsterStartInventoryVector(b, 5)
-    b.PrependByte(4)
-    b.PrependByte(3)
-    b.PrependByte(2)
-    b.PrependByte(1)
-    b.PrependByte(0)
-    inv = b.EndVector(5)
-
-    MyGame.Example.Monster.MonsterStart(b)
-    MyGame.Example.Monster.MonsterAddName(b, fred)
-    mon2 = MyGame.Example.Monster.MonsterEnd(b)
-
-    MyGame.Example.Monster.MonsterStartTest4Vector(b, 2)
-    MyGame.Example.Test.CreateTest(b, 10, 20)
-    MyGame.Example.Test.CreateTest(b, 30, 40)
-    test4 = b.EndVector(2)
-
-    MyGame.Example.Monster.MonsterStartTestarrayofstringVector(b, 2)
-    b.PrependUOffsetTRelative(test2)
-    b.PrependUOffsetTRelative(test1)
-    testArrayOfString = b.EndVector(2)
-
-    MyGame.Example.Monster.MonsterStart(b)
-
-    pos = MyGame.Example.Vec3.CreateVec3(b, 1.0, 2.0, 3.0, 3.0, 2, 5, 6)
-    MyGame.Example.Monster.MonsterAddPos(b, pos)
-
-    MyGame.Example.Monster.MonsterAddHp(b, 80)
-    MyGame.Example.Monster.MonsterAddName(b, string)
-    MyGame.Example.Monster.MonsterAddInventory(b, inv)
-    MyGame.Example.Monster.MonsterAddTestType(b, 1)
-    MyGame.Example.Monster.MonsterAddTest(b, mon2)
-    MyGame.Example.Monster.MonsterAddTest4(b, test4)
-    MyGame.Example.Monster.MonsterAddTestarrayofstring(b, testArrayOfString)
-    mon = MyGame.Example.Monster.MonsterEnd(b)
-
-    b.Finish(mon)
-
-    return b.Bytes, b.Head()
-
-
-class TestAllCodePathsOfExampleSchema(unittest.TestCase):
-    def setUp(self, *args, **kwargs):
-        super(TestAllCodePathsOfExampleSchema, self).setUp(*args, **kwargs)
-
-        b = flatbuffers.Builder(0)
-        MyGame.Example.Monster.MonsterStart(b)
-        gen_mon = MyGame.Example.Monster.MonsterEnd(b)
-        b.Finish(gen_mon)
-
-        self.mon = MyGame.Example.Monster.Monster.GetRootAsMonster(b.Bytes,
-                                                                   b.Head())
-
-    def test_default_monster_pos(self):
-        self.assertTrue(self.mon.Pos() is None)
-
-    def test_nondefault_monster_mana(self):
-        b = flatbuffers.Builder(0)
-        MyGame.Example.Monster.MonsterStart(b)
-        MyGame.Example.Monster.MonsterAddMana(b, 50)
-        mon = MyGame.Example.Monster.MonsterEnd(b)
-        b.Finish(mon)
-
-        got_mon = MyGame.Example.Monster.Monster.GetRootAsMonster(b.Bytes,
-                                                                  b.Head())
-        self.assertEqual(50, got_mon.Mana())
-
-    def test_default_monster_hp(self):
-        self.assertEqual(100, self.mon.Hp())
-
-    def test_default_monster_name(self):
-        self.assertEqual('', self.mon.Name())
-
-    def test_default_monster_inventory_item(self):
-        self.assertEqual(0, self.mon.Inventory(0))
-
-    def test_default_monster_inventory_length(self):
-        self.assertEqual(0, self.mon.InventoryLength())
-
-    def test_default_monster_color(self):
-        self.assertEqual(MyGame.Example.Color.Color.Blue, self.mon.Color())
-
-    def test_nondefault_monster_color(self):
-        b = flatbuffers.Builder(0)
-        color = MyGame.Example.Color.Color.Red
-        MyGame.Example.Monster.MonsterStart(b)
-        MyGame.Example.Monster.MonsterAddColor(b, color)
-        mon = MyGame.Example.Monster.MonsterEnd(b)
-        b.Finish(mon)
-
-        mon2 = MyGame.Example.Monster.Monster.GetRootAsMonster(b.Bytes,
-                                                               b.Head())
-        self.assertEqual(MyGame.Example.Color.Color.Red, mon2.Color())
-
-    def test_default_monster_testtype(self):
-        self.assertEqual(0, self.mon.TestType())
-
-    def test_default_monster_test_field(self):
-        self.assertEqual(None, self.mon.Test())
-
-    def test_default_monster_test4_item(self):
-        self.assertEqual(None, self.mon.Test4(0))
-
-    def test_default_monster_test4_length(self):
-        self.assertEqual(0, self.mon.Test4Length())
-
-    def test_default_monster_testarrayofstring(self):
-        self.assertEqual("", self.mon.Testarrayofstring(0))
-
-    def test_default_monster_testarrayofstring_length(self):
-        self.assertEqual(0, self.mon.TestarrayofstringLength())
-
-    def test_default_monster_testarrayoftables(self):
-        self.assertEqual(None, self.mon.Testarrayoftables(0))
-
-    def test_nondefault_monster_testarrayoftables(self):
-        b = flatbuffers.Builder(0)
-
-        # make a child Monster within a vector of Monsters:
-        MyGame.Example.Monster.MonsterStart(b)
-        MyGame.Example.Monster.MonsterAddHp(b, 99)
-        sub_monster = MyGame.Example.Monster.MonsterEnd(b)
-
-        # build the vector:
-        MyGame.Example.Monster.MonsterStartTestarrayoftablesVector(b, 1)
-        b.PrependUOffsetTRelative(sub_monster)
-        vec = b.EndVector(1)
-
-        # make the parent monster and include the vector of Monster:
-        MyGame.Example.Monster.MonsterStart(b)
-        MyGame.Example.Monster.MonsterAddTestarrayoftables(b, vec)
-        mon = MyGame.Example.Monster.MonsterEnd(b)
-        b.Finish(mon)
-
-        # inspect the resulting data:
-        mon2 = MyGame.Example.Monster.Monster.GetRootAsMonster(b.Output(), 0)
-        self.assertEqual(99, mon2.Testarrayoftables(0).Hp())
-        self.assertEqual(1, mon2.TestarrayoftablesLength())
-
-    def test_default_monster_testarrayoftables_length(self):
-        self.assertEqual(0, self.mon.TestarrayoftablesLength())
-
-    def test_nondefault_monster_enemy(self):
-        b = flatbuffers.Builder(0)
-
-        # make an Enemy object:
-        MyGame.Example.Monster.MonsterStart(b)
-        MyGame.Example.Monster.MonsterAddHp(b, 88)
-        enemy = MyGame.Example.Monster.MonsterEnd(b)
-        b.Finish(enemy)
-
-        # make the parent monster and include the vector of Monster:
-        MyGame.Example.Monster.MonsterStart(b)
-        MyGame.Example.Monster.MonsterAddEnemy(b, enemy)
-        mon = MyGame.Example.Monster.MonsterEnd(b)
-        b.Finish(mon)
-
-        # inspect the resulting data:
-        mon2 = MyGame.Example.Monster.Monster.GetRootAsMonster(b.Bytes,
-                                                               b.Head())
-        self.assertEqual(88, mon2.Enemy().Hp())
-
-    def test_default_monster_testnestedflatbuffer(self):
-        self.assertEqual(0, self.mon.Testnestedflatbuffer(0))
-
-    def test_default_monster_testnestedflatbuffer_length(self):
-        self.assertEqual(0, self.mon.TestnestedflatbufferLength())
-
-    def test_nondefault_monster_testnestedflatbuffer(self):
-        b = flatbuffers.Builder(0)
-
-        MyGame.Example.Monster.MonsterStartTestnestedflatbufferVector(b, 3)
-        b.PrependByte(4)
-        b.PrependByte(2)
-        b.PrependByte(0)
-        sub_buf = b.EndVector(3)
-
-        # make the parent monster and include the vector of Monster:
-        MyGame.Example.Monster.MonsterStart(b)
-        MyGame.Example.Monster.MonsterAddTestnestedflatbuffer(b, sub_buf)
-        mon = MyGame.Example.Monster.MonsterEnd(b)
-        b.Finish(mon)
-
-        # inspect the resulting data:
-        mon2 = MyGame.Example.Monster.Monster.GetRootAsMonster(b.Bytes,
-                                                               b.Head())
-        self.assertEqual(3, mon2.TestnestedflatbufferLength())
-        self.assertEqual(0, mon2.Testnestedflatbuffer(0))
-        self.assertEqual(2, mon2.Testnestedflatbuffer(1))
-        self.assertEqual(4, mon2.Testnestedflatbuffer(2))
-
-    def test_nondefault_monster_testempty(self):
-        b = flatbuffers.Builder(0)
-
-        # make a Stat object:
-        MyGame.Example.Stat.StatStart(b)
-        MyGame.Example.Stat.StatAddVal(b, 123)
-        my_stat = MyGame.Example.Stat.StatEnd(b)
-        b.Finish(my_stat)
-
-        # include the stat object in a monster:
-        MyGame.Example.Monster.MonsterStart(b)
-        MyGame.Example.Monster.MonsterAddTestempty(b, my_stat)
-        mon = MyGame.Example.Monster.MonsterEnd(b)
-        b.Finish(mon)
-
-        # inspect the resulting data:
-        mon2 = MyGame.Example.Monster.Monster.GetRootAsMonster(b.Bytes,
-                                                               b.Head())
-        self.assertEqual(123, mon2.Testempty().Val())
-
-    def test_default_monster_testbool(self):
-        self.assertFalse(self.mon.Testbool())
-
-    def test_nondefault_monster_testbool(self):
-        b = flatbuffers.Builder(0)
-        MyGame.Example.Monster.MonsterStart(b)
-        MyGame.Example.Monster.MonsterAddTestbool(b, True)
-        mon = MyGame.Example.Monster.MonsterEnd(b)
-        b.Finish(mon)
-
-        # inspect the resulting data:
-        mon2 = MyGame.Example.Monster.Monster.GetRootAsMonster(b.Bytes,
-                                                               b.Head())
-        self.assertTrue(mon2.Testbool())
-
-    def test_default_monster_testhashes(self):
-        self.assertEqual(0, self.mon.Testhashs32Fnv1())
-        self.assertEqual(0, self.mon.Testhashu32Fnv1())
-        self.assertEqual(0, self.mon.Testhashs64Fnv1())
-        self.assertEqual(0, self.mon.Testhashu64Fnv1())
-        self.assertEqual(0, self.mon.Testhashs32Fnv1a())
-        self.assertEqual(0, self.mon.Testhashu32Fnv1a())
-        self.assertEqual(0, self.mon.Testhashs64Fnv1a())
-        self.assertEqual(0, self.mon.Testhashu64Fnv1a())
-
-    def test_nondefault_monster_testhashes(self):
-        b = flatbuffers.Builder(0)
-        MyGame.Example.Monster.MonsterStart(b)
-        MyGame.Example.Monster.MonsterAddTesthashs32Fnv1(b, 1)
-        MyGame.Example.Monster.MonsterAddTesthashu32Fnv1(b, 2)
-        MyGame.Example.Monster.MonsterAddTesthashs64Fnv1(b, 3)
-        MyGame.Example.Monster.MonsterAddTesthashu64Fnv1(b, 4)
-        MyGame.Example.Monster.MonsterAddTesthashs32Fnv1a(b, 5)
-        MyGame.Example.Monster.MonsterAddTesthashu32Fnv1a(b, 6)
-        MyGame.Example.Monster.MonsterAddTesthashs64Fnv1a(b, 7)
-        MyGame.Example.Monster.MonsterAddTesthashu64Fnv1a(b, 8)
-        mon = MyGame.Example.Monster.MonsterEnd(b)
-        b.Finish(mon)
-
-        # inspect the resulting data:
-        mon2 = MyGame.Example.Monster.Monster.GetRootAsMonster(b.Bytes,
-                                                               b.Head())
-        self.assertEqual(1, mon2.Testhashs32Fnv1())
-        self.assertEqual(2, mon2.Testhashu32Fnv1())
-        self.assertEqual(3, mon2.Testhashs64Fnv1())
-        self.assertEqual(4, mon2.Testhashu64Fnv1())
-        self.assertEqual(5, mon2.Testhashs32Fnv1a())
-        self.assertEqual(6, mon2.Testhashu32Fnv1a())
-        self.assertEqual(7, mon2.Testhashs64Fnv1a())
-        self.assertEqual(8, mon2.Testhashu64Fnv1a())
-
-    def test_getrootas_for_nonroot_table(self):
-        b = flatbuffers.Builder(0)
-        string = b.CreateString("MyStat")
-
-        MyGame.Example.Stat.StatStart(b)
-        MyGame.Example.Stat.StatAddId(b, string)
-        MyGame.Example.Stat.StatAddVal(b, 12345678)
-        MyGame.Example.Stat.StatAddCount(b, 12345)
-        stat = MyGame.Example.Stat.StatEnd(b)
-        b.Finish(stat)
-
-        stat2 = MyGame.Example.Stat.Stat.GetRootAsStat(b.Bytes, b.Head())
-
-        self.assertEqual(b"MyStat", stat2.Id())
-        self.assertEqual(12345678, stat2.Val())
-        self.assertEqual(12345, stat2.Count())
-
-
-class TestVtableDeduplication(unittest.TestCase):
-    ''' TestVtableDeduplication verifies that vtables are deduplicated. '''
-
-    def test_vtable_deduplication(self):
-        b = flatbuffers.Builder(0)
-
-        b.StartObject(4)
-        b.PrependByteSlot(0, 0, 0)
-        b.PrependByteSlot(1, 11, 0)
-        b.PrependByteSlot(2, 22, 0)
-        b.PrependInt16Slot(3, 33, 0)
-        obj0 = b.EndObject()
-
-        b.StartObject(4)
-        b.PrependByteSlot(0, 0, 0)
-        b.PrependByteSlot(1, 44, 0)
-        b.PrependByteSlot(2, 55, 0)
-        b.PrependInt16Slot(3, 66, 0)
-        obj1 = b.EndObject()
-
-        b.StartObject(4)
-        b.PrependByteSlot(0, 0, 0)
-        b.PrependByteSlot(1, 77, 0)
-        b.PrependByteSlot(2, 88, 0)
-        b.PrependInt16Slot(3, 99, 0)
-        obj2 = b.EndObject()
-
-        got = b.Bytes[b.Head():]
-
-        want = bytearray([
-            240, 255, 255, 255,  # == -12. offset to dedupped vtable.
-            99, 0,
-            88,
-            77,
-            248, 255, 255, 255,  # == -8. offset to dedupped vtable.
-            66, 0,
-            55,
-            44,
-            12, 0,
-            8, 0,
-            0, 0,
-            7, 0,
-            6, 0,
-            4, 0,
-            12, 0, 0, 0,
-            33, 0,
-            22,
-            11,
-        ])
-
-        self.assertEqual((len(want), want), (len(got), got))
-
-        table0 = flatbuffers.table.Table(b.Bytes, len(b.Bytes) - obj0)
-        table1 = flatbuffers.table.Table(b.Bytes, len(b.Bytes) - obj1)
-        table2 = flatbuffers.table.Table(b.Bytes, len(b.Bytes) - obj2)
-
-        def _checkTable(tab, voffsett_value, b, c, d):
-            # vtable size
-            got = tab.GetVOffsetTSlot(0, 0)
-            self.assertEqual(12, got, 'case 0, 0')
-
-            # object size
-            got = tab.GetVOffsetTSlot(2, 0)
-            self.assertEqual(8, got, 'case 2, 0')
-
-            # default value
-            got = tab.GetVOffsetTSlot(4, 0)
-            self.assertEqual(voffsett_value, got, 'case 4, 0')
-
-            got = tab.GetSlot(6, 0, N.Uint8Flags)
-            self.assertEqual(b, got, 'case 6, 0')
-
-            val = tab.GetSlot(8, 0, N.Uint8Flags)
-            self.assertEqual(c, val, 'failed 8, 0')
-
-            got = tab.GetSlot(10, 0, N.Uint8Flags)
-            self.assertEqual(d, got, 'failed 10, 0')
-
-        _checkTable(table0, 0, 11, 22, 33)
-        _checkTable(table1, 0, 44, 55, 66)
-        _checkTable(table2, 0, 77, 88, 99)
-
-
-class TestExceptions(unittest.TestCase):
-    def test_object_is_nested_error(self):
-        b = flatbuffers.Builder(0)
-        b.StartObject(0)
-        assertRaises(self, lambda: b.StartObject(0),
-                     flatbuffers.builder.IsNestedError)
-
-    def test_object_is_not_nested_error(self):
-        b = flatbuffers.Builder(0)
-        assertRaises(self, lambda: b.EndObject(),
-                     flatbuffers.builder.IsNotNestedError)
-
-    def test_struct_is_not_inline_error(self):
-        b = flatbuffers.Builder(0)
-        b.StartObject(0)
-        assertRaises(self, lambda: b.PrependStructSlot(0, 1, 0),
-                     flatbuffers.builder.StructIsNotInlineError)
-
-    def test_unreachable_error(self):
-        b = flatbuffers.Builder(0)
-        assertRaises(self, lambda: b.PrependUOffsetTRelative(1),
-                     flatbuffers.builder.OffsetArithmeticError)
-
-    def test_create_string_is_nested_error(self):
-        b = flatbuffers.Builder(0)
-        b.StartObject(0)
-        s = 'test1'
-        assertRaises(self, lambda: b.CreateString(s),
-                     flatbuffers.builder.IsNestedError)
-
-    def test_finished_bytes_error(self):
-        b = flatbuffers.Builder(0)
-        assertRaises(self, lambda: b.Output(),
-                     flatbuffers.builder.BuilderNotFinishedError)
-
-
-def CheckAgainstGoldDataGo():
-    try:
-        gen_buf, gen_off = make_monster_from_generated_code()
-        fn = 'monsterdata_go_wire.mon'
-        if not os.path.exists(fn):
-            print('Go-generated data does not exist, failed.')
-            return False
-
-        # would like to use a context manager here, but it's less
-        # backwards-compatible:
-        f = open(fn, 'rb')
-        go_wire_data = f.read()
-        f.close()
-
-        CheckReadBuffer(bytearray(go_wire_data), 0)
-        if not bytearray(gen_buf[gen_off:]) == bytearray(go_wire_data):
-            raise AssertionError('CheckAgainstGoldDataGo failed')
-    except:
-        print('Failed to test against Go-generated test data.')
-        return False
-
-    print('Can read Go-generated test data, and Python generates bytewise identical data.')
-    return True
-
-
-def CheckAgainstGoldDataJava():
-    try:
-        gen_buf, gen_off = make_monster_from_generated_code()
-        fn = 'monsterdata_java_wire.mon'
-        if not os.path.exists(fn):
-            print('Java-generated data does not exist, failed.')
-            return False
-        f = open(fn, 'rb')
-        java_wire_data = f.read()
-        f.close()
-
-        CheckReadBuffer(bytearray(java_wire_data), 0)
-    except:
-        print('Failed to read Java-generated test data.')
-        return False
-
-    print('Can read Java-generated test data.')
-    return True
-
-
-class LCG(object):
-    ''' Include simple random number generator to ensure results will be the
-        same cross platform.
-        http://en.wikipedia.org/wiki/Park%E2%80%93Miller_random_number_generator '''
-
-    __slots__ = ['n']
-
-    InitialLCGSeed = 48271
-
-    def __init__(self):
-        self.n = self.InitialLCGSeed
-
-    def Reset(self):
-        self.n = self.InitialLCGSeed
-
-    def Next(self):
-        self.n = ((self.n * 279470273) % 4294967291) & 0xFFFFFFFF
-        return self.n
-
-
-def BenchmarkVtableDeduplication(count):
-    '''
-    BenchmarkVtableDeduplication measures the speed of vtable deduplication
-    by creating `prePop` vtables, then populating `count` objects with a
-    different single vtable.
-
-    When count is large (as in long benchmarks), memory usage may be high.
-    '''
-
-    prePop = 10
-    builder = flatbuffers.Builder(0)
-
-    # pre-populate some vtables:
-    for i in compat_range(prePop):
-        builder.StartObject(i)
-        for j in compat_range(i):
-            builder.PrependInt16Slot(j, j, 0)
-        builder.EndObject()
-
-    # benchmark deduplication of a new vtable:
-    def f():
-        builder.StartObject(prePop)
-        for j in compat_range(prePop):
-            builder.PrependInt16Slot(j, j, 0)
-        builder.EndObject()
-
-    duration = timeit.timeit(stmt=f, number=count)
-    rate = float(count) / duration
-    print(('vtable deduplication rate: %.2f/sec' % rate))
-
-
-def BenchmarkCheckReadBuffer(count, buf, off):
-    '''
-    BenchmarkCheckReadBuffer measures the speed of flatbuffer reading
-    by re-using the CheckReadBuffer function with the gold data.
-    '''
-
-    def f():
-        CheckReadBuffer(buf, off)
-
-    duration = timeit.timeit(stmt=f, number=count)
-    rate = float(count) / duration
-    data = float(len(buf) * count) / float(1024 * 1024)
-    data_rate = data / float(duration)
-
-    print(('traversed %d %d-byte flatbuffers in %.2fsec: %.2f/sec, %.2fMB/sec')
-          % (count, len(buf), duration, rate, data_rate))
-
-
-def BenchmarkMakeMonsterFromGeneratedCode(count, length):
-    '''
-    BenchmarkMakeMonsterFromGeneratedCode measures the speed of flatbuffer
-    creation by re-using the make_monster_from_generated_code function for
-    generating gold data examples.
-    '''
-
-    duration = timeit.timeit(stmt=make_monster_from_generated_code,
-                             number=count)
-    rate = float(count) / duration
-    data = float(length * count) / float(1024 * 1024)
-    data_rate = data / float(duration)
-
-    print(('built %d %d-byte flatbuffers in %.2fsec: %.2f/sec, %.2fMB/sec' % \
-           (count, length, duration, rate, data_rate)))
-
-
-def backward_compatible_run_tests(**kwargs):
-    if PY_VERSION < (2, 6):
-        sys.stderr.write("Python version less than 2.6 are not supported")
-        sys.stderr.flush()
-        return False
-
-    # python2.6 has a reduced-functionality unittest.main function:
-    if PY_VERSION == (2, 6):
-        try:
-            unittest.main(**kwargs)
-        except SystemExit as e:
-            if not e.code == 0:
-                return False
-        return True
-
-    # python2.7 and above let us not exit once unittest.main is run:
-    kwargs['exit'] = False
-    kwargs['verbosity'] = 0
-    ret = unittest.main(**kwargs)
-    if ret.result.errors or ret.result.failures:
-        return False
-
-    return True
-
-def main():
-    import os
-    import sys
-    if not len(sys.argv) == 4:
-       sys.stderr.write('Usage: %s <benchmark vtable count>'
-                        '<benchmark read count> <benchmark build count>\n'
-                        % sys.argv[0])
-       sys.stderr.write('       Provide COMPARE_GENERATED_TO_GO=1   to check'
-                        'for bytewise comparison to Go data.\n')
-       sys.stderr.write('       Provide COMPARE_GENERATED_TO_JAVA=1 to check'
-                        'for bytewise comparison to Java data.\n')
-       sys.stderr.flush()
-       sys.exit(1)
-
-    kwargs = dict(argv=sys.argv[:-3])
-
-    # run tests, and run some language comparison checks if needed:
-    success = backward_compatible_run_tests(**kwargs)
-    if success and os.environ.get('COMPARE_GENERATED_TO_GO', 0) == "1":
-        success = success and CheckAgainstGoldDataGo()
-    if success and os.environ.get('COMPARE_GENERATED_TO_JAVA', 0) == "1":
-        success = success and CheckAgainstGoldDataJava()
-
-    if not success:
-        sys.stderr.write('Tests failed, skipping benchmarks.\n')
-        sys.stderr.flush()
-        sys.exit(1)
-
-    # run benchmarks (if 0, they will be a noop):
-    bench_vtable = int(sys.argv[1])
-    bench_traverse = int(sys.argv[2])
-    bench_build = int(sys.argv[3])
-    if bench_vtable:
-        BenchmarkVtableDeduplication(bench_vtable)
-    if bench_traverse:
-        buf, off = make_monster_from_generated_code()
-        BenchmarkCheckReadBuffer(bench_traverse, buf, off)
-    if bench_build:
-        buf, off = make_monster_from_generated_code()
-        BenchmarkMakeMonsterFromGeneratedCode(bench_build, len(buf))
-
-if __name__ == '__main__':
-    main()
diff --git a/third_party/flatbuffers/tests/test.cpp b/third_party/flatbuffers/tests/test.cpp
deleted file mode 100644
index cc632bb..0000000
--- a/third_party/flatbuffers/tests/test.cpp
+++ /dev/null
@@ -1,1558 +0,0 @@
-/*
- * Copyright 2014 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "flatbuffers/flatbuffers.h"
-#include "flatbuffers/idl.h"
-#include "flatbuffers/util.h"
-
-#include "monster_test_generated.h"
-#include "namespace_test/namespace_test1_generated.h"
-#include "namespace_test/namespace_test2_generated.h"
-#include "union_vector/union_vector_generated.h"
-
-#ifndef FLATBUFFERS_CPP98_STL
-  #include <random>
-#endif
-
-#include "flatbuffers/flexbuffers.h"
-
-using namespace MyGame::Example;
-
-#ifdef __ANDROID__
-  #include <android/log.h>
-  #define TEST_OUTPUT_LINE(...) \
-    __android_log_print(ANDROID_LOG_INFO, "FlatBuffers", __VA_ARGS__)
-  #define FLATBUFFERS_NO_FILE_TESTS
-#else
-  #define TEST_OUTPUT_LINE(...) \
-    { printf(__VA_ARGS__); printf("\n"); }
-#endif
-
-int testing_fails = 0;
-
-void TestFail(const char *expval, const char *val, const char *exp,
-              const char *file, int line) {
-  TEST_OUTPUT_LINE("TEST FAILED: %s:%d, %s (%s) != %s", file, line,
-                   exp, expval, val);
-  assert(0);
-  testing_fails++;
-}
-
-void TestEqStr(const char *expval, const char *val, const char *exp,
-               const char *file, int line) {
-  if (strcmp(expval, val) != 0) {
-    TestFail(expval, val, exp, file, line);
-  }
-}
-
-template<typename T, typename U>
-void TestEq(T expval, U val, const char *exp, const char *file, int line) {
-  if (U(expval) != val) {
-    TestFail(flatbuffers::NumToString(expval).c_str(),
-             flatbuffers::NumToString(val).c_str(),
-             exp, file, line);
-  }
-}
-
-#define TEST_EQ(exp, val) TestEq(exp,         val,   #exp, __FILE__, __LINE__)
-#define TEST_NOTNULL(exp) TestEq(exp == NULL, false, #exp, __FILE__, __LINE__)
-#define TEST_EQ_STR(exp, val) TestEqStr(exp,  val,   #exp, __FILE__, __LINE__)
-
-// Include simple random number generator to ensure results will be the
-// same cross platform.
-// http://en.wikipedia.org/wiki/Park%E2%80%93Miller_random_number_generator
-uint32_t lcg_seed = 48271;
-uint32_t lcg_rand() {
-    return lcg_seed = ((uint64_t)lcg_seed * 279470273UL) % 4294967291UL;
-}
-void lcg_reset() { lcg_seed = 48271; }
-
-// example of how to build up a serialized buffer algorithmically:
-flatbuffers::unique_ptr_t CreateFlatBufferTest(std::string &buffer) {
-  flatbuffers::FlatBufferBuilder builder;
-
-  auto vec = Vec3(1, 2, 3, 0, Color_Red, Test(10, 20));
-
-  auto name = builder.CreateString("MyMonster");
-
-  unsigned char inv_data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
-  auto inventory = builder.CreateVector(inv_data, 10);
-
-  // Alternatively, create the vector first, and fill in data later:
-  // unsigned char *inv_buf = nullptr;
-  // auto inventory = builder.CreateUninitializedVector<unsigned char>(
-  //                                                              10, &inv_buf);
-  // memcpy(inv_buf, inv_data, 10);
-
-  Test tests[] = { Test(10, 20), Test(30, 40) };
-  auto testv = builder.CreateVectorOfStructs(tests, 2);
-
-  // create monster with very few fields set:
-  // (same functionality as CreateMonster below, but sets fields manually)
-  flatbuffers::Offset<Monster> mlocs[3];
-  auto fred = builder.CreateString("Fred");
-  auto barney = builder.CreateString("Barney");
-  auto wilma = builder.CreateString("Wilma");
-  MonsterBuilder mb1(builder);
-  mb1.add_name(fred);
-  mlocs[0] = mb1.Finish();
-  MonsterBuilder mb2(builder);
-  mb2.add_name(barney);
-  mb2.add_hp(1000);
-  mlocs[1] = mb2.Finish();
-  MonsterBuilder mb3(builder);
-  mb3.add_name(wilma);
-  mlocs[2] = mb3.Finish();
-
-  // Create an array of strings. Also test string pooling, and lambdas.
-  const char *names[] = { "bob", "fred", "bob", "fred" };
-  auto vecofstrings =
-      builder.CreateVector<flatbuffers::Offset<flatbuffers::String>>(4,
-        [&](size_t i) {
-    return builder.CreateSharedString(names[i]);
-  });
-
-  // Creating vectors of strings in one convenient call.
-  std::vector<std::string> names2;
-  names2.push_back("jane");
-  names2.push_back("mary");
-  auto vecofstrings2 = builder.CreateVectorOfStrings(names2);
-
-  // Create an array of sorted tables, can be used with binary search when read:
-  auto vecoftables = builder.CreateVectorOfSortedTables(mlocs, 3);
-
-  // Create an array of sorted structs,
-  // can be used with binary search when read:
-  std::vector<Ability> abilities;
-  abilities.push_back(Ability(4, 40));
-  abilities.push_back(Ability(3, 30));
-  abilities.push_back(Ability(2, 20));
-  abilities.push_back(Ability(1, 10));
-  auto vecofstructs = builder.CreateVectorOfSortedStructs(&abilities);
-
-  // shortcut for creating monster with all fields set:
-  auto mloc = CreateMonster(builder, &vec, 150, 80, name, inventory, Color_Blue,
-                            Any_Monster, mlocs[1].Union(), // Store a union.
-                            testv, vecofstrings, vecoftables, 0, 0, 0, false,
-                            0, 0, 0, 0, 0, 0, 0, 0, 0, 3.14159f, 3.0f, 0.0f,
-                            vecofstrings2, vecofstructs);
-
-  FinishMonsterBuffer(builder, mloc);
-
-  #ifdef FLATBUFFERS_TEST_VERBOSE
-  // print byte data for debugging:
-  auto p = builder.GetBufferPointer();
-  for (flatbuffers::uoffset_t i = 0; i < builder.GetSize(); i++)
-    printf("%d ", p[i]);
-  #endif
-
-  // return the buffer for the caller to use.
-  auto bufferpointer =
-    reinterpret_cast<const char *>(builder.GetBufferPointer());
-  buffer.assign(bufferpointer, bufferpointer + builder.GetSize());
-
-  return builder.ReleaseBufferPointer();
-}
-
-//  example of accessing a buffer loaded in memory:
-void AccessFlatBufferTest(const uint8_t *flatbuf, size_t length,
-                          bool pooled = true) {
-
-  // First, verify the buffers integrity (optional)
-  flatbuffers::Verifier verifier(flatbuf, length);
-  TEST_EQ(VerifyMonsterBuffer(verifier), true);
-
-  std::vector<uint8_t> test_buff;
-  test_buff.resize(length * 2);
-  std::memcpy(&test_buff[0], flatbuf , length);
-  std::memcpy(&test_buff[length], flatbuf , length);
-
-  flatbuffers::Verifier verifierl(&test_buff[0], length - 1);
-  TEST_EQ(VerifyMonsterBuffer(verifierl), false);
-  TEST_EQ(verifierl.GetComputedSize(), 0);
-
-  flatbuffers::Verifier verifier1(&test_buff[0], length);
-  TEST_EQ(VerifyMonsterBuffer(verifier1), true);
-  TEST_EQ(verifier1.GetComputedSize(), length);
-
-  flatbuffers::Verifier verifier2(&test_buff[length], length);
-  TEST_EQ(VerifyMonsterBuffer(verifier2), true);
-  TEST_EQ(verifier2.GetComputedSize(), length);
-
-  TEST_EQ(strcmp(MonsterIdentifier(), "MONS"), 0);
-  TEST_EQ(MonsterBufferHasIdentifier(flatbuf), true);
-  TEST_EQ(strcmp(MonsterExtension(), "mon"), 0);
-
-  // Access the buffer from the root.
-  auto monster = GetMonster(flatbuf);
-
-  TEST_EQ(monster->hp(), 80);
-  TEST_EQ(monster->mana(), 150);  // default
-  TEST_EQ_STR(monster->name()->c_str(), "MyMonster");
-  // Can't access the following field, it is deprecated in the schema,
-  // which means accessors are not generated:
-  // monster.friendly()
-
-  auto pos = monster->pos();
-  TEST_NOTNULL(pos);
-  TEST_EQ(pos->z(), 3);
-  TEST_EQ(pos->test3().a(), 10);
-  TEST_EQ(pos->test3().b(), 20);
-
-  auto inventory = monster->inventory();
-  TEST_EQ(VectorLength(inventory), 10UL);  // Works even if inventory is null.
-  TEST_NOTNULL(inventory);
-  unsigned char inv_data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
-  for (auto it = inventory->begin(); it != inventory->end(); ++it)
-    TEST_EQ(*it, inv_data[it - inventory->begin()]);
-
-  TEST_EQ(monster->color(), Color_Blue);
-
-  // Example of accessing a union:
-  TEST_EQ(monster->test_type(), Any_Monster);  // First make sure which it is.
-  auto monster2 = reinterpret_cast<const Monster *>(monster->test());
-  TEST_NOTNULL(monster2);
-  TEST_EQ_STR(monster2->name()->c_str(), "Fred");
-
-  // Example of accessing a vector of strings:
-  auto vecofstrings = monster->testarrayofstring();
-  TEST_EQ(vecofstrings->Length(), 4U);
-  TEST_EQ_STR(vecofstrings->Get(0)->c_str(), "bob");
-  TEST_EQ_STR(vecofstrings->Get(1)->c_str(), "fred");
-  if (pooled) {
-    // These should have pointer equality because of string pooling.
-    TEST_EQ(vecofstrings->Get(0)->c_str(), vecofstrings->Get(2)->c_str());
-    TEST_EQ(vecofstrings->Get(1)->c_str(), vecofstrings->Get(3)->c_str());
-  }
-
-  auto vecofstrings2 = monster->testarrayofstring2();
-  if (vecofstrings2) {
-    TEST_EQ(vecofstrings2->Length(), 2U);
-    TEST_EQ_STR(vecofstrings2->Get(0)->c_str(), "jane");
-    TEST_EQ_STR(vecofstrings2->Get(1)->c_str(), "mary");
-  }
-
-  // Example of accessing a vector of tables:
-  auto vecoftables = monster->testarrayoftables();
-  TEST_EQ(vecoftables->Length(), 3U);
-  for (auto it = vecoftables->begin(); it != vecoftables->end(); ++it)
-    TEST_EQ(strlen(it->name()->c_str()) >= 4, true);
-  TEST_EQ_STR(vecoftables->Get(0)->name()->c_str(), "Barney");
-  TEST_EQ(vecoftables->Get(0)->hp(), 1000);
-  TEST_EQ_STR(vecoftables->Get(1)->name()->c_str(), "Fred");
-  TEST_EQ_STR(vecoftables->Get(2)->name()->c_str(), "Wilma");
-  TEST_NOTNULL(vecoftables->LookupByKey("Barney"));
-  TEST_NOTNULL(vecoftables->LookupByKey("Fred"));
-  TEST_NOTNULL(vecoftables->LookupByKey("Wilma"));
-
-  // Test accessing a vector of sorted structs
-  auto vecofstructs = monster->testarrayofsortedstruct();
-  if (vecofstructs) {  // not filled in monster_test.bfbs
-    for (flatbuffers::uoffset_t i = 0; i < vecofstructs->size()-1; i++) {
-      auto left = vecofstructs->Get(i);
-      auto right = vecofstructs->Get(i+1);
-      TEST_EQ(true, (left->KeyCompareLessThan(right)));
-    }
-    TEST_NOTNULL(vecofstructs->LookupByKey(3));
-    TEST_EQ(static_cast<const Ability*>(nullptr), vecofstructs->LookupByKey(5));
-  }
-
-  // Since Flatbuffers uses explicit mechanisms to override the default
-  // compiler alignment, double check that the compiler indeed obeys them:
-  // (Test consists of a short and byte):
-  TEST_EQ(flatbuffers::AlignOf<Test>(), 2UL);
-  TEST_EQ(sizeof(Test), 4UL);
-
-  auto tests = monster->test4();
-  TEST_NOTNULL(tests);
-  auto test_0 = tests->Get(0);
-  auto test_1 = tests->Get(1);
-  TEST_EQ(test_0->a(), 10);
-  TEST_EQ(test_0->b(), 20);
-  TEST_EQ(test_1->a(), 30);
-  TEST_EQ(test_1->b(), 40);
-  for (auto it = tests->begin(); it != tests->end(); ++it) {
-    TEST_EQ(it->a() == 10 || it->a() == 30, true);  // Just testing iterators.
-  }
-
-  // Checking for presence of fields:
-  TEST_EQ(flatbuffers::IsFieldPresent(monster, Monster::VT_HP), true);
-  TEST_EQ(flatbuffers::IsFieldPresent(monster, Monster::VT_MANA), false);
-
-  // Obtaining a buffer from a root:
-  TEST_EQ(GetBufferStartFromRootPointer(monster), flatbuf);
-}
-
-// Change a FlatBuffer in-place, after it has been constructed.
-void MutateFlatBuffersTest(uint8_t *flatbuf, std::size_t length) {
-  // Get non-const pointer to root.
-  auto monster = GetMutableMonster(flatbuf);
-
-  // Each of these tests mutates, then tests, then set back to the original,
-  // so we can test that the buffer in the end still passes our original test.
-  auto hp_ok = monster->mutate_hp(10);
-  TEST_EQ(hp_ok, true);  // Field was present.
-  TEST_EQ(monster->hp(), 10);
-  // Mutate to default value
-  auto hp_ok_default = monster->mutate_hp(100);
-  TEST_EQ(hp_ok_default, true);  // Field was present.
-  TEST_EQ(monster->hp(), 100);
-  // Test that mutate to default above keeps field valid for further mutations
-  auto hp_ok_2 = monster->mutate_hp(20);
-  TEST_EQ(hp_ok_2, true);
-  TEST_EQ(monster->hp(), 20);
-  monster->mutate_hp(80);
-
-  // Monster originally at 150 mana (default value)
-  auto mana_default_ok = monster->mutate_mana(150);  // Mutate to default value.
-  TEST_EQ(mana_default_ok, true);  // Mutation should succeed, because default value.
-  TEST_EQ(monster->mana(), 150);
-  auto mana_ok = monster->mutate_mana(10);
-  TEST_EQ(mana_ok, false);  // Field was NOT present, because default value.
-  TEST_EQ(monster->mana(), 150);
-
-  // Mutate structs.
-  auto pos = monster->mutable_pos();
-  auto test3 = pos->mutable_test3();  // Struct inside a struct.
-  test3.mutate_a(50);                 // Struct fields never fail.
-  TEST_EQ(test3.a(), 50);
-  test3.mutate_a(10);
-
-  // Mutate vectors.
-  auto inventory = monster->mutable_inventory();
-  inventory->Mutate(9, 100);
-  TEST_EQ(inventory->Get(9), 100);
-  inventory->Mutate(9, 9);
-
-  auto tables = monster->mutable_testarrayoftables();
-  auto first = tables->GetMutableObject(0);
-  TEST_EQ(first->hp(), 1000);
-  first->mutate_hp(0);
-  TEST_EQ(first->hp(), 0);
-  first->mutate_hp(1000);
-
-  // Run the verifier and the regular test to make sure we didn't trample on
-  // anything.
-  AccessFlatBufferTest(flatbuf, length);
-}
-
-// Unpack a FlatBuffer into objects.
-void ObjectFlatBuffersTest(uint8_t *flatbuf) {
-  // Optional: we can specify resolver and rehasher functions to turn hashed
-  // strings into object pointers and back, to implement remote references
-  // and such.
-  auto resolver = flatbuffers::resolver_function_t(
-                    [](void **pointer_adr, flatbuffers::hash_value_t hash) {
-    (void)pointer_adr;
-    (void)hash;
-    // Don't actually do anything, leave variable null.
-  });
-  auto rehasher = flatbuffers::rehasher_function_t(
-                    [](void *pointer) -> flatbuffers::hash_value_t {
-    (void)pointer;
-    return 0;
-  });
-
-  // Turn a buffer into C++ objects.
-  auto monster1 = UnPackMonster(flatbuf, &resolver);
-
-  // Re-serialize the data.
-  flatbuffers::FlatBufferBuilder fbb1;
-  fbb1.Finish(CreateMonster(fbb1, monster1.get(), &rehasher),
-              MonsterIdentifier());
-
-  // Unpack again, and re-serialize again.
-  auto monster2 = UnPackMonster(fbb1.GetBufferPointer(), &resolver);
-  flatbuffers::FlatBufferBuilder fbb2;
-  fbb2.Finish(CreateMonster(fbb2, monster2.get(), &rehasher),
-              MonsterIdentifier());
-
-  // Now we've gone full round-trip, the two buffers should match.
-  auto len1 = fbb1.GetSize();
-  auto len2 = fbb2.GetSize();
-  TEST_EQ(len1, len2);
-  TEST_EQ(memcmp(fbb1.GetBufferPointer(), fbb2.GetBufferPointer(),
-                 len1), 0);
-
-  // Test it with the original buffer test to make sure all data survived.
-  AccessFlatBufferTest(fbb2.GetBufferPointer(), len2, false);
-
-  // Test accessing fields, similar to AccessFlatBufferTest above.
-  TEST_EQ(monster2->hp, 80);
-  TEST_EQ(monster2->mana, 150);  // default
-  TEST_EQ_STR(monster2->name.c_str(), "MyMonster");
-
-  auto &pos = monster2->pos;
-  TEST_NOTNULL(pos);
-  TEST_EQ(pos->z(), 3);
-  TEST_EQ(pos->test3().a(), 10);
-  TEST_EQ(pos->test3().b(), 20);
-
-  auto &inventory = monster2->inventory;
-  TEST_EQ(inventory.size(), 10UL);
-  unsigned char inv_data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
-  for (auto it = inventory.begin(); it != inventory.end(); ++it)
-    TEST_EQ(*it, inv_data[it - inventory.begin()]);
-
-  TEST_EQ(monster2->color, Color_Blue);
-
-  auto monster3 = monster2->test.AsMonster();
-  TEST_NOTNULL(monster3);
-  TEST_EQ_STR(monster3->name.c_str(), "Fred");
-
-  auto &vecofstrings = monster2->testarrayofstring;
-  TEST_EQ(vecofstrings.size(), 4U);
-  TEST_EQ_STR(vecofstrings[0].c_str(), "bob");
-  TEST_EQ_STR(vecofstrings[1].c_str(), "fred");
-
-  auto &vecofstrings2 = monster2->testarrayofstring2;
-  TEST_EQ(vecofstrings2.size(), 2U);
-  TEST_EQ_STR(vecofstrings2[0].c_str(), "jane");
-  TEST_EQ_STR(vecofstrings2[1].c_str(), "mary");
-
-  auto &vecoftables = monster2->testarrayoftables;
-  TEST_EQ(vecoftables.size(), 3U);
-  TEST_EQ_STR(vecoftables[0]->name.c_str(), "Barney");
-  TEST_EQ(vecoftables[0]->hp, 1000);
-  TEST_EQ_STR(vecoftables[1]->name.c_str(), "Fred");
-  TEST_EQ_STR(vecoftables[2]->name.c_str(), "Wilma");
-
-  auto &tests = monster2->test4;
-  TEST_EQ(tests[0].a(), 10);
-  TEST_EQ(tests[0].b(), 20);
-  TEST_EQ(tests[1].a(), 30);
-  TEST_EQ(tests[1].b(), 40);
-}
-
-// Prefix a FlatBuffer with a size field.
-void SizePrefixedTest() {
-  // Create size prefixed buffer.
-  flatbuffers::FlatBufferBuilder fbb;
-  fbb.FinishSizePrefixed(CreateMonster(fbb, 0, 200, 300,
-                                       fbb.CreateString("bob")));
-
-  // Verify it.
-  flatbuffers::Verifier verifier(fbb.GetBufferPointer(), fbb.GetSize());
-  TEST_EQ(verifier.VerifySizePrefixedBuffer<Monster>(nullptr), true);
-
-  // Access it.
-  auto m = flatbuffers::GetSizePrefixedRoot<MyGame::Example::Monster>(
-                                                        fbb.GetBufferPointer());
-  TEST_EQ(m->mana(), 200);
-  TEST_EQ(m->hp(), 300);
-  TEST_EQ_STR(m->name()->c_str(), "bob");
-}
-
-// example of parsing text straight into a buffer, and generating
-// text back from it:
-void ParseAndGenerateTextTest() {
-  // load FlatBuffer schema (.fbs) and JSON from disk
-  std::string schemafile;
-  std::string jsonfile;
-  TEST_EQ(flatbuffers::LoadFile(
-    "tests/monster_test.fbs", false, &schemafile), true);
-  TEST_EQ(flatbuffers::LoadFile(
-    "tests/monsterdata_test.golden", false, &jsonfile), true);
-
-  // parse schema first, so we can use it to parse the data after
-  flatbuffers::Parser parser;
-  const char *include_directories[] = { "tests", nullptr };
-  TEST_EQ(parser.Parse(schemafile.c_str(), include_directories), true);
-  TEST_EQ(parser.Parse(jsonfile.c_str(), include_directories), true);
-
-  // here, parser.builder_ contains a binary buffer that is the parsed data.
-
-  // First, verify it, just in case:
-  flatbuffers::Verifier verifier(parser.builder_.GetBufferPointer(),
-                                 parser.builder_.GetSize());
-  TEST_EQ(VerifyMonsterBuffer(verifier), true);
-
-  // to ensure it is correct, we now generate text back from the binary,
-  // and compare the two:
-  std::string jsongen;
-  auto result = GenerateText(parser, parser.builder_.GetBufferPointer(), &jsongen);
-  TEST_EQ(result, true);
-
-  if (jsongen != jsonfile) {
-    printf("%s----------------\n%s", jsongen.c_str(), jsonfile.c_str());
-    TEST_NOTNULL(NULL);
-  }
-}
-
-void ReflectionTest(uint8_t *flatbuf, size_t length) {
-  // Load a binary schema.
-  std::string bfbsfile;
-  TEST_EQ(flatbuffers::LoadFile(
-    "tests/monster_test.bfbs", true, &bfbsfile), true);
-
-  // Verify it, just in case:
-  flatbuffers::Verifier verifier(
-    reinterpret_cast<const uint8_t *>(bfbsfile.c_str()), bfbsfile.length());
-  TEST_EQ(reflection::VerifySchemaBuffer(verifier), true);
-
-  // Make sure the schema is what we expect it to be.
-  auto &schema = *reflection::GetSchema(bfbsfile.c_str());
-  auto root_table = schema.root_table();
-  TEST_EQ_STR(root_table->name()->c_str(), "MyGame.Example.Monster");
-  auto fields = root_table->fields();
-  auto hp_field_ptr = fields->LookupByKey("hp");
-  TEST_NOTNULL(hp_field_ptr);
-  auto &hp_field = *hp_field_ptr;
-  TEST_EQ_STR(hp_field.name()->c_str(), "hp");
-  TEST_EQ(hp_field.id(), 2);
-  TEST_EQ(hp_field.type()->base_type(), reflection::Short);
-  auto friendly_field_ptr = fields->LookupByKey("friendly");
-  TEST_NOTNULL(friendly_field_ptr);
-  TEST_NOTNULL(friendly_field_ptr->attributes());
-  TEST_NOTNULL(friendly_field_ptr->attributes()->LookupByKey("priority"));
-
-  // Make sure the table index is what we expect it to be.
-  auto pos_field_ptr = fields->LookupByKey("pos");
-  TEST_NOTNULL(pos_field_ptr);
-  TEST_EQ(pos_field_ptr->type()->base_type(), reflection::Obj);
-  auto pos_table_ptr = schema.objects()->Get(pos_field_ptr->type()->index());
-  TEST_NOTNULL(pos_table_ptr);
-  TEST_EQ_STR(pos_table_ptr->name()->c_str(), "MyGame.Example.Vec3");
-
-  // Now use it to dynamically access a buffer.
-  auto &root = *flatbuffers::GetAnyRoot(flatbuf);
-
-  // Verify the buffer first using reflection based verification
-  TEST_EQ(flatbuffers::Verify(schema, *schema.root_table(), flatbuf, length),
-          true);
-
-  auto hp = flatbuffers::GetFieldI<uint16_t>(root, hp_field);
-  TEST_EQ(hp, 80);
-
-  // Rather than needing to know the type, we can also get the value of
-  // any field as an int64_t/double/string, regardless of what it actually is.
-  auto hp_int64 = flatbuffers::GetAnyFieldI(root, hp_field);
-  TEST_EQ(hp_int64, 80);
-  auto hp_double = flatbuffers::GetAnyFieldF(root, hp_field);
-  TEST_EQ(hp_double, 80.0);
-  auto hp_string = flatbuffers::GetAnyFieldS(root, hp_field, &schema);
-  TEST_EQ_STR(hp_string.c_str(), "80");
-
-  // Get struct field through reflection
-  auto pos_struct = flatbuffers::GetFieldStruct(root, *pos_field_ptr);
-  TEST_NOTNULL(pos_struct);
-  TEST_EQ(flatbuffers::GetAnyFieldF(
-    *pos_struct, *pos_table_ptr->fields()->LookupByKey("z")), 3.0f);
-
-  auto test3_field = pos_table_ptr->fields()->LookupByKey("test3");
-  auto test3_struct = flatbuffers::GetFieldStruct(*pos_struct, *test3_field);
-  TEST_NOTNULL(test3_struct);
-  auto test3_object = schema.objects()->Get(test3_field->type()->index());
-
-  TEST_EQ(flatbuffers::GetAnyFieldF(
-    *test3_struct, *test3_object->fields()->LookupByKey("a")), 10);
-
-  // We can also modify it.
-  flatbuffers::SetField<uint16_t>(&root, hp_field, 200);
-  hp = flatbuffers::GetFieldI<uint16_t>(root, hp_field);
-  TEST_EQ(hp, 200);
-
-  // We can also set fields generically:
-  flatbuffers::SetAnyFieldI(&root, hp_field, 300);
-  hp_int64 = flatbuffers::GetAnyFieldI(root, hp_field);
-  TEST_EQ(hp_int64, 300);
-  flatbuffers::SetAnyFieldF(&root, hp_field, 300.5);
-  hp_int64 = flatbuffers::GetAnyFieldI(root, hp_field);
-  TEST_EQ(hp_int64, 300);
-  flatbuffers::SetAnyFieldS(&root, hp_field, "300");
-  hp_int64 = flatbuffers::GetAnyFieldI(root, hp_field);
-  TEST_EQ(hp_int64, 300);
-
-  // Test buffer is valid after the modifications
-  TEST_EQ(flatbuffers::Verify(schema, *schema.root_table(), flatbuf, length),
-          true);
-
-  // Reset it, for further tests.
-  flatbuffers::SetField<uint16_t>(&root, hp_field, 80);
-
-  // More advanced functionality: changing the size of items in-line!
-  // First we put the FlatBuffer inside an std::vector.
-  std::vector<uint8_t> resizingbuf(flatbuf, flatbuf + length);
-  // Find the field we want to modify.
-  auto &name_field = *fields->LookupByKey("name");
-  // Get the root.
-  // This time we wrap the result from GetAnyRoot in a smartpointer that
-  // will keep rroot valid as resizingbuf resizes.
-  auto rroot = flatbuffers::piv(flatbuffers::GetAnyRoot(resizingbuf.data()),
-                                resizingbuf);
-  SetString(schema, "totally new string", GetFieldS(**rroot, name_field),
-            &resizingbuf);
-  // Here resizingbuf has changed, but rroot is still valid.
-  TEST_EQ_STR(GetFieldS(**rroot, name_field)->c_str(), "totally new string");
-  // Now lets extend a vector by 100 elements (10 -> 110).
-  auto &inventory_field = *fields->LookupByKey("inventory");
-  auto rinventory = flatbuffers::piv(
-                     flatbuffers::GetFieldV<uint8_t>(**rroot, inventory_field),
-                     resizingbuf);
-  flatbuffers::ResizeVector<uint8_t>(schema, 110, 50, *rinventory,
-                                     &resizingbuf);
-  // rinventory still valid, so lets read from it.
-  TEST_EQ(rinventory->Get(10), 50);
-
-  // For reflection uses not covered already, there is a more powerful way:
-  // we can simply generate whatever object we want to add/modify in a
-  // FlatBuffer of its own, then add that to an existing FlatBuffer:
-  // As an example, let's add a string to an array of strings.
-  // First, find our field:
-  auto &testarrayofstring_field = *fields->LookupByKey("testarrayofstring");
-  // Find the vector value:
-  auto rtestarrayofstring = flatbuffers::piv(
-         flatbuffers::GetFieldV<flatbuffers::Offset<flatbuffers::String>>(
-           **rroot, testarrayofstring_field),
-         resizingbuf);
-  // It's a vector of 2 strings, to which we add one more, initialized to
-  // offset 0.
-  flatbuffers::ResizeVector<flatbuffers::Offset<flatbuffers::String>>(
-        schema, 3, 0, *rtestarrayofstring, &resizingbuf);
-  // Here we just create a buffer that contans a single string, but this
-  // could also be any complex set of tables and other values.
-  flatbuffers::FlatBufferBuilder stringfbb;
-  stringfbb.Finish(stringfbb.CreateString("hank"));
-  // Add the contents of it to our existing FlatBuffer.
-  // We do this last, so the pointer doesn't get invalidated (since it is
-  // at the end of the buffer):
-  auto string_ptr = flatbuffers::AddFlatBuffer(resizingbuf,
-                                               stringfbb.GetBufferPointer(),
-                                               stringfbb.GetSize());
-  // Finally, set the new value in the vector.
-  rtestarrayofstring->MutateOffset(2, string_ptr);
-  TEST_EQ_STR(rtestarrayofstring->Get(0)->c_str(), "bob");
-  TEST_EQ_STR(rtestarrayofstring->Get(2)->c_str(), "hank");
-  // Test integrity of all resize operations above.
-  flatbuffers::Verifier resize_verifier(
-        reinterpret_cast<const uint8_t *>(resizingbuf.data()),
-        resizingbuf.size());
-  TEST_EQ(VerifyMonsterBuffer(resize_verifier), true);
-
-  // Test buffer is valid using reflection as well
-  TEST_EQ(flatbuffers::Verify(schema, *schema.root_table(), resizingbuf.data(),
-                              resizingbuf.size()), true);
-
-  // As an additional test, also set it on the name field.
-  // Note: unlike the name change above, this just overwrites the offset,
-  // rather than changing the string in-place.
-  SetFieldT(*rroot, name_field, string_ptr);
-  TEST_EQ_STR(GetFieldS(**rroot, name_field)->c_str(), "hank");
-
-  // Using reflection, rather than mutating binary FlatBuffers, we can also copy
-  // tables and other things out of other FlatBuffers into a FlatBufferBuilder,
-  // either part or whole.
-  flatbuffers::FlatBufferBuilder fbb;
-  auto root_offset = flatbuffers::CopyTable(fbb, schema, *root_table,
-                                            *flatbuffers::GetAnyRoot(flatbuf),
-                                            true);
-  fbb.Finish(root_offset, MonsterIdentifier());
-  // Test that it was copied correctly:
-  AccessFlatBufferTest(fbb.GetBufferPointer(), fbb.GetSize());
-
-  // Test buffer is valid using reflection as well
-  TEST_EQ(flatbuffers::Verify(schema, *schema.root_table(),
-                              fbb.GetBufferPointer(), fbb.GetSize()), true);
-}
-
-// Parse a .proto schema, output as .fbs
-void ParseProtoTest() {
-  // load the .proto and the golden file from disk
-  std::string protofile;
-  std::string goldenfile;
-  TEST_EQ(flatbuffers::LoadFile(
-    "tests/prototest/test.proto", false, &protofile), true);
-  TEST_EQ(flatbuffers::LoadFile(
-    "tests/prototest/test.golden", false, &goldenfile), true);
-
-  flatbuffers::IDLOptions opts;
-  opts.include_dependence_headers = false;
-  opts.proto_mode = true;
-
-  // Parse proto.
-  flatbuffers::Parser parser(opts);
-  const char *include_directories[] = { "tests/prototest", nullptr };
-  TEST_EQ(parser.Parse(protofile.c_str(), include_directories), true);
-
-  // Generate fbs.
-  auto fbs = flatbuffers::GenerateFBS(parser, "test");
-
-  // Ensure generated file is parsable.
-  flatbuffers::Parser parser2;
-  TEST_EQ(parser2.Parse(fbs.c_str(), nullptr), true);
-
-  if (fbs != goldenfile) {
-    printf("%s----------------\n%s", fbs.c_str(), goldenfile.c_str());
-    TEST_NOTNULL(NULL);
-  }
-}
-
-template<typename T> void CompareTableFieldValue(flatbuffers::Table *table,
-                                                 flatbuffers::voffset_t voffset,
-                                                 T val) {
-  T read = table->GetField(voffset, static_cast<T>(0));
-  TEST_EQ(read, val);
-}
-
-// Low level stress/fuzz test: serialize/deserialize a variety of
-// different kinds of data in different combinations
-void FuzzTest1() {
-
-  // Values we're testing against: chosen to ensure no bits get chopped
-  // off anywhere, and also be different from eachother.
-  const uint8_t  bool_val   = true;
-  const int8_t   char_val   = -127;  // 0x81
-  const uint8_t  uchar_val  = 0xFF;
-  const int16_t  short_val  = -32222; // 0x8222;
-  const uint16_t ushort_val = 0xFEEE;
-  const int32_t  int_val    = 0x83333333;
-  const uint32_t uint_val   = 0xFDDDDDDD;
-  const int64_t  long_val   = 0x8444444444444444LL;
-  const uint64_t ulong_val  = 0xFCCCCCCCCCCCCCCCULL;
-  const float    float_val  = 3.14159f;
-  const double   double_val = 3.14159265359;
-
-  const int test_values_max = 11;
-  const flatbuffers::voffset_t fields_per_object = 4;
-  const int num_fuzz_objects = 10000;  // The higher, the more thorough :)
-
-  flatbuffers::FlatBufferBuilder builder;
-
-  lcg_reset();  // Keep it deterministic.
-
-  flatbuffers::uoffset_t objects[num_fuzz_objects];
-
-  // Generate num_fuzz_objects random objects each consisting of
-  // fields_per_object fields, each of a random type.
-  for (int i = 0; i < num_fuzz_objects; i++) {
-    auto start = builder.StartTable();
-    for (flatbuffers::voffset_t f = 0; f < fields_per_object; f++) {
-      int choice = lcg_rand() % test_values_max;
-      auto off = flatbuffers::FieldIndexToOffset(f);
-      switch (choice) {
-        case 0:  builder.AddElement<uint8_t >(off, bool_val,   0); break;
-        case 1:  builder.AddElement<int8_t  >(off, char_val,   0); break;
-        case 2:  builder.AddElement<uint8_t >(off, uchar_val,  0); break;
-        case 3:  builder.AddElement<int16_t >(off, short_val,  0); break;
-        case 4:  builder.AddElement<uint16_t>(off, ushort_val, 0); break;
-        case 5:  builder.AddElement<int32_t >(off, int_val,    0); break;
-        case 6:  builder.AddElement<uint32_t>(off, uint_val,   0); break;
-        case 7:  builder.AddElement<int64_t >(off, long_val,   0); break;
-        case 8:  builder.AddElement<uint64_t>(off, ulong_val,  0); break;
-        case 9:  builder.AddElement<float   >(off, float_val,  0); break;
-        case 10: builder.AddElement<double  >(off, double_val, 0); break;
-      }
-    }
-    objects[i] = builder.EndTable(start, fields_per_object);
-  }
-  builder.PreAlign<flatbuffers::largest_scalar_t>(0);  // Align whole buffer.
-
-  lcg_reset();  // Reset.
-
-  uint8_t *eob = builder.GetCurrentBufferPointer() + builder.GetSize();
-
-  // Test that all objects we generated are readable and return the
-  // expected values. We generate random objects in the same order
-  // so this is deterministic.
-  for (int i = 0; i < num_fuzz_objects; i++) {
-    auto table = reinterpret_cast<flatbuffers::Table *>(eob - objects[i]);
-    for (flatbuffers::voffset_t f = 0; f < fields_per_object; f++) {
-      int choice = lcg_rand() % test_values_max;
-      flatbuffers::voffset_t off = flatbuffers::FieldIndexToOffset(f);
-      switch (choice) {
-        case 0:  CompareTableFieldValue(table, off, bool_val  ); break;
-        case 1:  CompareTableFieldValue(table, off, char_val  ); break;
-        case 2:  CompareTableFieldValue(table, off, uchar_val ); break;
-        case 3:  CompareTableFieldValue(table, off, short_val ); break;
-        case 4:  CompareTableFieldValue(table, off, ushort_val); break;
-        case 5:  CompareTableFieldValue(table, off, int_val   ); break;
-        case 6:  CompareTableFieldValue(table, off, uint_val  ); break;
-        case 7:  CompareTableFieldValue(table, off, long_val  ); break;
-        case 8:  CompareTableFieldValue(table, off, ulong_val ); break;
-        case 9:  CompareTableFieldValue(table, off, float_val ); break;
-        case 10: CompareTableFieldValue(table, off, double_val); break;
-      }
-    }
-  }
-}
-
-// High level stress/fuzz test: generate a big schema and
-// matching json data in random combinations, then parse both,
-// generate json back from the binary, and compare with the original.
-void FuzzTest2() {
-  lcg_reset();  // Keep it deterministic.
-
-  const int num_definitions = 30;
-  const int num_struct_definitions = 5;  // Subset of num_definitions.
-  const int fields_per_definition = 15;
-  const int instances_per_definition = 5;
-  const int deprecation_rate = 10;        // 1 in deprecation_rate fields will
-                                          // be deprecated.
-
-  std::string schema = "namespace test;\n\n";
-
-  struct RndDef {
-    std::string instances[instances_per_definition];
-
-    // Since we're generating schema and corresponding data in tandem,
-    // this convenience function adds strings to both at once.
-    static void Add(RndDef (&definitions_l)[num_definitions],
-                    std::string &schema_l,
-                    const int instances_per_definition_l,
-                    const char *schema_add, const char *instance_add,
-                    int definition) {
-      schema_l += schema_add;
-      for (int i = 0; i < instances_per_definition_l; i++)
-        definitions_l[definition].instances[i] += instance_add;
-    }
-  };
-
-  #define AddToSchemaAndInstances(schema_add, instance_add) \
-    RndDef::Add(definitions, schema, instances_per_definition, \
-                schema_add, instance_add, definition)
-
-  #define Dummy() \
-    RndDef::Add(definitions, schema, instances_per_definition, \
-                "byte", "1", definition)
-
-  RndDef definitions[num_definitions];
-
-  // We are going to generate num_definitions, the first
-  // num_struct_definitions will be structs, the rest tables. For each
-  // generate random fields, some of which may be struct/table types
-  // referring to previously generated structs/tables.
-  // Simultanenously, we generate instances_per_definition JSON data
-  // definitions, which will have identical structure to the schema
-  // being generated. We generate multiple instances such that when creating
-  // hierarchy, we get some variety by picking one randomly.
-  for (int definition = 0; definition < num_definitions; definition++) {
-    std::string definition_name = "D" + flatbuffers::NumToString(definition);
-
-    bool is_struct = definition < num_struct_definitions;
-
-    AddToSchemaAndInstances(
-      ((is_struct ? "struct " : "table ") + definition_name + " {\n").c_str(),
-      "{\n");
-
-    for (int field = 0; field < fields_per_definition; field++) {
-      const bool is_last_field = field == fields_per_definition - 1;
-
-      // Deprecate 1 in deprecation_rate fields. Only table fields can be
-      // deprecated.
-      // Don't deprecate the last field to avoid dangling commas in JSON.
-      const bool deprecated = !is_struct &&
-                              !is_last_field &&
-                              (lcg_rand() % deprecation_rate == 0);
-
-      std::string field_name = "f" + flatbuffers::NumToString(field);
-      AddToSchemaAndInstances(("  " + field_name + ":").c_str(),
-                              deprecated ? "" : (field_name + ": ").c_str());
-      // Pick random type:
-      int base_type = lcg_rand() % (flatbuffers::BASE_TYPE_UNION + 1);
-      switch (base_type) {
-        case flatbuffers::BASE_TYPE_STRING:
-          if (is_struct) {
-            Dummy();  // No strings in structs.
-          } else {
-            AddToSchemaAndInstances("string", deprecated ? "" : "\"hi\"");
-          }
-          break;
-        case flatbuffers::BASE_TYPE_VECTOR:
-          if (is_struct) {
-            Dummy();  // No vectors in structs.
-          }
-          else {
-            AddToSchemaAndInstances("[ubyte]",
-                                    deprecated ? "" : "[\n0,\n1,\n255\n]");
-          }
-          break;
-        case flatbuffers::BASE_TYPE_NONE:
-        case flatbuffers::BASE_TYPE_UTYPE:
-        case flatbuffers::BASE_TYPE_STRUCT:
-        case flatbuffers::BASE_TYPE_UNION:
-          if (definition) {
-            // Pick a random previous definition and random data instance of
-            // that definition.
-            int defref = lcg_rand() % definition;
-            int instance = lcg_rand() % instances_per_definition;
-            AddToSchemaAndInstances(
-              ("D" + flatbuffers::NumToString(defref)).c_str(),
-              deprecated
-                ? ""
-                : definitions[defref].instances[instance].c_str());
-          } else {
-            // If this is the first definition, we have no definition we can
-            // refer to.
-            Dummy();
-          }
-          break;
-        case flatbuffers::BASE_TYPE_BOOL:
-          AddToSchemaAndInstances("bool", deprecated
-                                  ? ""
-                                  : (lcg_rand() % 2 ? "true" : "false"));
-          break;
-        default:
-          // All the scalar types.
-          schema += flatbuffers::kTypeNames[base_type];
-
-          if (!deprecated) {
-            // We want each instance to use its own random value.
-            for (int inst = 0; inst < instances_per_definition; inst++)
-              definitions[definition].instances[inst] +=
-              flatbuffers::NumToString(lcg_rand() % 128).c_str();
-          }
-      }
-      AddToSchemaAndInstances(
-        deprecated ? "(deprecated);\n" : ";\n",
-        deprecated ? "" : is_last_field ? "\n" : ",\n");
-    }
-    AddToSchemaAndInstances("}\n\n", "}");
-  }
-
-  schema += "root_type D" + flatbuffers::NumToString(num_definitions - 1);
-  schema += ";\n";
-
-  flatbuffers::Parser parser;
-
-  // Will not compare against the original if we don't write defaults
-  parser.builder_.ForceDefaults(true);
-
-  // Parse the schema, parse the generated data, then generate text back
-  // from the binary and compare against the original.
-  TEST_EQ(parser.Parse(schema.c_str()), true);
-
-  const std::string &json =
-    definitions[num_definitions - 1].instances[0] + "\n";
-
-  TEST_EQ(parser.Parse(json.c_str()), true);
-
-  std::string jsongen;
-  parser.opts.indent_step = 0;
-  auto result = GenerateText(parser, parser.builder_.GetBufferPointer(), &jsongen);
-  TEST_EQ(result, true);
-
-  if (jsongen != json) {
-    // These strings are larger than a megabyte, so we show the bytes around
-    // the first bytes that are different rather than the whole string.
-    size_t len = std::min(json.length(), jsongen.length());
-    for (size_t i = 0; i < len; i++) {
-      if (json[i] != jsongen[i]) {
-        i -= std::min(static_cast<size_t>(10), i); // show some context;
-        size_t end = std::min(len, i + 20);
-        for (; i < end; i++)
-          printf("at %d: found \"%c\", expected \"%c\"\n",
-               static_cast<int>(i), jsongen[i], json[i]);
-        break;
-      }
-    }
-    TEST_NOTNULL(NULL);
-  }
-
-  printf("%dk schema tested with %dk of json\n",
-         static_cast<int>(schema.length() / 1024),
-         static_cast<int>(json.length() / 1024));
-}
-
-// Test that parser errors are actually generated.
-void TestError(const char *src, const char *error_substr,
-               bool strict_json = false) {
-  flatbuffers::IDLOptions opts;
-  opts.strict_json = strict_json;
-  flatbuffers::Parser parser(opts);
-  TEST_EQ(parser.Parse(src), false);  // Must signal error
-  // Must be the error we're expecting
-  TEST_NOTNULL(strstr(parser.error_.c_str(), error_substr));
-}
-
-// Test that parsing errors occur as we'd expect.
-// Also useful for coverage, making sure these paths are run.
-void ErrorTest() {
-  // In order they appear in idl_parser.cpp
-  TestError("table X { Y:byte; } root_type X; { Y: 999 }", "does not fit");
-  TestError(".0", "floating point");
-  TestError("\"\0", "illegal");
-  TestError("\"\\q", "escape code");
-  TestError("table ///", "documentation");
-  TestError("@", "illegal");
-  TestError("table 1", "expecting");
-  TestError("table X { Y:[[int]]; }", "nested vector");
-  TestError("table X { Y:1; }", "illegal type");
-  TestError("table X { Y:int; Y:int; }", "field already");
-  TestError("struct X { Y:string; }", "only scalar");
-  TestError("struct X { Y:int (deprecated); }", "deprecate");
-  TestError("union Z { X } table X { Y:Z; } root_type X; { Y: {}, A:1 }",
-            "missing type field");
-  TestError("union Z { X } table X { Y:Z; } root_type X; { Y_type: 99, Y: {",
-            "type id");
-  TestError("table X { Y:int; } root_type X; { Z:", "unknown field");
-  TestError("table X { Y:int; } root_type X; { Y:", "string constant", true);
-  TestError("table X { Y:int; } root_type X; { \"Y\":1, }", "string constant",
-            true);
-  TestError("struct X { Y:int; Z:int; } table W { V:X; } root_type W; "
-            "{ V:{ Y:1 } }", "wrong number");
-  TestError("enum E:byte { A } table X { Y:E; } root_type X; { Y:U }",
-            "unknown enum value");
-  TestError("table X { Y:byte; } root_type X; { Y:; }", "starting");
-  TestError("enum X:byte { Y } enum X {", "enum already");
-  TestError("enum X:float {}", "underlying");
-  TestError("enum X:byte { Y, Y }", "value already");
-  TestError("enum X:byte { Y=2, Z=1 }", "ascending");
-  TestError("enum X:byte (bit_flags) { Y=8 }", "bit flag out");
-  TestError("table X { Y:int; } table X {", "datatype already");
-  TestError("struct X (force_align: 7) { Y:int; }", "force_align");
-  TestError("{}", "no root");
-  TestError("table X { Y:byte; } root_type X; { Y:1 } { Y:1 }", "one json");
-  TestError("root_type X;", "unknown root");
-  TestError("struct X { Y:int; } root_type X;", "a table");
-  TestError("union X { Y }", "referenced");
-  TestError("union Z { X } struct X { Y:int; }", "only tables");
-  TestError("table X { Y:[int]; YLength:int; }", "clash");
-  TestError("table X { Y:string = 1; }", "scalar");
-  TestError("table X { Y:byte; } root_type X; { Y:1, Y:2 }", "more than once");
-}
-
-template<typename T> T TestValue(const char *json, const char *type_name) {
-  flatbuffers::Parser parser;
-
-  // Simple schema.
-  TEST_EQ(parser.Parse(std::string("table X { Y:" + std::string(type_name) +
-                                   "; } root_type X;").c_str()), true);
-
-  TEST_EQ(parser.Parse(json), true);
-  auto root = flatbuffers::GetRoot<flatbuffers::Table>(
-                parser.builder_.GetBufferPointer());
-  return root->GetField<T>(flatbuffers::FieldIndexToOffset(0), 0);
-}
-
-bool FloatCompare(float a, float b) { return fabs(a - b) < 0.001; }
-
-// Additional parser testing not covered elsewhere.
-void ValueTest() {
-  // Test scientific notation numbers.
-  TEST_EQ(FloatCompare(TestValue<float>("{ Y:0.0314159e+2 }","float"),
-                       (float)3.14159), true);
-
-  // Test conversion functions.
-  TEST_EQ(FloatCompare(TestValue<float>("{ Y:cos(rad(180)) }","float"), -1),
-          true);
-
-  // Test negative hex constant.
-  TEST_EQ(TestValue<int>("{ Y:-0x80 }","int"), -128);
-
-  // Make sure we do unsigned 64bit correctly.
-  TEST_EQ(TestValue<uint64_t>("{ Y:12335089644688340133 }","ulong"),
-                              12335089644688340133ULL);
-}
-
-void EnumStringsTest() {
-  flatbuffers::Parser parser1;
-  TEST_EQ(parser1.Parse("enum E:byte { A, B, C } table T { F:[E]; }"
-                        "root_type T;"
-                        "{ F:[ A, B, \"C\", \"A B C\" ] }"), true);
-  flatbuffers::Parser parser2;
-  TEST_EQ(parser2.Parse("enum E:byte { A, B, C } table T { F:[int]; }"
-                        "root_type T;"
-                        "{ F:[ \"E.C\", \"E.A E.B E.C\" ] }"), true);
-}
-
-void IntegerOutOfRangeTest() {
-  TestError("table T { F:byte; } root_type T; { F:128 }",
-            "constant does not fit");
-  TestError("table T { F:byte; } root_type T; { F:-129 }",
-            "constant does not fit");
-  TestError("table T { F:ubyte; } root_type T; { F:256 }",
-            "constant does not fit");
-  TestError("table T { F:ubyte; } root_type T; { F:-1 }",
-            "constant does not fit");
-  TestError("table T { F:short; } root_type T; { F:32768 }",
-            "constant does not fit");
-  TestError("table T { F:short; } root_type T; { F:-32769 }",
-            "constant does not fit");
-  TestError("table T { F:ushort; } root_type T; { F:65536 }",
-            "constant does not fit");
-  TestError("table T { F:ushort; } root_type T; { F:-1 }",
-            "constant does not fit");
-  TestError("table T { F:int; } root_type T; { F:2147483648 }",
-            "constant does not fit");
-  TestError("table T { F:int; } root_type T; { F:-2147483649 }",
-            "constant does not fit");
-  TestError("table T { F:uint; } root_type T; { F:4294967296 }",
-            "constant does not fit");
-  TestError("table T { F:uint; } root_type T; { F:-1 }",
-            "constant does not fit");
-}
-
-void IntegerBoundaryTest() {
-  TEST_EQ(TestValue<int8_t>("{ Y:127 }","byte"), 127);
-  TEST_EQ(TestValue<int8_t>("{ Y:-128 }","byte"), -128);
-  TEST_EQ(TestValue<uint8_t>("{ Y:255 }","ubyte"), 255);
-  TEST_EQ(TestValue<uint8_t>("{ Y:0 }","ubyte"), 0);
-  TEST_EQ(TestValue<int16_t>("{ Y:32767 }","short"), 32767);
-  TEST_EQ(TestValue<int16_t>("{ Y:-32768 }","short"), -32768);
-  TEST_EQ(TestValue<uint16_t>("{ Y:65535 }","ushort"), 65535);
-  TEST_EQ(TestValue<uint16_t>("{ Y:0 }","ushort"), 0);
-  TEST_EQ(TestValue<int32_t>("{ Y:2147483647 }","int"), 2147483647);
-  TEST_EQ(TestValue<int32_t>("{ Y:-2147483648 }","int"), (-2147483647 - 1));
-  TEST_EQ(TestValue<uint32_t>("{ Y:4294967295 }","uint"), 4294967295);
-  TEST_EQ(TestValue<uint32_t>("{ Y:0 }","uint"), 0);
-  TEST_EQ(TestValue<int64_t>("{ Y:9223372036854775807 }","long"), 9223372036854775807);
-  TEST_EQ(TestValue<int64_t>("{ Y:-9223372036854775808 }","long"), (-9223372036854775807 - 1));
-  TEST_EQ(TestValue<uint64_t>("{ Y:18446744073709551615 }","ulong"), 18446744073709551615U);
-  TEST_EQ(TestValue<uint64_t>("{ Y:0 }","ulong"), 0);
-}
-
-void UnicodeTest() {
-  flatbuffers::Parser parser;
-  // Without setting allow_non_utf8 = true, we treat \x sequences as byte sequences
-  // which are then validated as UTF-8.
-  TEST_EQ(parser.Parse("table T { F:string; }"
-                       "root_type T;"
-                       "{ F:\"\\u20AC\\u00A2\\u30E6\\u30FC\\u30B6\\u30FC"
-                       "\\u5225\\u30B5\\u30A4\\u30C8\\xE2\\x82\\xAC\\u0080\\uD83D\\uDE0E\" }"),
-          true);
-  std::string jsongen;
-  parser.opts.indent_step = -1;
-  auto result = GenerateText(parser, parser.builder_.GetBufferPointer(), &jsongen);
-  TEST_EQ(result, true);
-  TEST_EQ(jsongen,
-          std::string(
-            "{F: \"\\u20AC\\u00A2\\u30E6\\u30FC\\u30B6\\u30FC"
-            "\\u5225\\u30B5\\u30A4\\u30C8\\u20AC\\u0080\\uD83D\\uDE0E\"}"));
-}
-
-void UnicodeTestAllowNonUTF8() {
-  flatbuffers::Parser parser;
-  parser.opts.allow_non_utf8 = true;
-  TEST_EQ(parser.Parse("table T { F:string; }"
-                       "root_type T;"
-                       "{ F:\"\\u20AC\\u00A2\\u30E6\\u30FC\\u30B6\\u30FC"
-                       "\\u5225\\u30B5\\u30A4\\u30C8\\x01\\x80\\u0080\\uD83D\\uDE0E\" }"), true);
-  std::string jsongen;
-  parser.opts.indent_step = -1;
-  auto result = GenerateText(parser, parser.builder_.GetBufferPointer(), &jsongen);
-  TEST_EQ(result, true);
-  TEST_EQ(jsongen,
-          std::string(
-            "{F: \"\\u20AC\\u00A2\\u30E6\\u30FC\\u30B6\\u30FC"
-            "\\u5225\\u30B5\\u30A4\\u30C8\\u0001\\x80\\u0080\\uD83D\\uDE0E\"}"));
-}
-
-void UnicodeTestGenerateTextFailsOnNonUTF8() {
-  flatbuffers::Parser parser;
-  // Allow non-UTF-8 initially to model what happens when we load a binary flatbuffer from disk
-  // which contains non-UTF-8 strings.
-  parser.opts.allow_non_utf8 = true;
-  TEST_EQ(parser.Parse("table T { F:string; }"
-                       "root_type T;"
-                       "{ F:\"\\u20AC\\u00A2\\u30E6\\u30FC\\u30B6\\u30FC"
-                       "\\u5225\\u30B5\\u30A4\\u30C8\\x01\\x80\\u0080\\uD83D\\uDE0E\" }"), true);
-  std::string jsongen;
-  parser.opts.indent_step = -1;
-  // Now, disallow non-UTF-8 (the default behavior) so GenerateText indicates failure.
-  parser.opts.allow_non_utf8 = false;
-  auto result = GenerateText(parser, parser.builder_.GetBufferPointer(), &jsongen);
-  TEST_EQ(result, false);
-}
-
-void UnicodeSurrogatesTest() {
-  flatbuffers::Parser parser;
-
-  TEST_EQ(
-    parser.Parse(
-      "table T { F:string (id: 0); }"
-      "root_type T;"
-      "{ F:\"\\uD83D\\uDCA9\"}"), true);
-  auto root = flatbuffers::GetRoot<flatbuffers::Table>(
-    parser.builder_.GetBufferPointer());
-  auto string = root->GetPointer<flatbuffers::String *>(
-    flatbuffers::FieldIndexToOffset(0));
-  TEST_EQ(strcmp(string->c_str(), "\xF0\x9F\x92\xA9"), 0);
-}
-
-void UnicodeInvalidSurrogatesTest() {
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\\uD800\"}", "unpaired high surrogate");
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\\uD800abcd\"}", "unpaired high surrogate");
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\\uD800\\n\"}", "unpaired high surrogate");
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\\uD800\\uD800\"}", "multiple high surrogates");
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\\uDC00\"}", "unpaired low surrogate");
-}
-
-void InvalidUTF8Test() {
-  // "1 byte" pattern, under min length of 2 bytes
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\x80\"}", "illegal UTF-8 sequence");
-  // 2 byte pattern, string too short
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\xDF\"}", "illegal UTF-8 sequence");
-  // 3 byte pattern, string too short
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\xEF\xBF\"}", "illegal UTF-8 sequence");
-  // 4 byte pattern, string too short
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\xF7\xBF\xBF\"}", "illegal UTF-8 sequence");
-  // "5 byte" pattern, string too short
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\xFB\xBF\xBF\xBF\"}", "illegal UTF-8 sequence");
-  // "6 byte" pattern, string too short
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\xFD\xBF\xBF\xBF\xBF\"}", "illegal UTF-8 sequence");
-  // "7 byte" pattern, string too short
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\xFE\xBF\xBF\xBF\xBF\xBF\"}", "illegal UTF-8 sequence");
-  // "5 byte" pattern, over max length of 4 bytes
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\xFB\xBF\xBF\xBF\xBF\"}", "illegal UTF-8 sequence");
-  // "6 byte" pattern, over max length of 4 bytes
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\xFD\xBF\xBF\xBF\xBF\xBF\"}", "illegal UTF-8 sequence");
-  // "7 byte" pattern, over max length of 4 bytes
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\xFE\xBF\xBF\xBF\xBF\xBF\xBF\"}", "illegal UTF-8 sequence");
-
-  // Three invalid encodings for U+000A (\n, aka NEWLINE)
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\xC0\x8A\"}", "illegal UTF-8 sequence");
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\xE0\x80\x8A\"}", "illegal UTF-8 sequence");
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\xF0\x80\x80\x8A\"}", "illegal UTF-8 sequence");
-
-  // Two invalid encodings for U+00A9 (COPYRIGHT SYMBOL)
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\xE0\x81\xA9\"}", "illegal UTF-8 sequence");
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\xF0\x80\x81\xA9\"}", "illegal UTF-8 sequence");
-
-  // Invalid encoding for U+20AC (EURO SYMBOL)
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    "{ F:\"\xF0\x82\x82\xAC\"}", "illegal UTF-8 sequence");
-
-  // UTF-16 surrogate values between U+D800 and U+DFFF cannot be encoded in UTF-8
-  TestError(
-    "table T { F:string; }"
-    "root_type T;"
-    // U+10400 "encoded" as U+D801 U+DC00
-    "{ F:\"\xED\xA0\x81\xED\xB0\x80\"}", "illegal UTF-8 sequence");
-}
-
-void UnknownFieldsTest() {
-  flatbuffers::IDLOptions opts;
-  opts.skip_unexpected_fields_in_json = true;
-  flatbuffers::Parser parser(opts);
-
-  TEST_EQ(parser.Parse("table T { str:string; i:int;}"
-                       "root_type T;"
-                       "{ str:\"test\","
-                       "unknown_string:\"test\","
-                       "\"unknown_string\":\"test\","
-                       "unknown_int:10,"
-                       "unknown_float:1.0,"
-                       "unknown_array: [ 1, 2, 3, 4],"
-                       "unknown_object: { i: 10 },"
-                       "\"unknown_object\": { \"i\": 10 },"
-                       "i:10}"), true);
-
-  std::string jsongen;
-  parser.opts.indent_step = -1;
-  auto result = GenerateText(parser, parser.builder_.GetBufferPointer(), &jsongen);
-  TEST_EQ(result, true);
-  TEST_EQ(jsongen == "{str: \"test\",i: 10}", true);
-}
-
-void ParseUnionTest() {
-  // Unions must be parseable with the type field following the object.
-  flatbuffers::Parser parser;
-  TEST_EQ(parser.Parse("table T { A:int; }"
-                       "union U { T }"
-                       "table V { X:U; }"
-                       "root_type V;"
-                       "{ X:{ A:1 }, X_type: T }"), true);
-  // Unions must be parsable with prefixed namespace.
-  flatbuffers::Parser parser2;
-  TEST_EQ(parser2.Parse("namespace N; table A {} namespace; union U { N.A }"
-                        "table B { e:U; } root_type B;"
-                        "{ e_type: N_A, e: {} }"), true);
-}
-
-void UnionVectorTest() {
-  // load FlatBuffer fbs schema.
-  // TODO: load a JSON file with such a vector when JSON support is ready.
-  std::string schemafile;
-  TEST_EQ(flatbuffers::LoadFile(
-    "tests/union_vector/union_vector.fbs", false, &schemafile), true);
-
-  // parse schema.
-  flatbuffers::IDLOptions idl_opts;
-  idl_opts.lang_to_generate |= flatbuffers::IDLOptions::kCpp;
-  flatbuffers::Parser parser(idl_opts);
-  const char *include_directories[] = { "tests/union_vector", nullptr };
-  TEST_EQ(parser.Parse(schemafile.c_str(), include_directories), true);
-
-  flatbuffers::FlatBufferBuilder fbb;
-
-  // union types.
-  std::vector<uint8_t> types;
-  types.push_back(static_cast<uint8_t>(Character_Belle));
-  types.push_back(static_cast<uint8_t>(Character_MuLan));
-  types.push_back(static_cast<uint8_t>(Character_BookFan));
-  types.push_back(static_cast<uint8_t>(Character_Other));
-  types.push_back(static_cast<uint8_t>(Character_Unused));
-
-  // union values.
-  std::vector<flatbuffers::Offset<void>> characters;
-  characters.push_back(fbb.CreateStruct(BookReader(/*books_read=*/7)).Union());
-  characters.push_back(CreateAttacker(fbb, /*sword_attack_damage=*/5).Union());
-  characters.push_back(fbb.CreateStruct(BookReader(/*books_read=*/2)).Union());
-  characters.push_back(fbb.CreateString("Other").Union());
-  characters.push_back(fbb.CreateString("Unused").Union());
-
-  // create Movie.
-  const auto movie_offset =
-      CreateMovie(fbb,
-                  Character_Rapunzel,
-                  fbb.CreateStruct(Rapunzel(/*hair_length=*/6)).Union(),
-                  fbb.CreateVector(types),
-                  fbb.CreateVector(characters));
-  FinishMovieBuffer(fbb, movie_offset);
-  auto buf = fbb.GetBufferPointer();
-
-  flatbuffers::Verifier verifier(buf, fbb.GetSize());
-  TEST_EQ(VerifyMovieBuffer(verifier), true);
-
-  auto flat_movie = GetMovie(buf);
-
-  auto TestMovie = [](const Movie *movie) {
-    TEST_EQ(movie->main_character_type() == Character_Rapunzel, true);
-
-    auto cts = movie->characters_type();
-    TEST_EQ(movie->characters_type()->size(), 5);
-    TEST_EQ(cts->GetEnum<Character>(0) == Character_Belle, true);
-    TEST_EQ(cts->GetEnum<Character>(1) == Character_MuLan, true);
-    TEST_EQ(cts->GetEnum<Character>(2) == Character_BookFan, true);
-    TEST_EQ(cts->GetEnum<Character>(3) == Character_Other, true);
-    TEST_EQ(cts->GetEnum<Character>(4) == Character_Unused, true);
-
-    auto rapunzel = movie->main_character_as_Rapunzel();
-    TEST_EQ(rapunzel->hair_length(), 6);
-
-    auto cs = movie->characters();
-    TEST_EQ(cs->size(), 5);
-    auto belle = cs->GetAs<BookReader>(0);
-    TEST_EQ(belle->books_read(), 7);
-    auto mu_lan = cs->GetAs<Attacker>(1);
-    TEST_EQ(mu_lan->sword_attack_damage(), 5);
-    auto book_fan = cs->GetAs<BookReader>(2);
-    TEST_EQ(book_fan->books_read(), 2);
-    auto other = cs->GetAsString(3);
-    TEST_EQ_STR(other->c_str(), "Other");
-    auto unused = cs->GetAsString(4);
-    TEST_EQ_STR(unused->c_str(), "Unused");
-  };
-
-  TestMovie(flat_movie);
-
-  auto movie_object = flat_movie->UnPack();
-  TEST_EQ(movie_object->main_character.AsRapunzel()->hair_length(), 6);
-  TEST_EQ(movie_object->characters[0].AsBelle()->books_read(), 7);
-  TEST_EQ(movie_object->characters[1].AsMuLan()->sword_attack_damage, 5);
-  TEST_EQ(movie_object->characters[2].AsBookFan()->books_read(), 2);
-  TEST_EQ_STR(movie_object->characters[3].AsOther()->c_str(), "Other");
-  TEST_EQ_STR(movie_object->characters[4].AsUnused()->c_str(), "Unused");
-
-  fbb.Clear();
-  fbb.Finish(Movie::Pack(fbb, movie_object));
-
-  auto repacked_movie = GetMovie(fbb.GetBufferPointer());
-
-  TestMovie(repacked_movie);
-}
-
-void ConformTest() {
-  flatbuffers::Parser parser;
-  TEST_EQ(parser.Parse("table T { A:int; } enum E:byte { A }"), true);
-
-  auto test_conform = [&](const char *test, const char *expected_err) {
-    flatbuffers::Parser parser2;
-    TEST_EQ(parser2.Parse(test), true);
-    auto err = parser2.ConformTo(parser);
-    TEST_NOTNULL(strstr(err.c_str(), expected_err));
-  };
-
-  test_conform("table T { A:byte; }", "types differ for field");
-  test_conform("table T { B:int; A:int; }", "offsets differ for field");
-  test_conform("table T { A:int = 1; }", "defaults differ for field");
-  test_conform("table T { B:float; }", "field renamed to different type");
-  test_conform("enum E:byte { B, A }", "values differ for enum");
-}
-
-void FlexBuffersTest() {
-  flexbuffers::Builder slb(512,
-                           flexbuffers::BUILDER_FLAG_SHARE_KEYS_AND_STRINGS);
-
-  // Write the equivalent of:
-  // { vec: [ -100, "Fred", 4.0 ], bar: [ 1, 2, 3 ], foo: 100 }
-  slb.Map([&]() {
-     slb.Vector("vec", [&]() {
-      slb += -100;  // Equivalent to slb.Add(-100) or slb.Int(-100);
-      slb += "Fred";
-      slb.IndirectFloat(4.0f);
-    });
-    int ints[] = { 1, 2, 3 };
-    slb.Vector("bar", ints, 3);
-    slb.FixedTypedVector("bar3", ints, 3);
-    slb.Double("foo", 100);
-    slb.Map("mymap", [&]() {
-      slb.String("foo", "Fred");  // Testing key and string reuse.
-    });
-  });
-  slb.Finish();
-
-  for (size_t i = 0; i < slb.GetBuffer().size(); i++)
-    printf("%d ", slb.GetBuffer().data()[i]);
-  printf("\n");
-
-  auto map = flexbuffers::GetRoot(slb.GetBuffer()).AsMap();
-  TEST_EQ(map.size(), 5);
-  auto vec = map["vec"].AsVector();
-  TEST_EQ(vec.size(), 3);
-  TEST_EQ(vec[0].AsInt64(), -100);
-  TEST_EQ_STR(vec[1].AsString().c_str(), "Fred");
-  TEST_EQ(vec[1].AsInt64(), 0);  // Number parsing failed.
-  TEST_EQ(vec[2].AsDouble(), 4.0);
-  TEST_EQ(vec[2].AsString().IsTheEmptyString(), true);  // Wrong Type.
-  TEST_EQ_STR(vec[2].AsString().c_str(), "");  // This still works though.
-  TEST_EQ_STR(vec[2].ToString().c_str(), "4");  // Or have it converted.
-  auto tvec = map["bar"].AsTypedVector();
-  TEST_EQ(tvec.size(), 3);
-  TEST_EQ(tvec[2].AsInt8(), 3);
-  auto tvec3 = map["bar3"].AsFixedTypedVector();
-  TEST_EQ(tvec3.size(), 3);
-  TEST_EQ(tvec3[2].AsInt8(), 3);
-  TEST_EQ(map["foo"].AsUInt8(), 100);
-  TEST_EQ(map["unknown"].IsNull(), true);
-  auto mymap = map["mymap"].AsMap();
-  // These should be equal by pointer equality, since key and value are shared.
-  TEST_EQ(mymap.Keys()[0].AsKey(), map.Keys()[2].AsKey());
-  TEST_EQ(mymap.Values()[0].AsString().c_str(), vec[1].AsString().c_str());
-  // We can mutate values in the buffer.
-  TEST_EQ(vec[0].MutateInt(-99), true);
-  TEST_EQ(vec[0].AsInt64(), -99);
-  TEST_EQ(vec[1].MutateString("John"), true);  // Size must match.
-  TEST_EQ_STR(vec[1].AsString().c_str(), "John");
-  TEST_EQ(vec[1].MutateString("Alfred"), false);  // Too long.
-  TEST_EQ(vec[2].MutateFloat(2.0f), true);
-  TEST_EQ(vec[2].AsFloat(), 2.0f);
-  TEST_EQ(vec[2].MutateFloat(3.14159), false);  // Double does not fit in float.
-}
-
-int main(int /*argc*/, const char * /*argv*/[]) {
-  // Run our various test suites:
-
-  std::string rawbuf;
-  auto flatbuf = CreateFlatBufferTest(rawbuf);
-  AccessFlatBufferTest(reinterpret_cast<const uint8_t *>(rawbuf.c_str()),
-                       rawbuf.length());
-  AccessFlatBufferTest(flatbuf.get(), rawbuf.length());
-
-  MutateFlatBuffersTest(flatbuf.get(), rawbuf.length());
-
-  ObjectFlatBuffersTest(flatbuf.get());
-
-  SizePrefixedTest();
-
-  #ifndef FLATBUFFERS_NO_FILE_TESTS
-  ParseAndGenerateTextTest();
-  ReflectionTest(flatbuf.get(), rawbuf.length());
-  ParseProtoTest();
-  UnionVectorTest();
-  #endif
-
-  FuzzTest1();
-  FuzzTest2();
-
-  ErrorTest();
-  ValueTest();
-  EnumStringsTest();
-  IntegerOutOfRangeTest();
-  IntegerBoundaryTest();
-  UnicodeTest();
-  UnicodeTestAllowNonUTF8();
-  UnicodeTestGenerateTextFailsOnNonUTF8();
-  UnicodeSurrogatesTest();
-  UnicodeInvalidSurrogatesTest();
-  InvalidUTF8Test();
-  UnknownFieldsTest();
-  ParseUnionTest();
-  ConformTest();
-
-  FlexBuffersTest();
-
-  if (!testing_fails) {
-    TEST_OUTPUT_LINE("ALL TESTS PASSED");
-    return 0;
-  } else {
-    TEST_OUTPUT_LINE("%d FAILED TESTS", testing_fails);
-    return 1;
-  }
-}
-
diff --git a/third_party/flatbuffers/tests/unicode_test.json b/third_party/flatbuffers/tests/unicode_test.json
deleted file mode 100644
index 75e467a..0000000
--- a/third_party/flatbuffers/tests/unicode_test.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
-  "name": "unicode_test",
-  "testarrayoftables": [
-    { "name": "Цлїςσδε" },
-    { "name": "フムアムカモケモ" },
-    { "name": "フムヤムカモケモ" },
-    { "name": "㊀㊁㊂㊃㊄" },
-    { "name": "☳☶☲" },
-    { "name": "𡇙𝌆" }
-  ],
-  "testarrayofstring": [
-    "Цлїςσδε",
-    "フムアムカモケモ",
-    "フムヤムカモケモ",
-    "㊀㊁㊂㊃㊄",
-    "☳☶☲",
-    "𡇙𝌆"
-  ]
-}
diff --git a/third_party/flatbuffers/tests/union_vector/union_vector.fbs b/third_party/flatbuffers/tests/union_vector/union_vector.fbs
deleted file mode 100644
index 495076f..0000000
--- a/third_party/flatbuffers/tests/union_vector/union_vector.fbs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Demonstrates the ability to have vectors of unions, and also to
-// store structs and strings in unions.
-
-table Attacker {
-  sword_attack_damage: int;
-}
-
-struct Rapunzel {
-  hair_length: int;
-}
-
-struct BookReader {
-  books_read: int;
-}
-
-union Character {
-  MuLan: Attacker,  // Can have name be different from type.
-  Rapunzel,         // Or just both the same, as before.
-  Belle: BookReader,
-  BookFan: BookReader,
-  Other: string,
-  Unused: string
-}
-
-table Movie {
-  main_character: Character;
-  characters: [Character];
-}
-
-root_type Movie;
-file_identifier "MOVI";
diff --git a/third_party/flatbuffers/tests/union_vector/union_vector_generated.h b/third_party/flatbuffers/tests/union_vector/union_vector_generated.h
deleted file mode 100644
index 104c665..0000000
--- a/third_party/flatbuffers/tests/union_vector/union_vector_generated.h
+++ /dev/null
@@ -1,598 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-
-#ifndef FLATBUFFERS_GENERATED_UNIONVECTOR_H_
-#define FLATBUFFERS_GENERATED_UNIONVECTOR_H_
-
-#include "flatbuffers/flatbuffers.h"
-
-struct Attacker;
-struct AttackerT;
-
-struct Rapunzel;
-
-struct BookReader;
-
-struct Movie;
-struct MovieT;
-
-enum Character {
-  Character_NONE = 0,
-  Character_MuLan = 1,
-  Character_Rapunzel = 2,
-  Character_Belle = 3,
-  Character_BookFan = 4,
-  Character_Other = 5,
-  Character_Unused = 6,
-  Character_MIN = Character_NONE,
-  Character_MAX = Character_Unused
-};
-
-inline const char **EnumNamesCharacter() {
-  static const char *names[] = {
-    "NONE",
-    "MuLan",
-    "Rapunzel",
-    "Belle",
-    "BookFan",
-    "Other",
-    "Unused",
-    nullptr
-  };
-  return names;
-}
-
-inline const char *EnumNameCharacter(Character e) {
-  const size_t index = static_cast<int>(e);
-  return EnumNamesCharacter()[index];
-}
-
-struct CharacterUnion {
-  Character type;
-  void *value;
-
-  CharacterUnion() : type(Character_NONE), value(nullptr) {}
-  CharacterUnion(CharacterUnion&& u) FLATBUFFERS_NOEXCEPT :
-    type(Character_NONE), value(nullptr)
-    { std::swap(type, u.type); std::swap(value, u.value); }
-  CharacterUnion(const CharacterUnion &) FLATBUFFERS_NOEXCEPT;
-  CharacterUnion &operator=(const CharacterUnion &u) FLATBUFFERS_NOEXCEPT
-    { CharacterUnion t(u); std::swap(type, t.type); std::swap(value, t.value); return *this; }
-  CharacterUnion &operator=(CharacterUnion &&u) FLATBUFFERS_NOEXCEPT
-    { std::swap(type, u.type); std::swap(value, u.value); return *this; }
-  ~CharacterUnion() { Reset(); }
-
-  void Reset();
-
-  static void *UnPack(const void *obj, Character type, const flatbuffers::resolver_function_t *resolver);
-  flatbuffers::Offset<void> Pack(flatbuffers::FlatBufferBuilder &_fbb, const flatbuffers::rehasher_function_t *_rehasher = nullptr) const;
-
-  AttackerT *AsMuLan() {
-    return type == Character_MuLan ?
-      reinterpret_cast<AttackerT *>(value) : nullptr;
-  }
-  Rapunzel *AsRapunzel() {
-    return type == Character_Rapunzel ?
-      reinterpret_cast<Rapunzel *>(value) : nullptr;
-  }
-  BookReader *AsBelle() {
-    return type == Character_Belle ?
-      reinterpret_cast<BookReader *>(value) : nullptr;
-  }
-  BookReader *AsBookFan() {
-    return type == Character_BookFan ?
-      reinterpret_cast<BookReader *>(value) : nullptr;
-  }
-  std::string *AsOther() {
-    return type == Character_Other ?
-      reinterpret_cast<std::string *>(value) : nullptr;
-  }
-  std::string *AsUnused() {
-    return type == Character_Unused ?
-      reinterpret_cast<std::string *>(value) : nullptr;
-  }
-};
-
-bool VerifyCharacter(flatbuffers::Verifier &verifier, const void *obj, Character type);
-bool VerifyCharacterVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types);
-
-MANUALLY_ALIGNED_STRUCT(4) Rapunzel FLATBUFFERS_FINAL_CLASS {
- private:
-  int32_t hair_length_;
-
- public:
-  Rapunzel() {
-    memset(this, 0, sizeof(Rapunzel));
-  }
-  Rapunzel(const Rapunzel &_o) {
-    memcpy(this, &_o, sizeof(Rapunzel));
-  }
-  Rapunzel(int32_t _hair_length)
-      : hair_length_(flatbuffers::EndianScalar(_hair_length)) {
-  }
-  int32_t hair_length() const {
-    return flatbuffers::EndianScalar(hair_length_);
-  }
-  void mutate_hair_length(int32_t _hair_length) {
-    flatbuffers::WriteScalar(&hair_length_, _hair_length);
-  }
-};
-STRUCT_END(Rapunzel, 4);
-
-MANUALLY_ALIGNED_STRUCT(4) BookReader FLATBUFFERS_FINAL_CLASS {
- private:
-  int32_t books_read_;
-
- public:
-  BookReader() {
-    memset(this, 0, sizeof(BookReader));
-  }
-  BookReader(const BookReader &_o) {
-    memcpy(this, &_o, sizeof(BookReader));
-  }
-  BookReader(int32_t _books_read)
-      : books_read_(flatbuffers::EndianScalar(_books_read)) {
-  }
-  int32_t books_read() const {
-    return flatbuffers::EndianScalar(books_read_);
-  }
-  void mutate_books_read(int32_t _books_read) {
-    flatbuffers::WriteScalar(&books_read_, _books_read);
-  }
-};
-STRUCT_END(BookReader, 4);
-
-struct AttackerT : public flatbuffers::NativeTable {
-  typedef Attacker TableType;
-  int32_t sword_attack_damage;
-  AttackerT()
-      : sword_attack_damage(0) {
-  }
-};
-
-struct Attacker FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  typedef AttackerT NativeTableType;
-  enum {
-    VT_SWORD_ATTACK_DAMAGE = 4
-  };
-  int32_t sword_attack_damage() const {
-    return GetField<int32_t>(VT_SWORD_ATTACK_DAMAGE, 0);
-  }
-  bool mutate_sword_attack_damage(int32_t _sword_attack_damage) {
-    return SetField<int32_t>(VT_SWORD_ATTACK_DAMAGE, _sword_attack_damage, 0);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyField<int32_t>(verifier, VT_SWORD_ATTACK_DAMAGE) &&
-           verifier.EndTable();
-  }
-  AttackerT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
-  void UnPackTo(AttackerT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
-  static flatbuffers::Offset<Attacker> Pack(flatbuffers::FlatBufferBuilder &_fbb, const AttackerT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
-};
-
-struct AttackerBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_sword_attack_damage(int32_t sword_attack_damage) {
-    fbb_.AddElement<int32_t>(Attacker::VT_SWORD_ATTACK_DAMAGE, sword_attack_damage, 0);
-  }
-  AttackerBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  AttackerBuilder &operator=(const AttackerBuilder &);
-  flatbuffers::Offset<Attacker> Finish() {
-    const auto end = fbb_.EndTable(start_, 1);
-    auto o = flatbuffers::Offset<Attacker>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<Attacker> CreateAttacker(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    int32_t sword_attack_damage = 0) {
-  AttackerBuilder builder_(_fbb);
-  builder_.add_sword_attack_damage(sword_attack_damage);
-  return builder_.Finish();
-}
-
-flatbuffers::Offset<Attacker> CreateAttacker(flatbuffers::FlatBufferBuilder &_fbb, const AttackerT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
-
-struct MovieT : public flatbuffers::NativeTable {
-  typedef Movie TableType;
-  CharacterUnion main_character;
-  std::vector<CharacterUnion> characters;
-  MovieT() {
-  }
-};
-
-struct Movie FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  typedef MovieT NativeTableType;
-  enum {
-    VT_MAIN_CHARACTER_TYPE = 4,
-    VT_MAIN_CHARACTER = 6,
-    VT_CHARACTERS_TYPE = 8,
-    VT_CHARACTERS = 10
-  };
-  Character main_character_type() const {
-    return static_cast<Character>(GetField<uint8_t>(VT_MAIN_CHARACTER_TYPE, 0));
-  }
-  bool mutate_main_character_type(Character _main_character_type) {
-    return SetField<uint8_t>(VT_MAIN_CHARACTER_TYPE, static_cast<uint8_t>(_main_character_type), 0);
-  }
-  const void *main_character() const {
-    return GetPointer<const void *>(VT_MAIN_CHARACTER);
-  }
-  template<typename T> const T *main_character_as() const;
-  const Attacker *main_character_as_MuLan() const {
-    return main_character_type() == Character_MuLan ? static_cast<const Attacker *>(main_character()) : nullptr;
-  }
-  const Rapunzel *main_character_as_Rapunzel() const {
-    return main_character_type() == Character_Rapunzel ? static_cast<const Rapunzel *>(main_character()) : nullptr;
-  }
-  const BookReader *main_character_as_Belle() const {
-    return main_character_type() == Character_Belle ? static_cast<const BookReader *>(main_character()) : nullptr;
-  }
-  const BookReader *main_character_as_BookFan() const {
-    return main_character_type() == Character_BookFan ? static_cast<const BookReader *>(main_character()) : nullptr;
-  }
-  const flatbuffers::String *main_character_as_Other() const {
-    return main_character_type() == Character_Other ? static_cast<const flatbuffers::String *>(main_character()) : nullptr;
-  }
-  const flatbuffers::String *main_character_as_Unused() const {
-    return main_character_type() == Character_Unused ? static_cast<const flatbuffers::String *>(main_character()) : nullptr;
-  }
-  void *mutable_main_character() {
-    return GetPointer<void *>(VT_MAIN_CHARACTER);
-  }
-  const flatbuffers::Vector<uint8_t> *characters_type() const {
-    return GetPointer<const flatbuffers::Vector<uint8_t> *>(VT_CHARACTERS_TYPE);
-  }
-  flatbuffers::Vector<uint8_t> *mutable_characters_type() {
-    return GetPointer<flatbuffers::Vector<uint8_t> *>(VT_CHARACTERS_TYPE);
-  }
-  const flatbuffers::Vector<flatbuffers::Offset<void>> *characters() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<void>> *>(VT_CHARACTERS);
-  }
-  flatbuffers::Vector<flatbuffers::Offset<void>> *mutable_characters() {
-    return GetPointer<flatbuffers::Vector<flatbuffers::Offset<void>> *>(VT_CHARACTERS);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyField<uint8_t>(verifier, VT_MAIN_CHARACTER_TYPE) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_MAIN_CHARACTER) &&
-           VerifyCharacter(verifier, main_character(), main_character_type()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_CHARACTERS_TYPE) &&
-           verifier.Verify(characters_type()) &&
-           VerifyField<flatbuffers::uoffset_t>(verifier, VT_CHARACTERS) &&
-           verifier.Verify(characters()) &&
-           VerifyCharacterVector(verifier, characters(), characters_type()) &&
-           verifier.EndTable();
-  }
-  MovieT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
-  void UnPackTo(MovieT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
-  static flatbuffers::Offset<Movie> Pack(flatbuffers::FlatBufferBuilder &_fbb, const MovieT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
-};
-
-struct MovieBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_main_character_type(Character main_character_type) {
-    fbb_.AddElement<uint8_t>(Movie::VT_MAIN_CHARACTER_TYPE, static_cast<uint8_t>(main_character_type), 0);
-  }
-  void add_main_character(flatbuffers::Offset<void> main_character) {
-    fbb_.AddOffset(Movie::VT_MAIN_CHARACTER, main_character);
-  }
-  void add_characters_type(flatbuffers::Offset<flatbuffers::Vector<uint8_t>> characters_type) {
-    fbb_.AddOffset(Movie::VT_CHARACTERS_TYPE, characters_type);
-  }
-  void add_characters(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<void>>> characters) {
-    fbb_.AddOffset(Movie::VT_CHARACTERS, characters);
-  }
-  MovieBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  MovieBuilder &operator=(const MovieBuilder &);
-  flatbuffers::Offset<Movie> Finish() {
-    const auto end = fbb_.EndTable(start_, 4);
-    auto o = flatbuffers::Offset<Movie>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<Movie> CreateMovie(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    Character main_character_type = Character_NONE,
-    flatbuffers::Offset<void> main_character = 0,
-    flatbuffers::Offset<flatbuffers::Vector<uint8_t>> characters_type = 0,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<void>>> characters = 0) {
-  MovieBuilder builder_(_fbb);
-  builder_.add_characters(characters);
-  builder_.add_characters_type(characters_type);
-  builder_.add_main_character(main_character);
-  builder_.add_main_character_type(main_character_type);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<Movie> CreateMovieDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    Character main_character_type = Character_NONE,
-    flatbuffers::Offset<void> main_character = 0,
-    const std::vector<uint8_t> *characters_type = nullptr,
-    const std::vector<flatbuffers::Offset<void>> *characters = nullptr) {
-  return CreateMovie(
-      _fbb,
-      main_character_type,
-      main_character,
-      characters_type ? _fbb.CreateVector<uint8_t>(*characters_type) : 0,
-      characters ? _fbb.CreateVector<flatbuffers::Offset<void>>(*characters) : 0);
-}
-
-flatbuffers::Offset<Movie> CreateMovie(flatbuffers::FlatBufferBuilder &_fbb, const MovieT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
-
-inline AttackerT *Attacker::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
-  auto _o = new AttackerT();
-  UnPackTo(_o, _resolver);
-  return _o;
-}
-
-inline void Attacker::UnPackTo(AttackerT *_o, const flatbuffers::resolver_function_t *_resolver) const {
-  (void)_o;
-  (void)_resolver;
-  { auto _e = sword_attack_damage(); _o->sword_attack_damage = _e; };
-}
-
-inline flatbuffers::Offset<Attacker> Attacker::Pack(flatbuffers::FlatBufferBuilder &_fbb, const AttackerT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
-  return CreateAttacker(_fbb, _o, _rehasher);
-}
-
-inline flatbuffers::Offset<Attacker> CreateAttacker(flatbuffers::FlatBufferBuilder &_fbb, const AttackerT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
-  (void)_rehasher;
-  (void)_o;
-  auto _sword_attack_damage = _o->sword_attack_damage;
-  return CreateAttacker(
-      _fbb,
-      _sword_attack_damage);
-}
-
-inline MovieT *Movie::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
-  auto _o = new MovieT();
-  UnPackTo(_o, _resolver);
-  return _o;
-}
-
-inline void Movie::UnPackTo(MovieT *_o, const flatbuffers::resolver_function_t *_resolver) const {
-  (void)_o;
-  (void)_resolver;
-  { auto _e = main_character_type(); _o->main_character.type = _e; };
-  { auto _e = main_character(); if (_e) _o->main_character.value = CharacterUnion::UnPack(_e, main_character_type(), _resolver); };
-  { auto _e = characters_type(); if (_e) { _o->characters.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->characters[_i].type = (Character)_e->Get(_i); } } };
-  { auto _e = characters(); if (_e) { _o->characters.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->characters[_i].value = CharacterUnion::UnPack(_e->Get(_i), characters_type()->GetEnum<Character>(_i), _resolver); } } };
-}
-
-inline flatbuffers::Offset<Movie> Movie::Pack(flatbuffers::FlatBufferBuilder &_fbb, const MovieT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
-  return CreateMovie(_fbb, _o, _rehasher);
-}
-
-inline flatbuffers::Offset<Movie> CreateMovie(flatbuffers::FlatBufferBuilder &_fbb, const MovieT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
-  (void)_rehasher;
-  (void)_o;
-  auto _main_character_type = _o->main_character.type;
-  auto _main_character = _o->main_character.Pack(_fbb);
-  auto _characters_type = _o->characters.size() ? _fbb.CreateVector<uint8_t>(_o->characters.size(), [&](size_t i) { return static_cast<uint8_t>(_o->characters[i].type); }) : 0;
-  auto _characters = _o->characters.size() ? _fbb.CreateVector<flatbuffers::Offset<void>>(_o->characters.size(), [&](size_t i) { return _o->characters[i].Pack(_fbb, _rehasher); }) : 0;
-  return CreateMovie(
-      _fbb,
-      _main_character_type,
-      _main_character,
-      _characters_type,
-      _characters);
-}
-
-inline bool VerifyCharacter(flatbuffers::Verifier &verifier, const void *obj, Character type) {
-  switch (type) {
-    case Character_NONE: {
-      return true;
-    }
-    case Character_MuLan: {
-      auto ptr = reinterpret_cast<const Attacker *>(obj);
-      return verifier.VerifyTable(ptr);
-    }
-    case Character_Rapunzel: {
-      return true;
-    }
-    case Character_Belle: {
-      return true;
-    }
-    case Character_BookFan: {
-      return true;
-    }
-    case Character_Other: {
-      auto ptr = reinterpret_cast<const flatbuffers::String *>(obj);
-      return verifier.Verify(ptr);
-    }
-    case Character_Unused: {
-      auto ptr = reinterpret_cast<const flatbuffers::String *>(obj);
-      return verifier.Verify(ptr);
-    }
-    default: return false;
-  }
-}
-
-inline bool VerifyCharacterVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types) {
-  if (values->size() != types->size()) return false;
-  for (flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
-    if (!VerifyCharacter(
-        verifier,  values->Get(i), types->GetEnum<Character>(i))) {
-      return false;
-    }
-  }
-  return true;
-}
-
-inline void *CharacterUnion::UnPack(const void *obj, Character type, const flatbuffers::resolver_function_t *resolver) {
-  switch (type) {
-    case Character_MuLan: {
-      auto ptr = reinterpret_cast<const Attacker *>(obj);
-      return ptr->UnPack(resolver);
-    }
-    case Character_Rapunzel: {
-      auto ptr = reinterpret_cast<const Rapunzel *>(obj);
-      return new Rapunzel(*ptr);
-    }
-    case Character_Belle: {
-      auto ptr = reinterpret_cast<const BookReader *>(obj);
-      return new BookReader(*ptr);
-    }
-    case Character_BookFan: {
-      auto ptr = reinterpret_cast<const BookReader *>(obj);
-      return new BookReader(*ptr);
-    }
-    case Character_Other: {
-      auto ptr = reinterpret_cast<const flatbuffers::String *>(obj);
-      return new std::string(ptr->c_str(), ptr->size());
-    }
-    case Character_Unused: {
-      auto ptr = reinterpret_cast<const flatbuffers::String *>(obj);
-      return new std::string(ptr->c_str(), ptr->size());
-    }
-    default: return nullptr;
-  }
-}
-
-inline flatbuffers::Offset<void> CharacterUnion::Pack(flatbuffers::FlatBufferBuilder &_fbb, const flatbuffers::rehasher_function_t *_rehasher) const {
-  switch (type) {
-    case Character_MuLan: {
-      auto ptr = reinterpret_cast<const AttackerT *>(value);
-      return CreateAttacker(_fbb, ptr, _rehasher).Union();
-    }
-    case Character_Rapunzel: {
-      auto ptr = reinterpret_cast<const Rapunzel *>(value);
-      return _fbb.CreateStruct(*ptr).Union();
-    }
-    case Character_Belle: {
-      auto ptr = reinterpret_cast<const BookReader *>(value);
-      return _fbb.CreateStruct(*ptr).Union();
-    }
-    case Character_BookFan: {
-      auto ptr = reinterpret_cast<const BookReader *>(value);
-      return _fbb.CreateStruct(*ptr).Union();
-    }
-    case Character_Other: {
-      auto ptr = reinterpret_cast<const std::string *>(value);
-      return _fbb.CreateString(*ptr).Union();
-    }
-    case Character_Unused: {
-      auto ptr = reinterpret_cast<const std::string *>(value);
-      return _fbb.CreateString(*ptr).Union();
-    }
-    default: return 0;
-  }
-}
-
-inline CharacterUnion::CharacterUnion(const CharacterUnion &u) FLATBUFFERS_NOEXCEPT : type(u.type), value(nullptr) {
-  switch (type) {
-    case Character_MuLan: {
-      value = new AttackerT(*reinterpret_cast<AttackerT *>(u.value));
-      break;
-    }
-    case Character_Rapunzel: {
-      value = new Rapunzel(*reinterpret_cast<Rapunzel *>(u.value));
-      break;
-    }
-    case Character_Belle: {
-      value = new BookReader(*reinterpret_cast<BookReader *>(u.value));
-      break;
-    }
-    case Character_BookFan: {
-      value = new BookReader(*reinterpret_cast<BookReader *>(u.value));
-      break;
-    }
-    case Character_Other: {
-      value = new std::string(*reinterpret_cast<std::string *>(u.value));
-      break;
-    }
-    case Character_Unused: {
-      value = new std::string(*reinterpret_cast<std::string *>(u.value));
-      break;
-    }
-    default:
-      break;
-  }
-}
-
-inline void CharacterUnion::Reset() {
-  switch (type) {
-    case Character_MuLan: {
-      auto ptr = reinterpret_cast<AttackerT *>(value);
-      delete ptr;
-      break;
-    }
-    case Character_Rapunzel: {
-      auto ptr = reinterpret_cast<Rapunzel *>(value);
-      delete ptr;
-      break;
-    }
-    case Character_Belle: {
-      auto ptr = reinterpret_cast<BookReader *>(value);
-      delete ptr;
-      break;
-    }
-    case Character_BookFan: {
-      auto ptr = reinterpret_cast<BookReader *>(value);
-      delete ptr;
-      break;
-    }
-    case Character_Other: {
-      auto ptr = reinterpret_cast<std::string *>(value);
-      delete ptr;
-      break;
-    }
-    case Character_Unused: {
-      auto ptr = reinterpret_cast<std::string *>(value);
-      delete ptr;
-      break;
-    }
-    default: break;
-  }
-  value = nullptr;
-  type = Character_NONE;
-}
-
-inline const Movie *GetMovie(const void *buf) {
-  return flatbuffers::GetRoot<Movie>(buf);
-}
-
-inline Movie *GetMutableMovie(void *buf) {
-  return flatbuffers::GetMutableRoot<Movie>(buf);
-}
-
-inline const char *MovieIdentifier() {
-  return "MOVI";
-}
-
-inline bool MovieBufferHasIdentifier(const void *buf) {
-  return flatbuffers::BufferHasIdentifier(
-      buf, MovieIdentifier());
-}
-
-inline bool VerifyMovieBuffer(
-    flatbuffers::Verifier &verifier) {
-  return verifier.VerifyBuffer<Movie>(MovieIdentifier());
-}
-
-inline void FinishMovieBuffer(
-    flatbuffers::FlatBufferBuilder &fbb,
-    flatbuffers::Offset<Movie> root) {
-  fbb.Finish(root, MovieIdentifier());
-}
-
-inline std::unique_ptr<MovieT> UnPackMovie(
-    const void *buf,
-    const flatbuffers::resolver_function_t *res = nullptr) {
-  return std::unique_ptr<MovieT>(GetMovie(buf)->UnPack(res));
-}
-
-#endif  // FLATBUFFERS_GENERATED_UNIONVECTOR_H_