From da83b376ebb03818221c823c6b53162b79d0b389 Mon Sep 17 00:00:00 2001
From: "Nicolas \"Pixel\" Noble" <pixel@nobis-crew.org>
Date: Mon, 23 Jan 2017 23:52:35 +0100
Subject: [PATCH 01/52] Changing versions from -dev to -pre1 on the release
 branch.

---
 CMakeLists.txt                                    | 2 +-
 Makefile                                          | 6 +++---
 build.yaml                                        | 4 ++--
 package.json                                      | 2 +-
 package.xml                                       | 4 ++--
 src/core/lib/surface/version.c                    | 2 +-
 src/cpp/common/version_cc.cc                      | 2 +-
 src/csharp/Grpc.Auth/project.json                 | 4 ++--
 src/csharp/Grpc.Core/VersionInfo.cs               | 2 +-
 src/csharp/Grpc.Core/project.json                 | 2 +-
 src/csharp/Grpc.HealthCheck/project.json          | 4 ++--
 src/csharp/Grpc.Reflection/project.json           | 4 ++--
 src/csharp/build_packages_dotnetcli.bat           | 2 +-
 src/csharp/build_packages_dotnetcli.sh            | 4 ++--
 src/node/health_check/package.json                | 4 ++--
 src/node/tools/package.json                       | 2 +-
 src/python/grpcio/grpc_version.py                 | 2 +-
 src/python/grpcio_health_checking/grpc_version.py | 2 +-
 src/python/grpcio_reflection/grpc_version.py      | 2 +-
 src/python/grpcio_tests/grpc_version.py           | 2 +-
 src/ruby/lib/grpc/version.rb                      | 2 +-
 src/ruby/tools/version.rb                         | 2 +-
 tools/distrib/python/grpcio_tools/grpc_version.py | 2 +-
 tools/doxygen/Doxyfile.c++                        | 2 +-
 tools/doxygen/Doxyfile.c++.internal               | 2 +-
 tools/doxygen/Doxyfile.core                       | 2 +-
 tools/doxygen/Doxyfile.core.internal              | 2 +-
 27 files changed, 36 insertions(+), 36 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2ca0b805429..01134502ad8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -42,7 +42,7 @@
 cmake_minimum_required(VERSION 2.8)
 
 set(PACKAGE_NAME      "grpc")
-set(PACKAGE_VERSION   "1.1.0-dev")
+set(PACKAGE_VERSION   "1.1.0-pre1")
 set(PACKAGE_STRING    "${PACKAGE_NAME} ${PACKAGE_VERSION}")
 set(PACKAGE_TARNAME   "${PACKAGE_NAME}-${PACKAGE_VERSION}")
 set(PACKAGE_BUGREPORT "https://github.com/grpc/grpc/issues/")
diff --git a/Makefile b/Makefile
index 50e4411bb79..fa5c58dce21 100644
--- a/Makefile
+++ b/Makefile
@@ -441,9 +441,9 @@ E = @echo
 Q = @
 endif
 
-CORE_VERSION = 2.0.0-dev
-CPP_VERSION = 1.1.0-dev
-CSHARP_VERSION = 1.1.0-dev
+CORE_VERSION = 2.0.0-pre1
+CPP_VERSION = 1.1.0-pre1
+CSHARP_VERSION = 1.1.0-pre1
 
 CPPFLAGS_NO_ARCH += $(addprefix -I, $(INCLUDES)) $(addprefix -D, $(DEFINES))
 CPPFLAGS += $(CPPFLAGS_NO_ARCH) $(ARCH_FLAGS)
diff --git a/build.yaml b/build.yaml
index 23e2659ea1e..96f37918c00 100644
--- a/build.yaml
+++ b/build.yaml
@@ -12,9 +12,9 @@ settings:
   '#08': Use "-preN" suffixes to identify pre-release versions
   '#09': Per-language overrides are possible with (eg) ruby_version tag here
   '#10': See the expand_version.py for all the quirks here
-  core_version: 2.0.0-dev
+  core_version: 2.0.0-pre1
   g_stands_for: good
-  version: 1.1.0-dev
+  version: 1.1.0-pre1
 filegroups:
 - name: census
   public_headers:
diff --git a/package.json b/package.json
index 375db74849f..c5cb6abdffa 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "grpc",
-  "version": "1.1.0-dev",
+  "version": "1.1.0-pre1",
   "author": "Google Inc.",
   "description": "gRPC Library for Node",
   "homepage": "http://www.grpc.io/",
diff --git a/package.xml b/package.xml
index 69fa8711d88..3e00de27921 100644
--- a/package.xml
+++ b/package.xml
@@ -13,8 +13,8 @@
  <date>2017-01-13</date>
  <time>16:06:07</time>
  <version>
-  <release>1.1.0dev</release>
-  <api>1.1.0dev</api>
+  <release>1.1.0RC1</release>
+  <api>1.1.0RC1</api>
  </version>
  <stability>
   <release>beta</release>
diff --git a/src/core/lib/surface/version.c b/src/core/lib/surface/version.c
index 0db8b41aa92..6ab1a84f35c 100644
--- a/src/core/lib/surface/version.c
+++ b/src/core/lib/surface/version.c
@@ -36,6 +36,6 @@
 
 #include <grpc/grpc.h>
 
-const char *grpc_version_string(void) { return "2.0.0-dev"; }
+const char *grpc_version_string(void) { return "2.0.0-pre1"; }
 
 const char *grpc_g_stands_for(void) { return "good"; }
diff --git a/src/cpp/common/version_cc.cc b/src/cpp/common/version_cc.cc
index 7be338417f6..1a35e2c243b 100644
--- a/src/cpp/common/version_cc.cc
+++ b/src/cpp/common/version_cc.cc
@@ -37,5 +37,5 @@
 #include <grpc++/grpc++.h>
 
 namespace grpc {
-grpc::string Version() { return "1.1.0-dev"; }
+grpc::string Version() { return "1.1.0-pre1"; }
 }
diff --git a/src/csharp/Grpc.Auth/project.json b/src/csharp/Grpc.Auth/project.json
index 4052ec83984..b83aa9ab7e3 100644
--- a/src/csharp/Grpc.Auth/project.json
+++ b/src/csharp/Grpc.Auth/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.0-dev",
+  "version": "1.1.0-pre1",
   "title": "gRPC C# Auth",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2015, Google Inc.",
@@ -21,7 +21,7 @@
     }
   },
   "dependencies": {
-    "Grpc.Core": "1.1.0-dev",
+    "Grpc.Core": "1.1.0-pre1",
     "Google.Apis.Auth": "1.16.0"
   },
   "frameworks": {
diff --git a/src/csharp/Grpc.Core/VersionInfo.cs b/src/csharp/Grpc.Core/VersionInfo.cs
index 553aeec58ac..46bbe9b4a88 100644
--- a/src/csharp/Grpc.Core/VersionInfo.cs
+++ b/src/csharp/Grpc.Core/VersionInfo.cs
@@ -53,6 +53,6 @@ namespace Grpc.Core
         /// <summary>
         /// Current version of gRPC C#
         /// </summary>
-        public const string CurrentVersion = "1.1.0-dev";
+        public const string CurrentVersion = "1.1.0-pre1";
     }
 }
diff --git a/src/csharp/Grpc.Core/project.json b/src/csharp/Grpc.Core/project.json
index 4405ecc5a21..2cd678b3b1e 100644
--- a/src/csharp/Grpc.Core/project.json
+++ b/src/csharp/Grpc.Core/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.0-dev",
+  "version": "1.1.0-pre1",
   "title": "gRPC C# Core",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2015, Google Inc.",
diff --git a/src/csharp/Grpc.HealthCheck/project.json b/src/csharp/Grpc.HealthCheck/project.json
index 8f1237d0030..d34335e5963 100644
--- a/src/csharp/Grpc.HealthCheck/project.json
+++ b/src/csharp/Grpc.HealthCheck/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.0-dev",
+  "version": "1.1.0-pre1",
   "title": "gRPC C# Healthchecking",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2015, Google Inc.",
@@ -21,7 +21,7 @@
     }
   },
   "dependencies": {
-    "Grpc.Core": "1.1.0-dev",
+    "Grpc.Core": "1.1.0-pre1",
     "Google.Protobuf": "3.0.0"
   },
   "frameworks": {
diff --git a/src/csharp/Grpc.Reflection/project.json b/src/csharp/Grpc.Reflection/project.json
index 2fe617cc7a8..c10125457e6 100644
--- a/src/csharp/Grpc.Reflection/project.json
+++ b/src/csharp/Grpc.Reflection/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.0-dev",
+  "version": "1.1.0-pre1",
   "title": "gRPC C# Reflection",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2016, Google Inc.",
@@ -21,7 +21,7 @@
     }
   },
   "dependencies": {
-    "Grpc.Core": "1.1.0-dev",
+    "Grpc.Core": "1.1.0-pre1",
     "Google.Protobuf": "3.0.0"
   },
   "frameworks": {
diff --git a/src/csharp/build_packages_dotnetcli.bat b/src/csharp/build_packages_dotnetcli.bat
index 9e8c045a1f9..9e4b0664435 100755
--- a/src/csharp/build_packages_dotnetcli.bat
+++ b/src/csharp/build_packages_dotnetcli.bat
@@ -28,7 +28,7 @@
 @rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 @rem Current package versions
-set VERSION=1.1.0-dev
+set VERSION=1.1.0-pre1
 set PROTOBUF_VERSION=3.0.0
 
 @rem Adjust the location of nuget.exe
diff --git a/src/csharp/build_packages_dotnetcli.sh b/src/csharp/build_packages_dotnetcli.sh
index 52cf2f9ddc7..e9bb42bd5cf 100755
--- a/src/csharp/build_packages_dotnetcli.sh
+++ b/src/csharp/build_packages_dotnetcli.sh
@@ -65,7 +65,7 @@ dotnet pack --configuration Release Grpc.Auth/project.json --output ../../artifa
 dotnet pack --configuration Release Grpc.HealthCheck/project.json --output ../../artifacts
 dotnet pack --configuration Release Grpc.Reflection/project.json --output ../../artifacts
 
-nuget pack Grpc.nuspec -Version "1.1.0-dev" -OutputDirectory ../../artifacts
-nuget pack Grpc.Tools.nuspec -Version "1.1.0-dev" -OutputDirectory ../../artifacts
+nuget pack Grpc.nuspec -Version "1.1.0-pre1" -OutputDirectory ../../artifacts
+nuget pack Grpc.Tools.nuspec -Version "1.1.0-pre1" -OutputDirectory ../../artifacts
 
 (cd ../../artifacts && zip csharp_nugets_dotnetcli.zip *.nupkg)
diff --git a/src/node/health_check/package.json b/src/node/health_check/package.json
index e6733598092..c67f6d4c8b3 100644
--- a/src/node/health_check/package.json
+++ b/src/node/health_check/package.json
@@ -1,6 +1,6 @@
 {
   "name": "grpc-health-check",
-  "version": "1.1.0-dev",
+  "version": "1.1.0-pre1",
   "author": "Google Inc.",
   "description": "Health check service for use with gRPC",
   "repository": {
@@ -15,7 +15,7 @@
     }
   ],
   "dependencies": {
-    "grpc": "^1.1.0-dev",
+    "grpc": "^1.1.0-pre1",
     "lodash": "^3.9.3",
     "google-protobuf": "^3.0.0"
   },
diff --git a/src/node/tools/package.json b/src/node/tools/package.json
index e5513d78791..b99628a52ad 100644
--- a/src/node/tools/package.json
+++ b/src/node/tools/package.json
@@ -1,6 +1,6 @@
 {
   "name": "grpc-tools",
-  "version": "1.1.0-dev",
+  "version": "1.1.0-pre1",
   "author": "Google Inc.",
   "description": "Tools for developing with gRPC on Node.js",
   "homepage": "http://www.grpc.io/",
diff --git a/src/python/grpcio/grpc_version.py b/src/python/grpcio/grpc_version.py
index ea38526a281..9642427ab52 100644
--- a/src/python/grpcio/grpc_version.py
+++ b/src/python/grpcio/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc_version.py.template`!!!
 
-VERSION='1.1.0.dev0'
+VERSION='1.1.0rc1'
diff --git a/src/python/grpcio_health_checking/grpc_version.py b/src/python/grpcio_health_checking/grpc_version.py
index be0d0ced3cb..24971c07723 100644
--- a/src/python/grpcio_health_checking/grpc_version.py
+++ b/src/python/grpcio_health_checking/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_health_checking/grpc_version.py.template`!!!
 
-VERSION='1.1.0.dev0'
+VERSION='1.1.0rc1'
diff --git a/src/python/grpcio_reflection/grpc_version.py b/src/python/grpcio_reflection/grpc_version.py
index 9b3c44c0221..b8145fcfaad 100644
--- a/src/python/grpcio_reflection/grpc_version.py
+++ b/src/python/grpcio_reflection/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_reflection/grpc_version.py.template`!!!
 
-VERSION='1.1.0.dev0'
+VERSION='1.1.0rc1'
diff --git a/src/python/grpcio_tests/grpc_version.py b/src/python/grpcio_tests/grpc_version.py
index 90f68a5741a..24536b634e0 100644
--- a/src/python/grpcio_tests/grpc_version.py
+++ b/src/python/grpcio_tests/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_tests/grpc_version.py.template`!!!
 
-VERSION='1.1.0.dev0'
+VERSION='1.1.0rc1'
diff --git a/src/ruby/lib/grpc/version.rb b/src/ruby/lib/grpc/version.rb
index 6e62af94d43..f6da257a783 100644
--- a/src/ruby/lib/grpc/version.rb
+++ b/src/ruby/lib/grpc/version.rb
@@ -29,5 +29,5 @@
 
 # GRPC contains the General RPC module.
 module GRPC
-  VERSION = '1.1.0.dev'
+  VERSION = '1.1.0.pre1'
 end
diff --git a/src/ruby/tools/version.rb b/src/ruby/tools/version.rb
index e457ec09ddb..2331f9d7ebe 100644
--- a/src/ruby/tools/version.rb
+++ b/src/ruby/tools/version.rb
@@ -29,6 +29,6 @@
 
 module GRPC
   module Tools
-    VERSION = '1.1.0.dev'
+    VERSION = '1.1.0.pre1'
   end
 end
diff --git a/tools/distrib/python/grpcio_tools/grpc_version.py b/tools/distrib/python/grpcio_tools/grpc_version.py
index 79c40717ddf..4ee3f5380f9 100644
--- a/tools/distrib/python/grpcio_tools/grpc_version.py
+++ b/tools/distrib/python/grpcio_tools/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!!
 
-VERSION='1.1.0.dev0'
+VERSION='1.1.0rc1'
diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++
index af844d661be..e30a504319a 100644
--- a/tools/doxygen/Doxyfile.c++
+++ b/tools/doxygen/Doxyfile.c++
@@ -40,7 +40,7 @@ PROJECT_NAME           = "GRPC C++"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 1.1.0-dev
+PROJECT_NUMBER         = 1.1.0-pre1
 
 # 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
diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal
index 2b2d8a3fe1f..1e112accfed 100644
--- a/tools/doxygen/Doxyfile.c++.internal
+++ b/tools/doxygen/Doxyfile.c++.internal
@@ -40,7 +40,7 @@ PROJECT_NAME           = "GRPC C++"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 1.1.0-dev
+PROJECT_NUMBER         = 1.1.0-pre1
 
 # 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
diff --git a/tools/doxygen/Doxyfile.core b/tools/doxygen/Doxyfile.core
index 2f9f021db90..e2dc9c75b97 100644
--- a/tools/doxygen/Doxyfile.core
+++ b/tools/doxygen/Doxyfile.core
@@ -40,7 +40,7 @@ PROJECT_NAME           = "GRPC Core"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 2.0.0-dev
+PROJECT_NUMBER         = 2.0.0-pre1
 
 # 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
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index ffe83a2ddb3..acb37074247 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -40,7 +40,7 @@ PROJECT_NAME           = "GRPC Core"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 2.0.0-dev
+PROJECT_NUMBER         = 2.0.0-pre1
 
 # 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

From 45a520f51fb020e5bff992b71efa702d812134db Mon Sep 17 00:00:00 2001
From: Ken Payson <kpayson@google.com>
Date: Tue, 24 Jan 2017 09:40:21 -0800
Subject: [PATCH 02/52] Special case Python build for inet_ntop

---
 include/grpc/impl/codegen/port_platform.h | 4 ++++
 setup.py                                  | 3 +++
 src/core/lib/iomgr/socket_utils_windows.c | 5 ++++-
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h
index 4633fa12e84..e565cd31d75 100644
--- a/include/grpc/impl/codegen/port_platform.h
+++ b/include/grpc/impl/codegen/port_platform.h
@@ -297,6 +297,10 @@
 #endif
 
 #ifdef _MSC_VER
+#ifdef _PYTHON_MSVC
+// The Python 3.5 Windows runtime is missing InetNtop
+#define GPR_WIN_INET_NTOP
+#endif  // _PYTHON_MSVC
 #if _MSC_VER < 1700
 typedef __int8 int8_t;
 typedef __int16 int16_t;
diff --git a/setup.py b/setup.py
index ab217433a3b..234252a16ca 100644
--- a/setup.py
+++ b/setup.py
@@ -105,8 +105,11 @@ if EXTRA_ENV_COMPILE_ARGS is None:
       EXTRA_ENV_COMPILE_ARGS += ' -D_ftime=_ftime32 -D_timeb=__timeb32 -D_ftime_s=_ftime32_s'
     else:
       EXTRA_ENV_COMPILE_ARGS += ' -D_ftime=_ftime64 -D_timeb=__timeb64'
+  elif 'win32' in sys.platform:
+    EXTRA_ENV_COMPILE_ARGS += ' -D_PYTHON_MSVC'
   elif "linux" in sys.platform or "darwin" in sys.platform:
     EXTRA_ENV_COMPILE_ARGS += ' -fvisibility=hidden -fno-wrapv'
+
 if EXTRA_ENV_LINK_ARGS is None:
   EXTRA_ENV_LINK_ARGS = ''
   if "linux" in sys.platform or "darwin" in sys.platform:
diff --git a/src/core/lib/iomgr/socket_utils_windows.c b/src/core/lib/iomgr/socket_utils_windows.c
index 628ad4a45be..ebca8a5ded6 100644
--- a/src/core/lib/iomgr/socket_utils_windows.c
+++ b/src/core/lib/iomgr/socket_utils_windows.c
@@ -41,8 +41,11 @@
 #include <grpc/support/log.h>
 
 const char *grpc_inet_ntop(int af, const void *src, char *dst, size_t size) {
-  /* Windows InetNtopA wants a mutable ip pointer */
+#ifdef GPR_WIN_INET_NTOP
+  return inet_ntop(af, src, dst, size);
+#else
   return InetNtopA(af, (void *)src, dst, size);
+#endif /* GPR_WIN_INET_NTOP */
 }
 
 #endif /* GRPC_WINDOWS_SOCKETUTILS */

From 464ce24b40c9291362e31fb4105a781618601c89 Mon Sep 17 00:00:00 2001
From: Ken Payson <kpayson@google.com>
Date: Tue, 24 Jan 2017 09:43:02 -0800
Subject: [PATCH 03/52] Add back comment

---
 src/core/lib/iomgr/socket_utils_windows.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/core/lib/iomgr/socket_utils_windows.c b/src/core/lib/iomgr/socket_utils_windows.c
index ebca8a5ded6..5bbe8fa34c9 100644
--- a/src/core/lib/iomgr/socket_utils_windows.c
+++ b/src/core/lib/iomgr/socket_utils_windows.c
@@ -44,6 +44,7 @@ const char *grpc_inet_ntop(int af, const void *src, char *dst, size_t size) {
 #ifdef GPR_WIN_INET_NTOP
   return inet_ntop(af, src, dst, size);
 #else
+  /* Windows InetNtopA wants a mutable ip pointer */
   return InetNtopA(af, (void *)src, dst, size);
 #endif /* GPR_WIN_INET_NTOP */
 }

From cbdb9b808c6ebfcb763329af895618baea5b0f10 Mon Sep 17 00:00:00 2001
From: murgatroid99 <mlumish@google.com>
Date: Tue, 24 Jan 2017 11:41:49 -0800
Subject: [PATCH 04/52] Fix electron portability test after scripts moved

---
 tools/run_tests/helper_scripts/run_node_electron.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/run_tests/helper_scripts/run_node_electron.sh b/tools/run_tests/helper_scripts/run_node_electron.sh
index 1999ffb0fa8..3ce57e04153 100755
--- a/tools/run_tests/helper_scripts/run_node_electron.sh
+++ b/tools/run_tests/helper_scripts/run_node_electron.sh
@@ -34,7 +34,7 @@ nvm use 6
 set -ex
 
 # change to grpc repo root
-cd $(dirname $0)/../..
+cd $(dirname $0)/../../..
 
 test_directory='src/node/test'
 timeout=8000

From b74a13cbc3285d04f7945868a39af6611fb67f5c Mon Sep 17 00:00:00 2001
From: Muxi Yan <mxyan@google.com>
Date: Tue, 24 Jan 2017 21:54:01 -0800
Subject: [PATCH 05/52] Advance gRPC version to 1.1.0-pre1

---
 gRPC-Core.podspec                             |    8 +-
 gRPC-ProtoRPC.podspec                         |    4 +-
 gRPC-RxLibrary.podspec                        |    4 +-
 gRPC.podspec                                  |    4 +-
 .../!ProtoCompiler-gRPCPlugin.podspec         |    7 +-
 src/objective-c/BoringSSL.podspec             | 1540 ++++++++---------
 src/objective-c/GRPCClient/private/GRPCHost.m |    2 +-
 templates/gRPC-Core.podspec.template          |    8 +-
 8 files changed, 782 insertions(+), 795 deletions(-)

diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
index 1eb178931dc..1bbd5612e3d 100644
--- a/gRPC-Core.podspec
+++ b/gRPC-Core.podspec
@@ -35,7 +35,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC-Core'
-  version = '1.0.2'
+  version = '1.1.0-pre1'
   s.version  = version
   s.summary  = 'Core cross-platform gRPC library, written in C'
   s.homepage = 'http://www.grpc.io'
@@ -44,9 +44,7 @@ Pod::Spec.new do |s|
 
   s.source = {
     :git => 'https://github.com/grpc/grpc.git',
-    # TODO(mxyan): Change back to "v#{version}" for next release
-    #:tag => "v#{version}",
-    :tag => "objective-c-v#{version}",
+    :tag => "v#{version}",
     # TODO(jcanizales): Depend explicitly on the nanopb pod, and disable submodules.
     :submodules => true,
   }
@@ -191,7 +189,7 @@ Pod::Spec.new do |s|
     ss.header_mappings_dir = '.'
     ss.libraries = 'z'
     ss.dependency "#{s.name}/Interface", version
-    ss.dependency 'BoringSSL', '~> 7.0'
+    ss.dependency 'BoringSSL', '~> 8.0'
 
     # To save you from scrolling, this is the last part of the podspec.
     ss.source_files = 'src/core/lib/profiling/timers.h',
diff --git a/gRPC-ProtoRPC.podspec b/gRPC-ProtoRPC.podspec
index 62eaa2aaf7f..964d1840c23 100644
--- a/gRPC-ProtoRPC.podspec
+++ b/gRPC-ProtoRPC.podspec
@@ -30,7 +30,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC-ProtoRPC'
-  version = '1.0.2'
+  version = '1.1.0-pre1'
   s.version  = version
   s.summary  = 'RPC library for Protocol Buffers, based on gRPC'
   s.homepage = 'http://www.grpc.io'
@@ -39,7 +39,7 @@ Pod::Spec.new do |s|
 
   s.source = {
     :git => 'https://github.com/grpc/grpc.git',
-    :tag => "objective-c-v#{version}",
+    :tag => "v#{version}",
   }
 
   s.ios.deployment_target = '7.1'
diff --git a/gRPC-RxLibrary.podspec b/gRPC-RxLibrary.podspec
index 2e8fffd2f11..eca3ab3d75e 100644
--- a/gRPC-RxLibrary.podspec
+++ b/gRPC-RxLibrary.podspec
@@ -30,7 +30,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC-RxLibrary'
-  version = '1.0.2'
+  version = '1.1.0-pre1'
   s.version  = version
   s.summary  = 'Reactive Extensions library for iOS/OSX.'
   s.homepage = 'http://www.grpc.io'
@@ -39,7 +39,7 @@ Pod::Spec.new do |s|
 
   s.source = {
     :git => 'https://github.com/grpc/grpc.git',
-    :tag => "objective-c-v#{version}",
+    :tag => "v#{version}",
   }
 
   s.ios.deployment_target = '7.1'
diff --git a/gRPC.podspec b/gRPC.podspec
index e8b77094491..77efd0fc6ae 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -30,7 +30,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC'
-  version = '1.0.2'
+  version = '1.1.0-pre1'
   s.version  = version
   s.summary  = 'gRPC client library for iOS/OSX'
   s.homepage = 'http://www.grpc.io'
@@ -39,7 +39,7 @@ Pod::Spec.new do |s|
 
   s.source = {
     :git => 'https://github.com/grpc/grpc.git',
-    :tag => "objective-c-v#{version}",
+    :tag => "v#{version}",
   }
 
   s.ios.deployment_target = '7.1'
diff --git a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
index bcc2bb61265..51bc044ec66 100644
--- a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
+++ b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
@@ -36,7 +36,7 @@ Pod::Spec.new do |s|
   # exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed
   # before them.
   s.name     = '!ProtoCompiler-gRPCPlugin'
-  v = '1.0.2'
+  v = '1.1.0-pre1'
   s.version  = v
   s.summary  = 'The gRPC ProtoC plugin generates Objective-C files from .proto services.'
   s.description = <<-DESC
@@ -84,10 +84,7 @@ Pod::Spec.new do |s|
   repo = 'grpc/grpc'
   file = "grpc_objective_c_plugin-#{v}-macos-x86_64.zip"
   s.source = {
-    # TODO(mxyan): Change back to "https://github.com/#{repo}/releases/download/v#{v}/#{file}" for
-    # next release
-    # :http => "https://github.com/#{repo}/releases/download/v#{v}/#{file}",
-    :http => "https://github.com/#{repo}/releases/download/objective-c-v#{v}/#{file}",
+    :http => "https://github.com/#{repo}/releases/download/v#{v}/#{file}",
     # TODO(jcanizales): Add sha1 or sha256
     # :sha1 => '??',
   }
diff --git a/src/objective-c/BoringSSL.podspec b/src/objective-c/BoringSSL.podspec
index 47b5b1a2e7b..d806cd9bf04 100644
--- a/src/objective-c/BoringSSL.podspec
+++ b/src/objective-c/BoringSSL.podspec
@@ -31,7 +31,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'BoringSSL'
-  version = '7.0'
+  version = '8.0'
   s.version  = version
   s.summary  = 'BoringSSL is a fork of OpenSSL that is designed to meet Google’s needs.'
   # Adapted from the homepage:
@@ -388,42 +388,42 @@ Pod::Spec.new do |s|
           0x28340c19,
           0x283480ac,
           0x283500ea,
-          0x2c322910,
-          0x2c32a91e,
-          0x2c332930,
-          0x2c33a942,
-          0x2c342956,
-          0x2c34a968,
-          0x2c352983,
-          0x2c35a995,
-          0x2c3629a8,
+          0x2c3228ca,
+          0x2c32a8d8,
+          0x2c3328ea,
+          0x2c33a8fc,
+          0x2c342910,
+          0x2c34a922,
+          0x2c35293d,
+          0x2c35a94f,
+          0x2c362962,
           0x2c36832d,
-          0x2c3729b5,
-          0x2c37a9c7,
-          0x2c3829da,
-          0x2c38a9f1,
-          0x2c3929ff,
-          0x2c39aa0f,
-          0x2c3a2a21,
-          0x2c3aaa35,
-          0x2c3b2a46,
-          0x2c3baa65,
-          0x2c3c2a79,
-          0x2c3caa8f,
-          0x2c3d2aa8,
-          0x2c3daac5,
-          0x2c3e2ad6,
-          0x2c3eaae4,
-          0x2c3f2afc,
-          0x2c3fab14,
-          0x2c402b21,
+          0x2c37296f,
+          0x2c37a981,
+          0x2c382994,
+          0x2c38a9ab,
+          0x2c3929b9,
+          0x2c39a9c9,
+          0x2c3a29db,
+          0x2c3aa9ef,
+          0x2c3b2a00,
+          0x2c3baa1f,
+          0x2c3c2a33,
+          0x2c3caa49,
+          0x2c3d2a62,
+          0x2c3daa7f,
+          0x2c3e2a90,
+          0x2c3eaa9e,
+          0x2c3f2ab6,
+          0x2c3faace,
+          0x2c402adb,
           0x2c4090e7,
-          0x2c412b32,
-          0x2c41ab45,
+          0x2c412aec,
+          0x2c41aaff,
           0x2c4210c0,
-          0x2c42ab56,
+          0x2c42ab10,
           0x2c430720,
-          0x2c43aa57,
+          0x2c43aa11,
           0x30320000,
           0x30328015,
           0x3033001f,
@@ -639,74 +639,74 @@ Pod::Spec.new do |s|
           0x405b1e9e,
           0x405b9eaf,
           0x405c1ec2,
-          0x405c9ee3,
-          0x405d1ef0,
-          0x405d9f07,
-          0x405e1f27,
+          0x405c9ed3,
+          0x405d1ee0,
+          0x405d9ef7,
+          0x405e1f17,
           0x405e8a95,
-          0x405f1f48,
-          0x405f9f55,
-          0x40601f63,
-          0x40609f85,
-          0x40611fad,
-          0x40619fc2,
-          0x40621fd9,
-          0x40629fea,
-          0x40631ffb,
-          0x4063a010,
-          0x40642027,
-          0x4064a053,
-          0x4065206e,
-          0x4065a085,
-          0x4066209d,
-          0x4066a0c7,
-          0x406720f2,
-          0x4067a113,
-          0x40682126,
-          0x4068a147,
-          0x40692179,
-          0x4069a1a7,
-          0x406a21c8,
-          0x406aa1e8,
-          0x406b2370,
-          0x406ba393,
-          0x406c23a9,
-          0x406ca60b,
-          0x406d263a,
-          0x406da662,
-          0x406e2690,
-          0x406ea6a8,
-          0x406f26c7,
-          0x406fa6dc,
-          0x407026ef,
-          0x4070a70c,
+          0x405f1f38,
+          0x405f9f45,
+          0x40601f53,
+          0x40609f75,
+          0x40611f9d,
+          0x40619fb2,
+          0x40621fc9,
+          0x40629fda,
+          0x40631feb,
+          0x4063a000,
+          0x40642017,
+          0x4064a043,
+          0x4065205e,
+          0x4065a075,
+          0x4066208d,
+          0x4066a0b7,
+          0x406720e2,
+          0x4067a103,
+          0x40682116,
+          0x4068a137,
+          0x40692169,
+          0x4069a197,
+          0x406a21b8,
+          0x406aa1d8,
+          0x406b2360,
+          0x406ba383,
+          0x406c2399,
+          0x406ca5c5,
+          0x406d25f4,
+          0x406da61c,
+          0x406e264a,
+          0x406ea662,
+          0x406f2681,
+          0x406fa696,
+          0x407026a9,
+          0x4070a6c6,
           0x40710800,
-          0x4071a71e,
-          0x40722731,
-          0x4072a74a,
-          0x40732762,
+          0x4071a6d8,
+          0x407226eb,
+          0x4072a704,
+          0x4073271c,
           0x4073936d,
-          0x40742776,
-          0x4074a790,
-          0x407527a1,
-          0x4075a7b5,
-          0x407627c3,
+          0x40742730,
+          0x4074a74a,
+          0x4075275b,
+          0x4075a76f,
+          0x4076277d,
           0x407691aa,
-          0x407727e8,
-          0x4077a80a,
-          0x40782825,
-          0x4078a85e,
-          0x40792875,
-          0x4079a88b,
-          0x407a2897,
-          0x407aa8aa,
-          0x407b28bf,
-          0x407ba8d1,
-          0x407c28e6,
-          0x407ca8ef,
-          0x407d2162,
+          0x407727a2,
+          0x4077a7c4,
+          0x407827df,
+          0x4078a818,
+          0x4079282f,
+          0x4079a845,
+          0x407a2851,
+          0x407aa864,
+          0x407b2879,
+          0x407ba88b,
+          0x407c28a0,
+          0x407ca8a9,
+          0x407d2152,
           0x407d9c57,
-          0x407e283a,
+          0x407e27f4,
           0x407e9e16,
           0x407f1a67,
           0x407f9887,
@@ -714,45 +714,42 @@ Pod::Spec.new do |s|
           0x40809a8f,
           0x40811cd9,
           0x40819c08,
-          0x4082267b,
+          0x40822635,
           0x4082986d,
           0x40831df1,
-          0x4083a038,
+          0x4083a028,
           0x40841aa3,
           0x40849e4e,
-          0x40851ed3,
-          0x41f4229b,
-          0x41f9232d,
-          0x41fe2220,
-          0x41fea3fc,
-          0x41ff24ed,
-          0x420322b4,
-          0x420822d6,
-          0x4208a312,
-          0x42092204,
-          0x4209a34c,
-          0x420a225b,
-          0x420aa23b,
-          0x420b227b,
-          0x420ba2f4,
-          0x420c2509,
-          0x420ca3c9,
-          0x420d23e3,
-          0x420da41a,
-          0x42122434,
-          0x421724d0,
-          0x4217a476,
-          0x421c2498,
-          0x421f2453,
-          0x42212520,
-          0x422624b3,
-          0x422b25ef,
-          0x422ba59d,
-          0x422c25d7,
-          0x422ca55c,
-          0x422d253b,
-          0x422da5bc,
-          0x422e2582,
+          0x41f4228b,
+          0x41f9231d,
+          0x41fe2210,
+          0x41fea3ec,
+          0x41ff24dd,
+          0x420322a4,
+          0x420822c6,
+          0x4208a302,
+          0x420921f4,
+          0x4209a33c,
+          0x420a224b,
+          0x420aa22b,
+          0x420b226b,
+          0x420ba2e4,
+          0x420c24f9,
+          0x420ca3b9,
+          0x420d23d3,
+          0x420da40a,
+          0x42122424,
+          0x421724c0,
+          0x4217a466,
+          0x421c2488,
+          0x421f2443,
+          0x42212510,
+          0x422624a3,
+          0x422b25a9,
+          0x422ba572,
+          0x422c2591,
+          0x422ca54c,
+          0x422d252b,
           0x4432072b,
           0x4432873a,
           0x44330746,
@@ -795,69 +792,69 @@ Pod::Spec.new do |s|
           0x4c3d136d,
           0x4c3d937c,
           0x4c3e1389,
-          0x50322b68,
-          0x5032ab77,
-          0x50332b82,
-          0x5033ab92,
-          0x50342bab,
-          0x5034abc5,
-          0x50352bd3,
-          0x5035abe9,
-          0x50362bfb,
-          0x5036ac11,
-          0x50372c2a,
-          0x5037ac3d,
-          0x50382c55,
-          0x5038ac66,
-          0x50392c7b,
-          0x5039ac8f,
-          0x503a2caf,
-          0x503aacc5,
-          0x503b2cdd,
-          0x503bacef,
-          0x503c2d0b,
-          0x503cad22,
-          0x503d2d3b,
-          0x503dad51,
-          0x503e2d5e,
-          0x503ead74,
-          0x503f2d86,
+          0x50322b22,
+          0x5032ab31,
+          0x50332b3c,
+          0x5033ab4c,
+          0x50342b65,
+          0x5034ab7f,
+          0x50352b8d,
+          0x5035aba3,
+          0x50362bb5,
+          0x5036abcb,
+          0x50372be4,
+          0x5037abf7,
+          0x50382c0f,
+          0x5038ac20,
+          0x50392c35,
+          0x5039ac49,
+          0x503a2c69,
+          0x503aac7f,
+          0x503b2c97,
+          0x503baca9,
+          0x503c2cc5,
+          0x503cacdc,
+          0x503d2cf5,
+          0x503dad0b,
+          0x503e2d18,
+          0x503ead2e,
+          0x503f2d40,
           0x503f8382,
-          0x50402d99,
-          0x5040ada9,
-          0x50412dc3,
-          0x5041add2,
-          0x50422dec,
-          0x5042ae09,
-          0x50432e19,
-          0x5043ae29,
-          0x50442e38,
+          0x50402d53,
+          0x5040ad63,
+          0x50412d7d,
+          0x5041ad8c,
+          0x50422da6,
+          0x5042adc3,
+          0x50432dd3,
+          0x5043ade3,
+          0x50442df2,
           0x5044843f,
-          0x50452e4c,
-          0x5045ae6a,
-          0x50462e7d,
-          0x5046ae93,
-          0x50472ea5,
-          0x5047aeba,
-          0x50482ee0,
-          0x5048aeee,
-          0x50492f01,
-          0x5049af16,
-          0x504a2f2c,
-          0x504aaf3c,
-          0x504b2f5c,
-          0x504baf6f,
-          0x504c2f92,
-          0x504cafc0,
-          0x504d2fd2,
-          0x504dafef,
-          0x504e300a,
-          0x504eb026,
-          0x504f3038,
-          0x504fb04f,
-          0x5050305e,
+          0x50452e06,
+          0x5045ae24,
+          0x50462e37,
+          0x5046ae4d,
+          0x50472e5f,
+          0x5047ae74,
+          0x50482e9a,
+          0x5048aea8,
+          0x50492ebb,
+          0x5049aed0,
+          0x504a2ee6,
+          0x504aaef6,
+          0x504b2f16,
+          0x504baf29,
+          0x504c2f4c,
+          0x504caf7a,
+          0x504d2f8c,
+          0x504dafa9,
+          0x504e2fc4,
+          0x504eafe0,
+          0x504f2ff2,
+          0x504fb009,
+          0x50503018,
           0x505086ef,
-          0x50513071,
+          0x5051302b,
           0x58320ec9,
           0x68320e8b,
           0x68328c25,
@@ -900,588 +897,585 @@ Pod::Spec.new do |s|
       const size_t kOpenSSLReasonValuesLen = sizeof(kOpenSSLReasonValues) / sizeof(kOpenSSLReasonValues[0]);
 
       const char kOpenSSLReasonStringData[] =
-          "ASN1_LENGTH_MISMATCH\\0"
-          "AUX_ERROR\\0"
-          "BAD_GET_ASN1_OBJECT_CALL\\0"
-          "BAD_OBJECT_HEADER\\0"
-          "BMPSTRING_IS_WRONG_LENGTH\\0"
-          "BN_LIB\\0"
-          "BOOLEAN_IS_WRONG_LENGTH\\0"
-          "BUFFER_TOO_SMALL\\0"
-          "CONTEXT_NOT_INITIALISED\\0"
-          "DECODE_ERROR\\0"
-          "DEPTH_EXCEEDED\\0"
-          "DIGEST_AND_KEY_TYPE_NOT_SUPPORTED\\0"
-          "ENCODE_ERROR\\0"
-          "ERROR_GETTING_TIME\\0"
-          "EXPECTING_AN_ASN1_SEQUENCE\\0"
-          "EXPECTING_AN_INTEGER\\0"
-          "EXPECTING_AN_OBJECT\\0"
-          "EXPECTING_A_BOOLEAN\\0"
-          "EXPECTING_A_TIME\\0"
-          "EXPLICIT_LENGTH_MISMATCH\\0"
-          "EXPLICIT_TAG_NOT_CONSTRUCTED\\0"
-          "FIELD_MISSING\\0"
-          "FIRST_NUM_TOO_LARGE\\0"
-          "HEADER_TOO_LONG\\0"
-          "ILLEGAL_BITSTRING_FORMAT\\0"
-          "ILLEGAL_BOOLEAN\\0"
-          "ILLEGAL_CHARACTERS\\0"
-          "ILLEGAL_FORMAT\\0"
-          "ILLEGAL_HEX\\0"
-          "ILLEGAL_IMPLICIT_TAG\\0"
-          "ILLEGAL_INTEGER\\0"
-          "ILLEGAL_NESTED_TAGGING\\0"
-          "ILLEGAL_NULL\\0"
-          "ILLEGAL_NULL_VALUE\\0"
-          "ILLEGAL_OBJECT\\0"
-          "ILLEGAL_OPTIONAL_ANY\\0"
-          "ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE\\0"
-          "ILLEGAL_TAGGED_ANY\\0"
-          "ILLEGAL_TIME_VALUE\\0"
-          "INTEGER_NOT_ASCII_FORMAT\\0"
-          "INTEGER_TOO_LARGE_FOR_LONG\\0"
-          "INVALID_BIT_STRING_BITS_LEFT\\0"
-          "INVALID_BMPSTRING_LENGTH\\0"
-          "INVALID_DIGIT\\0"
-          "INVALID_MODIFIER\\0"
-          "INVALID_NUMBER\\0"
-          "INVALID_OBJECT_ENCODING\\0"
-          "INVALID_SEPARATOR\\0"
-          "INVALID_TIME_FORMAT\\0"
-          "INVALID_UNIVERSALSTRING_LENGTH\\0"
-          "INVALID_UTF8STRING\\0"
-          "LIST_ERROR\\0"
-          "MISSING_ASN1_EOS\\0"
-          "MISSING_EOC\\0"
-          "MISSING_SECOND_NUMBER\\0"
-          "MISSING_VALUE\\0"
-          "MSTRING_NOT_UNIVERSAL\\0"
-          "MSTRING_WRONG_TAG\\0"
-          "NESTED_ASN1_ERROR\\0"
-          "NESTED_ASN1_STRING\\0"
-          "NON_HEX_CHARACTERS\\0"
-          "NOT_ASCII_FORMAT\\0"
-          "NOT_ENOUGH_DATA\\0"
-          "NO_MATCHING_CHOICE_TYPE\\0"
-          "NULL_IS_WRONG_LENGTH\\0"
-          "OBJECT_NOT_ASCII_FORMAT\\0"
-          "ODD_NUMBER_OF_CHARS\\0"
-          "SECOND_NUMBER_TOO_LARGE\\0"
-          "SEQUENCE_LENGTH_MISMATCH\\0"
-          "SEQUENCE_NOT_CONSTRUCTED\\0"
-          "SEQUENCE_OR_SET_NEEDS_CONFIG\\0"
-          "SHORT_LINE\\0"
-          "STREAMING_NOT_SUPPORTED\\0"
-          "STRING_TOO_LONG\\0"
-          "STRING_TOO_SHORT\\0"
-          "TAG_VALUE_TOO_HIGH\\0"
-          "TIME_NOT_ASCII_FORMAT\\0"
-          "TOO_LONG\\0"
-          "TYPE_NOT_CONSTRUCTED\\0"
-          "TYPE_NOT_PRIMITIVE\\0"
-          "UNEXPECTED_EOC\\0"
-          "UNIVERSALSTRING_IS_WRONG_LENGTH\\0"
-          "UNKNOWN_FORMAT\\0"
-          "UNKNOWN_MESSAGE_DIGEST_ALGORITHM\\0"
-          "UNKNOWN_SIGNATURE_ALGORITHM\\0"
-          "UNKNOWN_TAG\\0"
-          "UNSUPPORTED_ANY_DEFINED_BY_TYPE\\0"
-          "UNSUPPORTED_PUBLIC_KEY_TYPE\\0"
-          "UNSUPPORTED_TYPE\\0"
-          "WRONG_PUBLIC_KEY_TYPE\\0"
-          "WRONG_TAG\\0"
-          "WRONG_TYPE\\0"
-          "BAD_FOPEN_MODE\\0"
-          "BROKEN_PIPE\\0"
-          "CONNECT_ERROR\\0"
-          "ERROR_SETTING_NBIO\\0"
-          "INVALID_ARGUMENT\\0"
-          "IN_USE\\0"
-          "KEEPALIVE\\0"
-          "NBIO_CONNECT_ERROR\\0"
-          "NO_HOSTNAME_SPECIFIED\\0"
-          "NO_PORT_SPECIFIED\\0"
-          "NO_SUCH_FILE\\0"
-          "NULL_PARAMETER\\0"
-          "SYS_LIB\\0"
-          "UNABLE_TO_CREATE_SOCKET\\0"
-          "UNINITIALIZED\\0"
-          "UNSUPPORTED_METHOD\\0"
-          "WRITE_TO_READ_ONLY_BIO\\0"
-          "ARG2_LT_ARG3\\0"
-          "BAD_ENCODING\\0"
-          "BAD_RECIPROCAL\\0"
-          "BIGNUM_TOO_LONG\\0"
-          "BITS_TOO_SMALL\\0"
-          "CALLED_WITH_EVEN_MODULUS\\0"
-          "DIV_BY_ZERO\\0"
-          "EXPAND_ON_STATIC_BIGNUM_DATA\\0"
-          "INPUT_NOT_REDUCED\\0"
-          "INVALID_RANGE\\0"
-          "NEGATIVE_NUMBER\\0"
-          "NOT_A_SQUARE\\0"
-          "NOT_INITIALIZED\\0"
-          "NO_INVERSE\\0"
-          "PRIVATE_KEY_TOO_LARGE\\0"
-          "P_IS_NOT_PRIME\\0"
-          "TOO_MANY_ITERATIONS\\0"
-          "TOO_MANY_TEMPORARY_VARIABLES\\0"
-          "AES_KEY_SETUP_FAILED\\0"
-          "BAD_DECRYPT\\0"
-          "BAD_KEY_LENGTH\\0"
-          "CTRL_NOT_IMPLEMENTED\\0"
-          "CTRL_OPERATION_NOT_IMPLEMENTED\\0"
-          "DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH\\0"
-          "INITIALIZATION_ERROR\\0"
-          "INPUT_NOT_INITIALIZED\\0"
-          "INVALID_AD_SIZE\\0"
-          "INVALID_KEY_LENGTH\\0"
-          "INVALID_NONCE_SIZE\\0"
-          "INVALID_OPERATION\\0"
-          "IV_TOO_LARGE\\0"
-          "NO_CIPHER_SET\\0"
-          "NO_DIRECTION_SET\\0"
-          "OUTPUT_ALIASES_INPUT\\0"
-          "TAG_TOO_LARGE\\0"
-          "TOO_LARGE\\0"
-          "UNSUPPORTED_AD_SIZE\\0"
-          "UNSUPPORTED_INPUT_SIZE\\0"
-          "UNSUPPORTED_KEY_SIZE\\0"
-          "UNSUPPORTED_NONCE_SIZE\\0"
-          "UNSUPPORTED_TAG_SIZE\\0"
-          "WRONG_FINAL_BLOCK_LENGTH\\0"
-          "LIST_CANNOT_BE_NULL\\0"
-          "MISSING_CLOSE_SQUARE_BRACKET\\0"
-          "MISSING_EQUAL_SIGN\\0"
-          "NO_CLOSE_BRACE\\0"
-          "UNABLE_TO_CREATE_NEW_SECTION\\0"
-          "VARIABLE_HAS_NO_VALUE\\0"
-          "BAD_GENERATOR\\0"
-          "INVALID_PUBKEY\\0"
-          "MODULUS_TOO_LARGE\\0"
-          "NO_PRIVATE_VALUE\\0"
-          "BAD_Q_VALUE\\0"
-          "BAD_VERSION\\0"
-          "MISSING_PARAMETERS\\0"
-          "NEED_NEW_SETUP_VALUES\\0"
-          "BIGNUM_OUT_OF_RANGE\\0"
-          "COORDINATES_OUT_OF_RANGE\\0"
-          "D2I_ECPKPARAMETERS_FAILURE\\0"
-          "EC_GROUP_NEW_BY_NAME_FAILURE\\0"
-          "GROUP2PKPARAMETERS_FAILURE\\0"
-          "GROUP_MISMATCH\\0"
-          "I2D_ECPKPARAMETERS_FAILURE\\0"
-          "INCOMPATIBLE_OBJECTS\\0"
-          "INVALID_COFACTOR\\0"
-          "INVALID_COMPRESSED_POINT\\0"
-          "INVALID_COMPRESSION_BIT\\0"
-          "INVALID_ENCODING\\0"
-          "INVALID_FIELD\\0"
-          "INVALID_FORM\\0"
-          "INVALID_GROUP_ORDER\\0"
-          "INVALID_PRIVATE_KEY\\0"
-          "MISSING_PRIVATE_KEY\\0"
-          "NON_NAMED_CURVE\\0"
-          "PKPARAMETERS2GROUP_FAILURE\\0"
-          "POINT_AT_INFINITY\\0"
-          "POINT_IS_NOT_ON_CURVE\\0"
-          "SLOT_FULL\\0"
-          "UNDEFINED_GENERATOR\\0"
-          "UNKNOWN_GROUP\\0"
-          "UNKNOWN_ORDER\\0"
-          "WRONG_CURVE_PARAMETERS\\0"
-          "WRONG_ORDER\\0"
-          "KDF_FAILED\\0"
-          "POINT_ARITHMETIC_FAILURE\\0"
-          "BAD_SIGNATURE\\0"
-          "NOT_IMPLEMENTED\\0"
-          "RANDOM_NUMBER_GENERATION_FAILED\\0"
-          "OPERATION_NOT_SUPPORTED\\0"
-          "COMMAND_NOT_SUPPORTED\\0"
-          "DIFFERENT_KEY_TYPES\\0"
-          "DIFFERENT_PARAMETERS\\0"
-          "EXPECTING_AN_EC_KEY_KEY\\0"
-          "EXPECTING_AN_RSA_KEY\\0"
-          "EXPECTING_A_DSA_KEY\\0"
-          "ILLEGAL_OR_UNSUPPORTED_PADDING_MODE\\0"
-          "INVALID_DIGEST_LENGTH\\0"
-          "INVALID_DIGEST_TYPE\\0"
-          "INVALID_KEYBITS\\0"
-          "INVALID_MGF1_MD\\0"
-          "INVALID_PADDING_MODE\\0"
-          "INVALID_PSS_SALTLEN\\0"
-          "KEYS_NOT_SET\\0"
-          "NO_DEFAULT_DIGEST\\0"
-          "NO_KEY_SET\\0"
-          "NO_MDC2_SUPPORT\\0"
-          "NO_NID_FOR_CURVE\\0"
-          "NO_OPERATION_SET\\0"
-          "NO_PARAMETERS_SET\\0"
-          "OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE\\0"
-          "OPERATON_NOT_INITIALIZED\\0"
-          "UNKNOWN_PUBLIC_KEY_TYPE\\0"
-          "UNSUPPORTED_ALGORITHM\\0"
-          "OUTPUT_TOO_LARGE\\0"
-          "UNKNOWN_NID\\0"
-          "BAD_BASE64_DECODE\\0"
-          "BAD_END_LINE\\0"
-          "BAD_IV_CHARS\\0"
-          "BAD_PASSWORD_READ\\0"
-          "CIPHER_IS_NULL\\0"
-          "ERROR_CONVERTING_PRIVATE_KEY\\0"
-          "NOT_DEK_INFO\\0"
-          "NOT_ENCRYPTED\\0"
-          "NOT_PROC_TYPE\\0"
-          "NO_START_LINE\\0"
-          "READ_KEY\\0"
-          "SHORT_HEADER\\0"
-          "UNSUPPORTED_CIPHER\\0"
-          "UNSUPPORTED_ENCRYPTION\\0"
-          "BAD_PKCS12_DATA\\0"
-          "BAD_PKCS12_VERSION\\0"
-          "CIPHER_HAS_NO_OBJECT_IDENTIFIER\\0"
-          "CRYPT_ERROR\\0"
-          "ENCRYPT_ERROR\\0"
-          "ERROR_SETTING_CIPHER_PARAMS\\0"
-          "INCORRECT_PASSWORD\\0"
-          "KEYGEN_FAILURE\\0"
-          "KEY_GEN_ERROR\\0"
-          "METHOD_NOT_SUPPORTED\\0"
-          "MISSING_MAC\\0"
-          "MULTIPLE_PRIVATE_KEYS_IN_PKCS12\\0"
-          "PKCS12_PUBLIC_KEY_INTEGRITY_NOT_SUPPORTED\\0"
-          "PKCS12_TOO_DEEPLY_NESTED\\0"
-          "PRIVATE_KEY_DECODE_ERROR\\0"
-          "PRIVATE_KEY_ENCODE_ERROR\\0"
-          "UNKNOWN_ALGORITHM\\0"
-          "UNKNOWN_CIPHER\\0"
-          "UNKNOWN_CIPHER_ALGORITHM\\0"
-          "UNKNOWN_DIGEST\\0"
-          "UNKNOWN_HASH\\0"
-          "UNSUPPORTED_PRIVATE_KEY_ALGORITHM\\0"
-          "BAD_E_VALUE\\0"
-          "BAD_FIXED_HEADER_DECRYPT\\0"
-          "BAD_PAD_BYTE_COUNT\\0"
-          "BAD_RSA_PARAMETERS\\0"
-          "BLOCK_TYPE_IS_NOT_01\\0"
-          "BN_NOT_INITIALIZED\\0"
-          "CANNOT_RECOVER_MULTI_PRIME_KEY\\0"
-          "CRT_PARAMS_ALREADY_GIVEN\\0"
-          "CRT_VALUES_INCORRECT\\0"
-          "DATA_LEN_NOT_EQUAL_TO_MOD_LEN\\0"
-          "DATA_TOO_LARGE\\0"
-          "DATA_TOO_LARGE_FOR_KEY_SIZE\\0"
-          "DATA_TOO_LARGE_FOR_MODULUS\\0"
-          "DATA_TOO_SMALL\\0"
-          "DATA_TOO_SMALL_FOR_KEY_SIZE\\0"
-          "DIGEST_TOO_BIG_FOR_RSA_KEY\\0"
-          "D_E_NOT_CONGRUENT_TO_1\\0"
-          "EMPTY_PUBLIC_KEY\\0"
-          "FIRST_OCTET_INVALID\\0"
-          "INCONSISTENT_SET_OF_CRT_VALUES\\0"
-          "INTERNAL_ERROR\\0"
-          "INVALID_MESSAGE_LENGTH\\0"
-          "KEY_SIZE_TOO_SMALL\\0"
-          "LAST_OCTET_INVALID\\0"
-          "MUST_HAVE_AT_LEAST_TWO_PRIMES\\0"
-          "NO_PUBLIC_EXPONENT\\0"
-          "NULL_BEFORE_BLOCK_MISSING\\0"
-          "N_NOT_EQUAL_P_Q\\0"
-          "OAEP_DECODING_ERROR\\0"
-          "ONLY_ONE_OF_P_Q_GIVEN\\0"
-          "OUTPUT_BUFFER_TOO_SMALL\\0"
-          "PADDING_CHECK_FAILED\\0"
-          "PKCS_DECODING_ERROR\\0"
-          "SLEN_CHECK_FAILED\\0"
-          "SLEN_RECOVERY_FAILED\\0"
-          "UNKNOWN_ALGORITHM_TYPE\\0"
-          "UNKNOWN_PADDING_TYPE\\0"
-          "VALUE_MISSING\\0"
-          "WRONG_SIGNATURE_LENGTH\\0"
-          "APP_DATA_IN_HANDSHAKE\\0"
-          "ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT\\0"
-          "BAD_ALERT\\0"
-          "BAD_CHANGE_CIPHER_SPEC\\0"
-          "BAD_DATA_RETURNED_BY_CALLBACK\\0"
-          "BAD_DH_P_LENGTH\\0"
-          "BAD_DIGEST_LENGTH\\0"
-          "BAD_ECC_CERT\\0"
-          "BAD_ECPOINT\\0"
-          "BAD_HANDSHAKE_RECORD\\0"
-          "BAD_HELLO_REQUEST\\0"
-          "BAD_LENGTH\\0"
-          "BAD_PACKET_LENGTH\\0"
-          "BAD_RSA_ENCRYPT\\0"
-          "BAD_SRTP_MKI_VALUE\\0"
-          "BAD_SRTP_PROTECTION_PROFILE_LIST\\0"
-          "BAD_SSL_FILETYPE\\0"
-          "BAD_WRITE_RETRY\\0"
-          "BIO_NOT_SET\\0"
-          "BLOCK_CIPHER_PAD_IS_WRONG\\0"
-          "BUFFERED_MESSAGES_ON_CIPHER_CHANGE\\0"
-          "CA_DN_LENGTH_MISMATCH\\0"
-          "CA_DN_TOO_LONG\\0"
-          "CCS_RECEIVED_EARLY\\0"
-          "CERTIFICATE_VERIFY_FAILED\\0"
-          "CERT_CB_ERROR\\0"
-          "CERT_LENGTH_MISMATCH\\0"
-          "CHANNEL_ID_NOT_P256\\0"
-          "CHANNEL_ID_SIGNATURE_INVALID\\0"
-          "CIPHER_OR_HASH_UNAVAILABLE\\0"
-          "CLIENTHELLO_PARSE_FAILED\\0"
-          "CLIENTHELLO_TLSEXT\\0"
-          "CONNECTION_REJECTED\\0"
-          "CONNECTION_TYPE_NOT_SET\\0"
-          "CUSTOM_EXTENSION_ERROR\\0"
-          "DATA_LENGTH_TOO_LONG\\0"
-          "DECRYPTION_FAILED\\0"
-          "DECRYPTION_FAILED_OR_BAD_RECORD_MAC\\0"
-          "DH_PUBLIC_VALUE_LENGTH_IS_WRONG\\0"
-          "DH_P_TOO_LONG\\0"
-          "DIGEST_CHECK_FAILED\\0"
-          "DOWNGRADE_DETECTED\\0"
-          "DTLS_MESSAGE_TOO_BIG\\0"
-          "DUPLICATE_EXTENSION\\0"
-          "DUPLICATE_KEY_SHARE\\0"
-          "ECC_CERT_NOT_FOR_SIGNING\\0"
-          "EMS_STATE_INCONSISTENT\\0"
-          "ENCRYPTED_LENGTH_TOO_LONG\\0"
-          "ERROR_ADDING_EXTENSION\\0"
-          "ERROR_IN_RECEIVED_CIPHER_LIST\\0"
-          "ERROR_PARSING_EXTENSION\\0"
-          "EXCESSIVE_MESSAGE_SIZE\\0"
-          "EXTRA_DATA_IN_MESSAGE\\0"
-          "FRAGMENT_MISMATCH\\0"
-          "GOT_NEXT_PROTO_WITHOUT_EXTENSION\\0"
-          "HANDSHAKE_FAILURE_ON_CLIENT_HELLO\\0"
-          "HTTPS_PROXY_REQUEST\\0"
-          "HTTP_REQUEST\\0"
-          "INAPPROPRIATE_FALLBACK\\0"
-          "INVALID_ALPN_PROTOCOL\\0"
-          "INVALID_COMMAND\\0"
-          "INVALID_COMPRESSION_LIST\\0"
-          "INVALID_MESSAGE\\0"
-          "INVALID_OUTER_RECORD_TYPE\\0"
-          "INVALID_SSL_SESSION\\0"
-          "INVALID_TICKET_KEYS_LENGTH\\0"
-          "LENGTH_MISMATCH\\0"
-          "LIBRARY_HAS_NO_CIPHERS\\0"
-          "MISSING_EXTENSION\\0"
-          "MISSING_KEY_SHARE\\0"
-          "MISSING_RSA_CERTIFICATE\\0"
-          "MISSING_TMP_DH_KEY\\0"
-          "MISSING_TMP_ECDH_KEY\\0"
-          "MIXED_SPECIAL_OPERATOR_WITH_GROUPS\\0"
-          "MTU_TOO_SMALL\\0"
-          "NEGOTIATED_BOTH_NPN_AND_ALPN\\0"
-          "NESTED_GROUP\\0"
-          "NO_CERTIFICATES_RETURNED\\0"
-          "NO_CERTIFICATE_ASSIGNED\\0"
-          "NO_CERTIFICATE_SET\\0"
-          "NO_CIPHERS_AVAILABLE\\0"
-          "NO_CIPHERS_PASSED\\0"
-          "NO_CIPHERS_SPECIFIED\\0"
-          "NO_CIPHER_MATCH\\0"
-          "NO_COMMON_SIGNATURE_ALGORITHMS\\0"
-          "NO_COMPRESSION_SPECIFIED\\0"
-          "NO_GROUPS_SPECIFIED\\0"
-          "NO_METHOD_SPECIFIED\\0"
-          "NO_P256_SUPPORT\\0"
-          "NO_PRIVATE_KEY_ASSIGNED\\0"
-          "NO_RENEGOTIATION\\0"
-          "NO_REQUIRED_DIGEST\\0"
-          "NO_SHARED_CIPHER\\0"
-          "NO_SHARED_GROUP\\0"
-          "NULL_SSL_CTX\\0"
-          "NULL_SSL_METHOD_PASSED\\0"
-          "OLD_SESSION_CIPHER_NOT_RETURNED\\0"
-          "OLD_SESSION_VERSION_NOT_RETURNED\\0"
-          "PARSE_TLSEXT\\0"
-          "PATH_TOO_LONG\\0"
-          "PEER_DID_NOT_RETURN_A_CERTIFICATE\\0"
-          "PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE\\0"
-          "PROTOCOL_IS_SHUTDOWN\\0"
-          "PSK_IDENTITY_NOT_FOUND\\0"
-          "PSK_NO_CLIENT_CB\\0"
-          "PSK_NO_SERVER_CB\\0"
-          "READ_TIMEOUT_EXPIRED\\0"
-          "RECORD_LENGTH_MISMATCH\\0"
-          "RECORD_TOO_LARGE\\0"
-          "RENEGOTIATION_EMS_MISMATCH\\0"
-          "RENEGOTIATION_ENCODING_ERR\\0"
-          "RENEGOTIATION_MISMATCH\\0"
-          "REQUIRED_CIPHER_MISSING\\0"
-          "RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION\\0"
-          "RESUMED_NON_EMS_SESSION_WITH_EMS_EXTENSION\\0"
-          "SCSV_RECEIVED_WHEN_RENEGOTIATING\\0"
-          "SERVERHELLO_TLSEXT\\0"
-          "SESSION_ID_CONTEXT_UNINITIALIZED\\0"
-          "SESSION_MAY_NOT_BE_CREATED\\0"
-          "SHUTDOWN_WHILE_IN_INIT\\0"
-          "SIGNATURE_ALGORITHMS_EXTENSION_SENT_BY_SERVER\\0"
-          "SRTP_COULD_NOT_ALLOCATE_PROFILES\\0"
-          "SRTP_UNKNOWN_PROTECTION_PROFILE\\0"
-          "SSL3_EXT_INVALID_SERVERNAME\\0"
-          "SSLV3_ALERT_BAD_CERTIFICATE\\0"
-          "SSLV3_ALERT_BAD_RECORD_MAC\\0"
-          "SSLV3_ALERT_CERTIFICATE_EXPIRED\\0"
-          "SSLV3_ALERT_CERTIFICATE_REVOKED\\0"
-          "SSLV3_ALERT_CERTIFICATE_UNKNOWN\\0"
-          "SSLV3_ALERT_CLOSE_NOTIFY\\0"
-          "SSLV3_ALERT_DECOMPRESSION_FAILURE\\0"
-          "SSLV3_ALERT_HANDSHAKE_FAILURE\\0"
-          "SSLV3_ALERT_ILLEGAL_PARAMETER\\0"
-          "SSLV3_ALERT_NO_CERTIFICATE\\0"
-          "SSLV3_ALERT_UNEXPECTED_MESSAGE\\0"
-          "SSLV3_ALERT_UNSUPPORTED_CERTIFICATE\\0"
-          "SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION\\0"
-          "SSL_HANDSHAKE_FAILURE\\0"
-          "SSL_SESSION_ID_CONTEXT_TOO_LONG\\0"
-          "TLSV1_ALERT_ACCESS_DENIED\\0"
-          "TLSV1_ALERT_DECODE_ERROR\\0"
-          "TLSV1_ALERT_DECRYPTION_FAILED\\0"
-          "TLSV1_ALERT_DECRYPT_ERROR\\0"
-          "TLSV1_ALERT_EXPORT_RESTRICTION\\0"
-          "TLSV1_ALERT_INAPPROPRIATE_FALLBACK\\0"
-          "TLSV1_ALERT_INSUFFICIENT_SECURITY\\0"
-          "TLSV1_ALERT_INTERNAL_ERROR\\0"
-          "TLSV1_ALERT_NO_RENEGOTIATION\\0"
-          "TLSV1_ALERT_PROTOCOL_VERSION\\0"
-          "TLSV1_ALERT_RECORD_OVERFLOW\\0"
-          "TLSV1_ALERT_UNKNOWN_CA\\0"
-          "TLSV1_ALERT_USER_CANCELLED\\0"
-          "TLSV1_BAD_CERTIFICATE_HASH_VALUE\\0"
-          "TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE\\0"
-          "TLSV1_CERTIFICATE_REQUIRED\\0"
-          "TLSV1_CERTIFICATE_UNOBTAINABLE\\0"
-          "TLSV1_UNKNOWN_PSK_IDENTITY\\0"
-          "TLSV1_UNRECOGNIZED_NAME\\0"
-          "TLSV1_UNSUPPORTED_EXTENSION\\0"
-          "TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST\\0"
-          "TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG\\0"
-          "TOO_MANY_EMPTY_FRAGMENTS\\0"
-          "TOO_MANY_KEY_UPDATES\\0"
-          "TOO_MANY_WARNING_ALERTS\\0"
-          "UNABLE_TO_FIND_ECDH_PARAMETERS\\0"
-          "UNEXPECTED_EXTENSION\\0"
-          "UNEXPECTED_MESSAGE\\0"
-          "UNEXPECTED_OPERATOR_IN_GROUP\\0"
-          "UNEXPECTED_RECORD\\0"
-          "UNKNOWN_ALERT_TYPE\\0"
-          "UNKNOWN_CERTIFICATE_TYPE\\0"
-          "UNKNOWN_CIPHER_RETURNED\\0"
-          "UNKNOWN_CIPHER_TYPE\\0"
-          "UNKNOWN_KEY_EXCHANGE_TYPE\\0"
-          "UNKNOWN_PROTOCOL\\0"
-          "UNKNOWN_SSL_VERSION\\0"
-          "UNKNOWN_STATE\\0"
-          "UNSAFE_LEGACY_RENEGOTIATION_DISABLED\\0"
-          "UNSUPPORTED_COMPRESSION_ALGORITHM\\0"
-          "UNSUPPORTED_ELLIPTIC_CURVE\\0"
-          "UNSUPPORTED_PROTOCOL\\0"
-          "UNSUPPORTED_PROTOCOL_FOR_CUSTOM_KEY\\0"
-          "WRONG_CERTIFICATE_TYPE\\0"
-          "WRONG_CIPHER_RETURNED\\0"
-          "WRONG_CURVE\\0"
-          "WRONG_MESSAGE_TYPE\\0"
-          "WRONG_SIGNATURE_TYPE\\0"
-          "WRONG_SSL_VERSION\\0"
-          "WRONG_VERSION_NUMBER\\0"
-          "X509_LIB\\0"
-          "X509_VERIFICATION_SETUP_PROBLEMS\\0"
-          "AKID_MISMATCH\\0"
-          "BAD_PKCS7_VERSION\\0"
-          "BAD_X509_FILETYPE\\0"
-          "BASE64_DECODE_ERROR\\0"
-          "CANT_CHECK_DH_KEY\\0"
-          "CERT_ALREADY_IN_HASH_TABLE\\0"
-          "CRL_ALREADY_DELTA\\0"
-          "CRL_VERIFY_FAILURE\\0"
-          "IDP_MISMATCH\\0"
-          "INVALID_DIRECTORY\\0"
-          "INVALID_FIELD_NAME\\0"
-          "INVALID_PSS_PARAMETERS\\0"
-          "INVALID_TRUST\\0"
-          "ISSUER_MISMATCH\\0"
-          "KEY_TYPE_MISMATCH\\0"
-          "KEY_VALUES_MISMATCH\\0"
-          "LOADING_CERT_DIR\\0"
-          "LOADING_DEFAULTS\\0"
-          "NAME_TOO_LONG\\0"
-          "NEWER_CRL_NOT_NEWER\\0"
-          "NOT_PKCS7_SIGNED_DATA\\0"
-          "NO_CERTIFICATES_INCLUDED\\0"
-          "NO_CERT_SET_FOR_US_TO_VERIFY\\0"
-          "NO_CRLS_INCLUDED\\0"
-          "NO_CRL_NUMBER\\0"
-          "PUBLIC_KEY_DECODE_ERROR\\0"
-          "PUBLIC_KEY_ENCODE_ERROR\\0"
-          "SHOULD_RETRY\\0"
-          "UNKNOWN_KEY_TYPE\\0"
-          "UNKNOWN_PURPOSE_ID\\0"
-          "UNKNOWN_TRUST_ID\\0"
-          "WRONG_LOOKUP_TYPE\\0"
-          "BAD_IP_ADDRESS\\0"
-          "BAD_OBJECT\\0"
-          "BN_DEC2BN_ERROR\\0"
-          "BN_TO_ASN1_INTEGER_ERROR\\0"
-          "CANNOT_FIND_FREE_FUNCTION\\0"
-          "DIRNAME_ERROR\\0"
-          "DISTPOINT_ALREADY_SET\\0"
-          "DUPLICATE_ZONE_ID\\0"
-          "ERROR_CONVERTING_ZONE\\0"
-          "ERROR_CREATING_EXTENSION\\0"
-          "ERROR_IN_EXTENSION\\0"
-          "EXPECTED_A_SECTION_NAME\\0"
-          "EXTENSION_EXISTS\\0"
-          "EXTENSION_NAME_ERROR\\0"
-          "EXTENSION_NOT_FOUND\\0"
-          "EXTENSION_SETTING_NOT_SUPPORTED\\0"
-          "EXTENSION_VALUE_ERROR\\0"
-          "ILLEGAL_EMPTY_EXTENSION\\0"
-          "ILLEGAL_HEX_DIGIT\\0"
-          "INCORRECT_POLICY_SYNTAX_TAG\\0"
-          "INVALID_BOOLEAN_STRING\\0"
-          "INVALID_EXTENSION_STRING\\0"
-          "INVALID_MULTIPLE_RDNS\\0"
-          "INVALID_NAME\\0"
-          "INVALID_NULL_ARGUMENT\\0"
-          "INVALID_NULL_NAME\\0"
-          "INVALID_NULL_VALUE\\0"
-          "INVALID_NUMBERS\\0"
-          "INVALID_OBJECT_IDENTIFIER\\0"
-          "INVALID_OPTION\\0"
-          "INVALID_POLICY_IDENTIFIER\\0"
-          "INVALID_PROXY_POLICY_SETTING\\0"
-          "INVALID_PURPOSE\\0"
-          "INVALID_SECTION\\0"
-          "INVALID_SYNTAX\\0"
-          "ISSUER_DECODE_ERROR\\0"
-          "NEED_ORGANIZATION_AND_NUMBERS\\0"
-          "NO_CONFIG_DATABASE\\0"
-          "NO_ISSUER_CERTIFICATE\\0"
-          "NO_ISSUER_DETAILS\\0"
-          "NO_POLICY_IDENTIFIER\\0"
-          "NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED\\0"
-          "NO_PUBLIC_KEY\\0"
-          "NO_SUBJECT_DETAILS\\0"
-          "ODD_NUMBER_OF_DIGITS\\0"
-          "OPERATION_NOT_DEFINED\\0"
-          "OTHERNAME_ERROR\\0"
-          "POLICY_LANGUAGE_ALREADY_DEFINED\\0"
-          "POLICY_PATH_LENGTH\\0"
-          "POLICY_PATH_LENGTH_ALREADY_DEFINED\\0"
-          "POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY\\0"
-          "SECTION_NOT_FOUND\\0"
-          "UNABLE_TO_GET_ISSUER_DETAILS\\0"
-          "UNABLE_TO_GET_ISSUER_KEYID\\0"
-          "UNKNOWN_BIT_STRING_ARGUMENT\\0"
-          "UNKNOWN_EXTENSION\\0"
-          "UNKNOWN_EXTENSION_NAME\\0"
-          "UNKNOWN_OPTION\\0"
-          "UNSUPPORTED_OPTION\\0"
-          "USER_TOO_LONG\\0"
+          "ASN1_LENGTH_MISMATCH\0"
+          "AUX_ERROR\0"
+          "BAD_GET_ASN1_OBJECT_CALL\0"
+          "BAD_OBJECT_HEADER\0"
+          "BMPSTRING_IS_WRONG_LENGTH\0"
+          "BN_LIB\0"
+          "BOOLEAN_IS_WRONG_LENGTH\0"
+          "BUFFER_TOO_SMALL\0"
+          "CONTEXT_NOT_INITIALISED\0"
+          "DECODE_ERROR\0"
+          "DEPTH_EXCEEDED\0"
+          "DIGEST_AND_KEY_TYPE_NOT_SUPPORTED\0"
+          "ENCODE_ERROR\0"
+          "ERROR_GETTING_TIME\0"
+          "EXPECTING_AN_ASN1_SEQUENCE\0"
+          "EXPECTING_AN_INTEGER\0"
+          "EXPECTING_AN_OBJECT\0"
+          "EXPECTING_A_BOOLEAN\0"
+          "EXPECTING_A_TIME\0"
+          "EXPLICIT_LENGTH_MISMATCH\0"
+          "EXPLICIT_TAG_NOT_CONSTRUCTED\0"
+          "FIELD_MISSING\0"
+          "FIRST_NUM_TOO_LARGE\0"
+          "HEADER_TOO_LONG\0"
+          "ILLEGAL_BITSTRING_FORMAT\0"
+          "ILLEGAL_BOOLEAN\0"
+          "ILLEGAL_CHARACTERS\0"
+          "ILLEGAL_FORMAT\0"
+          "ILLEGAL_HEX\0"
+          "ILLEGAL_IMPLICIT_TAG\0"
+          "ILLEGAL_INTEGER\0"
+          "ILLEGAL_NESTED_TAGGING\0"
+          "ILLEGAL_NULL\0"
+          "ILLEGAL_NULL_VALUE\0"
+          "ILLEGAL_OBJECT\0"
+          "ILLEGAL_OPTIONAL_ANY\0"
+          "ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE\0"
+          "ILLEGAL_TAGGED_ANY\0"
+          "ILLEGAL_TIME_VALUE\0"
+          "INTEGER_NOT_ASCII_FORMAT\0"
+          "INTEGER_TOO_LARGE_FOR_LONG\0"
+          "INVALID_BIT_STRING_BITS_LEFT\0"
+          "INVALID_BMPSTRING_LENGTH\0"
+          "INVALID_DIGIT\0"
+          "INVALID_MODIFIER\0"
+          "INVALID_NUMBER\0"
+          "INVALID_OBJECT_ENCODING\0"
+          "INVALID_SEPARATOR\0"
+          "INVALID_TIME_FORMAT\0"
+          "INVALID_UNIVERSALSTRING_LENGTH\0"
+          "INVALID_UTF8STRING\0"
+          "LIST_ERROR\0"
+          "MISSING_ASN1_EOS\0"
+          "MISSING_EOC\0"
+          "MISSING_SECOND_NUMBER\0"
+          "MISSING_VALUE\0"
+          "MSTRING_NOT_UNIVERSAL\0"
+          "MSTRING_WRONG_TAG\0"
+          "NESTED_ASN1_ERROR\0"
+          "NESTED_ASN1_STRING\0"
+          "NON_HEX_CHARACTERS\0"
+          "NOT_ASCII_FORMAT\0"
+          "NOT_ENOUGH_DATA\0"
+          "NO_MATCHING_CHOICE_TYPE\0"
+          "NULL_IS_WRONG_LENGTH\0"
+          "OBJECT_NOT_ASCII_FORMAT\0"
+          "ODD_NUMBER_OF_CHARS\0"
+          "SECOND_NUMBER_TOO_LARGE\0"
+          "SEQUENCE_LENGTH_MISMATCH\0"
+          "SEQUENCE_NOT_CONSTRUCTED\0"
+          "SEQUENCE_OR_SET_NEEDS_CONFIG\0"
+          "SHORT_LINE\0"
+          "STREAMING_NOT_SUPPORTED\0"
+          "STRING_TOO_LONG\0"
+          "STRING_TOO_SHORT\0"
+          "TAG_VALUE_TOO_HIGH\0"
+          "TIME_NOT_ASCII_FORMAT\0"
+          "TOO_LONG\0"
+          "TYPE_NOT_CONSTRUCTED\0"
+          "TYPE_NOT_PRIMITIVE\0"
+          "UNEXPECTED_EOC\0"
+          "UNIVERSALSTRING_IS_WRONG_LENGTH\0"
+          "UNKNOWN_FORMAT\0"
+          "UNKNOWN_MESSAGE_DIGEST_ALGORITHM\0"
+          "UNKNOWN_SIGNATURE_ALGORITHM\0"
+          "UNKNOWN_TAG\0"
+          "UNSUPPORTED_ANY_DEFINED_BY_TYPE\0"
+          "UNSUPPORTED_PUBLIC_KEY_TYPE\0"
+          "UNSUPPORTED_TYPE\0"
+          "WRONG_PUBLIC_KEY_TYPE\0"
+          "WRONG_TAG\0"
+          "WRONG_TYPE\0"
+          "BAD_FOPEN_MODE\0"
+          "BROKEN_PIPE\0"
+          "CONNECT_ERROR\0"
+          "ERROR_SETTING_NBIO\0"
+          "INVALID_ARGUMENT\0"
+          "IN_USE\0"
+          "KEEPALIVE\0"
+          "NBIO_CONNECT_ERROR\0"
+          "NO_HOSTNAME_SPECIFIED\0"
+          "NO_PORT_SPECIFIED\0"
+          "NO_SUCH_FILE\0"
+          "NULL_PARAMETER\0"
+          "SYS_LIB\0"
+          "UNABLE_TO_CREATE_SOCKET\0"
+          "UNINITIALIZED\0"
+          "UNSUPPORTED_METHOD\0"
+          "WRITE_TO_READ_ONLY_BIO\0"
+          "ARG2_LT_ARG3\0"
+          "BAD_ENCODING\0"
+          "BAD_RECIPROCAL\0"
+          "BIGNUM_TOO_LONG\0"
+          "BITS_TOO_SMALL\0"
+          "CALLED_WITH_EVEN_MODULUS\0"
+          "DIV_BY_ZERO\0"
+          "EXPAND_ON_STATIC_BIGNUM_DATA\0"
+          "INPUT_NOT_REDUCED\0"
+          "INVALID_RANGE\0"
+          "NEGATIVE_NUMBER\0"
+          "NOT_A_SQUARE\0"
+          "NOT_INITIALIZED\0"
+          "NO_INVERSE\0"
+          "PRIVATE_KEY_TOO_LARGE\0"
+          "P_IS_NOT_PRIME\0"
+          "TOO_MANY_ITERATIONS\0"
+          "TOO_MANY_TEMPORARY_VARIABLES\0"
+          "AES_KEY_SETUP_FAILED\0"
+          "BAD_DECRYPT\0"
+          "BAD_KEY_LENGTH\0"
+          "CTRL_NOT_IMPLEMENTED\0"
+          "CTRL_OPERATION_NOT_IMPLEMENTED\0"
+          "DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH\0"
+          "INITIALIZATION_ERROR\0"
+          "INPUT_NOT_INITIALIZED\0"
+          "INVALID_AD_SIZE\0"
+          "INVALID_KEY_LENGTH\0"
+          "INVALID_NONCE_SIZE\0"
+          "INVALID_OPERATION\0"
+          "IV_TOO_LARGE\0"
+          "NO_CIPHER_SET\0"
+          "NO_DIRECTION_SET\0"
+          "OUTPUT_ALIASES_INPUT\0"
+          "TAG_TOO_LARGE\0"
+          "TOO_LARGE\0"
+          "UNSUPPORTED_AD_SIZE\0"
+          "UNSUPPORTED_INPUT_SIZE\0"
+          "UNSUPPORTED_KEY_SIZE\0"
+          "UNSUPPORTED_NONCE_SIZE\0"
+          "UNSUPPORTED_TAG_SIZE\0"
+          "WRONG_FINAL_BLOCK_LENGTH\0"
+          "LIST_CANNOT_BE_NULL\0"
+          "MISSING_CLOSE_SQUARE_BRACKET\0"
+          "MISSING_EQUAL_SIGN\0"
+          "NO_CLOSE_BRACE\0"
+          "UNABLE_TO_CREATE_NEW_SECTION\0"
+          "VARIABLE_HAS_NO_VALUE\0"
+          "BAD_GENERATOR\0"
+          "INVALID_PUBKEY\0"
+          "MODULUS_TOO_LARGE\0"
+          "NO_PRIVATE_VALUE\0"
+          "BAD_Q_VALUE\0"
+          "BAD_VERSION\0"
+          "MISSING_PARAMETERS\0"
+          "NEED_NEW_SETUP_VALUES\0"
+          "BIGNUM_OUT_OF_RANGE\0"
+          "COORDINATES_OUT_OF_RANGE\0"
+          "D2I_ECPKPARAMETERS_FAILURE\0"
+          "EC_GROUP_NEW_BY_NAME_FAILURE\0"
+          "GROUP2PKPARAMETERS_FAILURE\0"
+          "GROUP_MISMATCH\0"
+          "I2D_ECPKPARAMETERS_FAILURE\0"
+          "INCOMPATIBLE_OBJECTS\0"
+          "INVALID_COFACTOR\0"
+          "INVALID_COMPRESSED_POINT\0"
+          "INVALID_COMPRESSION_BIT\0"
+          "INVALID_ENCODING\0"
+          "INVALID_FIELD\0"
+          "INVALID_FORM\0"
+          "INVALID_GROUP_ORDER\0"
+          "INVALID_PRIVATE_KEY\0"
+          "MISSING_PRIVATE_KEY\0"
+          "NON_NAMED_CURVE\0"
+          "PKPARAMETERS2GROUP_FAILURE\0"
+          "POINT_AT_INFINITY\0"
+          "POINT_IS_NOT_ON_CURVE\0"
+          "SLOT_FULL\0"
+          "UNDEFINED_GENERATOR\0"
+          "UNKNOWN_GROUP\0"
+          "UNKNOWN_ORDER\0"
+          "WRONG_CURVE_PARAMETERS\0"
+          "WRONG_ORDER\0"
+          "KDF_FAILED\0"
+          "POINT_ARITHMETIC_FAILURE\0"
+          "BAD_SIGNATURE\0"
+          "NOT_IMPLEMENTED\0"
+          "RANDOM_NUMBER_GENERATION_FAILED\0"
+          "OPERATION_NOT_SUPPORTED\0"
+          "COMMAND_NOT_SUPPORTED\0"
+          "DIFFERENT_KEY_TYPES\0"
+          "DIFFERENT_PARAMETERS\0"
+          "EXPECTING_AN_EC_KEY_KEY\0"
+          "EXPECTING_AN_RSA_KEY\0"
+          "EXPECTING_A_DSA_KEY\0"
+          "ILLEGAL_OR_UNSUPPORTED_PADDING_MODE\0"
+          "INVALID_DIGEST_LENGTH\0"
+          "INVALID_DIGEST_TYPE\0"
+          "INVALID_KEYBITS\0"
+          "INVALID_MGF1_MD\0"
+          "INVALID_PADDING_MODE\0"
+          "INVALID_PSS_SALTLEN\0"
+          "KEYS_NOT_SET\0"
+          "NO_DEFAULT_DIGEST\0"
+          "NO_KEY_SET\0"
+          "NO_MDC2_SUPPORT\0"
+          "NO_NID_FOR_CURVE\0"
+          "NO_OPERATION_SET\0"
+          "NO_PARAMETERS_SET\0"
+          "OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE\0"
+          "OPERATON_NOT_INITIALIZED\0"
+          "UNKNOWN_PUBLIC_KEY_TYPE\0"
+          "UNSUPPORTED_ALGORITHM\0"
+          "OUTPUT_TOO_LARGE\0"
+          "UNKNOWN_NID\0"
+          "BAD_BASE64_DECODE\0"
+          "BAD_END_LINE\0"
+          "BAD_IV_CHARS\0"
+          "BAD_PASSWORD_READ\0"
+          "CIPHER_IS_NULL\0"
+          "ERROR_CONVERTING_PRIVATE_KEY\0"
+          "NOT_DEK_INFO\0"
+          "NOT_ENCRYPTED\0"
+          "NOT_PROC_TYPE\0"
+          "NO_START_LINE\0"
+          "READ_KEY\0"
+          "SHORT_HEADER\0"
+          "UNSUPPORTED_CIPHER\0"
+          "UNSUPPORTED_ENCRYPTION\0"
+          "BAD_PKCS12_DATA\0"
+          "BAD_PKCS12_VERSION\0"
+          "CIPHER_HAS_NO_OBJECT_IDENTIFIER\0"
+          "CRYPT_ERROR\0"
+          "ENCRYPT_ERROR\0"
+          "ERROR_SETTING_CIPHER_PARAMS\0"
+          "INCORRECT_PASSWORD\0"
+          "KEYGEN_FAILURE\0"
+          "KEY_GEN_ERROR\0"
+          "METHOD_NOT_SUPPORTED\0"
+          "MISSING_MAC\0"
+          "MULTIPLE_PRIVATE_KEYS_IN_PKCS12\0"
+          "PKCS12_PUBLIC_KEY_INTEGRITY_NOT_SUPPORTED\0"
+          "PKCS12_TOO_DEEPLY_NESTED\0"
+          "PRIVATE_KEY_DECODE_ERROR\0"
+          "PRIVATE_KEY_ENCODE_ERROR\0"
+          "UNKNOWN_ALGORITHM\0"
+          "UNKNOWN_CIPHER\0"
+          "UNKNOWN_CIPHER_ALGORITHM\0"
+          "UNKNOWN_DIGEST\0"
+          "UNKNOWN_HASH\0"
+          "UNSUPPORTED_PRIVATE_KEY_ALGORITHM\0"
+          "BAD_E_VALUE\0"
+          "BAD_FIXED_HEADER_DECRYPT\0"
+          "BAD_PAD_BYTE_COUNT\0"
+          "BAD_RSA_PARAMETERS\0"
+          "BLOCK_TYPE_IS_NOT_01\0"
+          "BN_NOT_INITIALIZED\0"
+          "CANNOT_RECOVER_MULTI_PRIME_KEY\0"
+          "CRT_PARAMS_ALREADY_GIVEN\0"
+          "CRT_VALUES_INCORRECT\0"
+          "DATA_LEN_NOT_EQUAL_TO_MOD_LEN\0"
+          "DATA_TOO_LARGE\0"
+          "DATA_TOO_LARGE_FOR_KEY_SIZE\0"
+          "DATA_TOO_LARGE_FOR_MODULUS\0"
+          "DATA_TOO_SMALL\0"
+          "DATA_TOO_SMALL_FOR_KEY_SIZE\0"
+          "DIGEST_TOO_BIG_FOR_RSA_KEY\0"
+          "D_E_NOT_CONGRUENT_TO_1\0"
+          "EMPTY_PUBLIC_KEY\0"
+          "FIRST_OCTET_INVALID\0"
+          "INCONSISTENT_SET_OF_CRT_VALUES\0"
+          "INTERNAL_ERROR\0"
+          "INVALID_MESSAGE_LENGTH\0"
+          "KEY_SIZE_TOO_SMALL\0"
+          "LAST_OCTET_INVALID\0"
+          "MUST_HAVE_AT_LEAST_TWO_PRIMES\0"
+          "NO_PUBLIC_EXPONENT\0"
+          "NULL_BEFORE_BLOCK_MISSING\0"
+          "N_NOT_EQUAL_P_Q\0"
+          "OAEP_DECODING_ERROR\0"
+          "ONLY_ONE_OF_P_Q_GIVEN\0"
+          "OUTPUT_BUFFER_TOO_SMALL\0"
+          "PADDING_CHECK_FAILED\0"
+          "PKCS_DECODING_ERROR\0"
+          "SLEN_CHECK_FAILED\0"
+          "SLEN_RECOVERY_FAILED\0"
+          "UNKNOWN_ALGORITHM_TYPE\0"
+          "UNKNOWN_PADDING_TYPE\0"
+          "VALUE_MISSING\0"
+          "WRONG_SIGNATURE_LENGTH\0"
+          "APP_DATA_IN_HANDSHAKE\0"
+          "ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT\0"
+          "BAD_ALERT\0"
+          "BAD_CHANGE_CIPHER_SPEC\0"
+          "BAD_DATA_RETURNED_BY_CALLBACK\0"
+          "BAD_DH_P_LENGTH\0"
+          "BAD_DIGEST_LENGTH\0"
+          "BAD_ECC_CERT\0"
+          "BAD_ECPOINT\0"
+          "BAD_HANDSHAKE_RECORD\0"
+          "BAD_HELLO_REQUEST\0"
+          "BAD_LENGTH\0"
+          "BAD_PACKET_LENGTH\0"
+          "BAD_RSA_ENCRYPT\0"
+          "BAD_SRTP_MKI_VALUE\0"
+          "BAD_SRTP_PROTECTION_PROFILE_LIST\0"
+          "BAD_SSL_FILETYPE\0"
+          "BAD_WRITE_RETRY\0"
+          "BIO_NOT_SET\0"
+          "BLOCK_CIPHER_PAD_IS_WRONG\0"
+          "BUFFERED_MESSAGES_ON_CIPHER_CHANGE\0"
+          "CA_DN_LENGTH_MISMATCH\0"
+          "CA_DN_TOO_LONG\0"
+          "CCS_RECEIVED_EARLY\0"
+          "CERTIFICATE_VERIFY_FAILED\0"
+          "CERT_CB_ERROR\0"
+          "CERT_LENGTH_MISMATCH\0"
+          "CHANNEL_ID_NOT_P256\0"
+          "CHANNEL_ID_SIGNATURE_INVALID\0"
+          "CIPHER_OR_HASH_UNAVAILABLE\0"
+          "CLIENTHELLO_PARSE_FAILED\0"
+          "CLIENTHELLO_TLSEXT\0"
+          "CONNECTION_REJECTED\0"
+          "CONNECTION_TYPE_NOT_SET\0"
+          "CUSTOM_EXTENSION_ERROR\0"
+          "DATA_LENGTH_TOO_LONG\0"
+          "DECRYPTION_FAILED\0"
+          "DECRYPTION_FAILED_OR_BAD_RECORD_MAC\0"
+          "DH_PUBLIC_VALUE_LENGTH_IS_WRONG\0"
+          "DH_P_TOO_LONG\0"
+          "DIGEST_CHECK_FAILED\0"
+          "DOWNGRADE_DETECTED\0"
+          "DTLS_MESSAGE_TOO_BIG\0"
+          "DUPLICATE_EXTENSION\0"
+          "DUPLICATE_KEY_SHARE\0"
+          "ECC_CERT_NOT_FOR_SIGNING\0"
+          "EMS_STATE_INCONSISTENT\0"
+          "ENCRYPTED_LENGTH_TOO_LONG\0"
+          "ERROR_ADDING_EXTENSION\0"
+          "ERROR_IN_RECEIVED_CIPHER_LIST\0"
+          "ERROR_PARSING_EXTENSION\0"
+          "EXCESSIVE_MESSAGE_SIZE\0"
+          "EXTRA_DATA_IN_MESSAGE\0"
+          "FRAGMENT_MISMATCH\0"
+          "GOT_NEXT_PROTO_WITHOUT_EXTENSION\0"
+          "HANDSHAKE_FAILURE_ON_CLIENT_HELLO\0"
+          "HTTPS_PROXY_REQUEST\0"
+          "HTTP_REQUEST\0"
+          "INAPPROPRIATE_FALLBACK\0"
+          "INVALID_ALPN_PROTOCOL\0"
+          "INVALID_COMMAND\0"
+          "INVALID_COMPRESSION_LIST\0"
+          "INVALID_MESSAGE\0"
+          "INVALID_OUTER_RECORD_TYPE\0"
+          "INVALID_SSL_SESSION\0"
+          "INVALID_TICKET_KEYS_LENGTH\0"
+          "LENGTH_MISMATCH\0"
+          "LIBRARY_HAS_NO_CIPHERS\0"
+          "MISSING_EXTENSION\0"
+          "MISSING_KEY_SHARE\0"
+          "MISSING_RSA_CERTIFICATE\0"
+          "MISSING_TMP_DH_KEY\0"
+          "MISSING_TMP_ECDH_KEY\0"
+          "MIXED_SPECIAL_OPERATOR_WITH_GROUPS\0"
+          "MTU_TOO_SMALL\0"
+          "NEGOTIATED_BOTH_NPN_AND_ALPN\0"
+          "NESTED_GROUP\0"
+          "NO_CERTIFICATES_RETURNED\0"
+          "NO_CERTIFICATE_ASSIGNED\0"
+          "NO_CERTIFICATE_SET\0"
+          "NO_CIPHERS_AVAILABLE\0"
+          "NO_CIPHERS_PASSED\0"
+          "NO_CIPHERS_SPECIFIED\0"
+          "NO_CIPHER_MATCH\0"
+          "NO_COMMON_SIGNATURE_ALGORITHMS\0"
+          "NO_COMPRESSION_SPECIFIED\0"
+          "NO_GROUPS_SPECIFIED\0"
+          "NO_METHOD_SPECIFIED\0"
+          "NO_P256_SUPPORT\0"
+          "NO_PRIVATE_KEY_ASSIGNED\0"
+          "NO_RENEGOTIATION\0"
+          "NO_REQUIRED_DIGEST\0"
+          "NO_SHARED_CIPHER\0"
+          "NULL_SSL_CTX\0"
+          "NULL_SSL_METHOD_PASSED\0"
+          "OLD_SESSION_CIPHER_NOT_RETURNED\0"
+          "OLD_SESSION_VERSION_NOT_RETURNED\0"
+          "PARSE_TLSEXT\0"
+          "PATH_TOO_LONG\0"
+          "PEER_DID_NOT_RETURN_A_CERTIFICATE\0"
+          "PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE\0"
+          "PROTOCOL_IS_SHUTDOWN\0"
+          "PSK_IDENTITY_NOT_FOUND\0"
+          "PSK_NO_CLIENT_CB\0"
+          "PSK_NO_SERVER_CB\0"
+          "READ_TIMEOUT_EXPIRED\0"
+          "RECORD_LENGTH_MISMATCH\0"
+          "RECORD_TOO_LARGE\0"
+          "RENEGOTIATION_EMS_MISMATCH\0"
+          "RENEGOTIATION_ENCODING_ERR\0"
+          "RENEGOTIATION_MISMATCH\0"
+          "REQUIRED_CIPHER_MISSING\0"
+          "RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION\0"
+          "RESUMED_NON_EMS_SESSION_WITH_EMS_EXTENSION\0"
+          "SCSV_RECEIVED_WHEN_RENEGOTIATING\0"
+          "SERVERHELLO_TLSEXT\0"
+          "SESSION_ID_CONTEXT_UNINITIALIZED\0"
+          "SESSION_MAY_NOT_BE_CREATED\0"
+          "SHUTDOWN_WHILE_IN_INIT\0"
+          "SIGNATURE_ALGORITHMS_EXTENSION_SENT_BY_SERVER\0"
+          "SRTP_COULD_NOT_ALLOCATE_PROFILES\0"
+          "SRTP_UNKNOWN_PROTECTION_PROFILE\0"
+          "SSL3_EXT_INVALID_SERVERNAME\0"
+          "SSLV3_ALERT_BAD_CERTIFICATE\0"
+          "SSLV3_ALERT_BAD_RECORD_MAC\0"
+          "SSLV3_ALERT_CERTIFICATE_EXPIRED\0"
+          "SSLV3_ALERT_CERTIFICATE_REVOKED\0"
+          "SSLV3_ALERT_CERTIFICATE_UNKNOWN\0"
+          "SSLV3_ALERT_CLOSE_NOTIFY\0"
+          "SSLV3_ALERT_DECOMPRESSION_FAILURE\0"
+          "SSLV3_ALERT_HANDSHAKE_FAILURE\0"
+          "SSLV3_ALERT_ILLEGAL_PARAMETER\0"
+          "SSLV3_ALERT_NO_CERTIFICATE\0"
+          "SSLV3_ALERT_UNEXPECTED_MESSAGE\0"
+          "SSLV3_ALERT_UNSUPPORTED_CERTIFICATE\0"
+          "SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION\0"
+          "SSL_HANDSHAKE_FAILURE\0"
+          "SSL_SESSION_ID_CONTEXT_TOO_LONG\0"
+          "TLSV1_ALERT_ACCESS_DENIED\0"
+          "TLSV1_ALERT_DECODE_ERROR\0"
+          "TLSV1_ALERT_DECRYPTION_FAILED\0"
+          "TLSV1_ALERT_DECRYPT_ERROR\0"
+          "TLSV1_ALERT_EXPORT_RESTRICTION\0"
+          "TLSV1_ALERT_INAPPROPRIATE_FALLBACK\0"
+          "TLSV1_ALERT_INSUFFICIENT_SECURITY\0"
+          "TLSV1_ALERT_INTERNAL_ERROR\0"
+          "TLSV1_ALERT_NO_RENEGOTIATION\0"
+          "TLSV1_ALERT_PROTOCOL_VERSION\0"
+          "TLSV1_ALERT_RECORD_OVERFLOW\0"
+          "TLSV1_ALERT_UNKNOWN_CA\0"
+          "TLSV1_ALERT_USER_CANCELLED\0"
+          "TLSV1_BAD_CERTIFICATE_HASH_VALUE\0"
+          "TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE\0"
+          "TLSV1_CERTIFICATE_UNOBTAINABLE\0"
+          "TLSV1_UNRECOGNIZED_NAME\0"
+          "TLSV1_UNSUPPORTED_EXTENSION\0"
+          "TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST\0"
+          "TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG\0"
+          "TOO_MANY_EMPTY_FRAGMENTS\0"
+          "TOO_MANY_KEY_UPDATES\0"
+          "TOO_MANY_WARNING_ALERTS\0"
+          "UNABLE_TO_FIND_ECDH_PARAMETERS\0"
+          "UNEXPECTED_EXTENSION\0"
+          "UNEXPECTED_MESSAGE\0"
+          "UNEXPECTED_OPERATOR_IN_GROUP\0"
+          "UNEXPECTED_RECORD\0"
+          "UNKNOWN_ALERT_TYPE\0"
+          "UNKNOWN_CERTIFICATE_TYPE\0"
+          "UNKNOWN_CIPHER_RETURNED\0"
+          "UNKNOWN_CIPHER_TYPE\0"
+          "UNKNOWN_KEY_EXCHANGE_TYPE\0"
+          "UNKNOWN_PROTOCOL\0"
+          "UNKNOWN_SSL_VERSION\0"
+          "UNKNOWN_STATE\0"
+          "UNSAFE_LEGACY_RENEGOTIATION_DISABLED\0"
+          "UNSUPPORTED_COMPRESSION_ALGORITHM\0"
+          "UNSUPPORTED_ELLIPTIC_CURVE\0"
+          "UNSUPPORTED_PROTOCOL\0"
+          "UNSUPPORTED_PROTOCOL_FOR_CUSTOM_KEY\0"
+          "WRONG_CERTIFICATE_TYPE\0"
+          "WRONG_CIPHER_RETURNED\0"
+          "WRONG_CURVE\0"
+          "WRONG_MESSAGE_TYPE\0"
+          "WRONG_SIGNATURE_TYPE\0"
+          "WRONG_SSL_VERSION\0"
+          "WRONG_VERSION_NUMBER\0"
+          "X509_LIB\0"
+          "X509_VERIFICATION_SETUP_PROBLEMS\0"
+          "AKID_MISMATCH\0"
+          "BAD_PKCS7_VERSION\0"
+          "BAD_X509_FILETYPE\0"
+          "BASE64_DECODE_ERROR\0"
+          "CANT_CHECK_DH_KEY\0"
+          "CERT_ALREADY_IN_HASH_TABLE\0"
+          "CRL_ALREADY_DELTA\0"
+          "CRL_VERIFY_FAILURE\0"
+          "IDP_MISMATCH\0"
+          "INVALID_DIRECTORY\0"
+          "INVALID_FIELD_NAME\0"
+          "INVALID_PSS_PARAMETERS\0"
+          "INVALID_TRUST\0"
+          "ISSUER_MISMATCH\0"
+          "KEY_TYPE_MISMATCH\0"
+          "KEY_VALUES_MISMATCH\0"
+          "LOADING_CERT_DIR\0"
+          "LOADING_DEFAULTS\0"
+          "NAME_TOO_LONG\0"
+          "NEWER_CRL_NOT_NEWER\0"
+          "NOT_PKCS7_SIGNED_DATA\0"
+          "NO_CERTIFICATES_INCLUDED\0"
+          "NO_CERT_SET_FOR_US_TO_VERIFY\0"
+          "NO_CRLS_INCLUDED\0"
+          "NO_CRL_NUMBER\0"
+          "PUBLIC_KEY_DECODE_ERROR\0"
+          "PUBLIC_KEY_ENCODE_ERROR\0"
+          "SHOULD_RETRY\0"
+          "UNKNOWN_KEY_TYPE\0"
+          "UNKNOWN_PURPOSE_ID\0"
+          "UNKNOWN_TRUST_ID\0"
+          "WRONG_LOOKUP_TYPE\0"
+          "BAD_IP_ADDRESS\0"
+          "BAD_OBJECT\0"
+          "BN_DEC2BN_ERROR\0"
+          "BN_TO_ASN1_INTEGER_ERROR\0"
+          "CANNOT_FIND_FREE_FUNCTION\0"
+          "DIRNAME_ERROR\0"
+          "DISTPOINT_ALREADY_SET\0"
+          "DUPLICATE_ZONE_ID\0"
+          "ERROR_CONVERTING_ZONE\0"
+          "ERROR_CREATING_EXTENSION\0"
+          "ERROR_IN_EXTENSION\0"
+          "EXPECTED_A_SECTION_NAME\0"
+          "EXTENSION_EXISTS\0"
+          "EXTENSION_NAME_ERROR\0"
+          "EXTENSION_NOT_FOUND\0"
+          "EXTENSION_SETTING_NOT_SUPPORTED\0"
+          "EXTENSION_VALUE_ERROR\0"
+          "ILLEGAL_EMPTY_EXTENSION\0"
+          "ILLEGAL_HEX_DIGIT\0"
+          "INCORRECT_POLICY_SYNTAX_TAG\0"
+          "INVALID_BOOLEAN_STRING\0"
+          "INVALID_EXTENSION_STRING\0"
+          "INVALID_MULTIPLE_RDNS\0"
+          "INVALID_NAME\0"
+          "INVALID_NULL_ARGUMENT\0"
+          "INVALID_NULL_NAME\0"
+          "INVALID_NULL_VALUE\0"
+          "INVALID_NUMBERS\0"
+          "INVALID_OBJECT_IDENTIFIER\0"
+          "INVALID_OPTION\0"
+          "INVALID_POLICY_IDENTIFIER\0"
+          "INVALID_PROXY_POLICY_SETTING\0"
+          "INVALID_PURPOSE\0"
+          "INVALID_SECTION\0"
+          "INVALID_SYNTAX\0"
+          "ISSUER_DECODE_ERROR\0"
+          "NEED_ORGANIZATION_AND_NUMBERS\0"
+          "NO_CONFIG_DATABASE\0"
+          "NO_ISSUER_CERTIFICATE\0"
+          "NO_ISSUER_DETAILS\0"
+          "NO_POLICY_IDENTIFIER\0"
+          "NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED\0"
+          "NO_PUBLIC_KEY\0"
+          "NO_SUBJECT_DETAILS\0"
+          "ODD_NUMBER_OF_DIGITS\0"
+          "OPERATION_NOT_DEFINED\0"
+          "OTHERNAME_ERROR\0"
+          "POLICY_LANGUAGE_ALREADY_DEFINED\0"
+          "POLICY_PATH_LENGTH\0"
+          "POLICY_PATH_LENGTH_ALREADY_DEFINED\0"
+          "POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY\0"
+          "SECTION_NOT_FOUND\0"
+          "UNABLE_TO_GET_ISSUER_DETAILS\0"
+          "UNABLE_TO_GET_ISSUER_KEYID\0"
+          "UNKNOWN_BIT_STRING_ARGUMENT\0"
+          "UNKNOWN_EXTENSION\0"
+          "UNKNOWN_EXTENSION_NAME\0"
+          "UNKNOWN_OPTION\0"
+          "UNSUPPORTED_OPTION\0"
+          "USER_TOO_LONG\0"
           "";
     EOF
   END_OF_COMMAND
diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m
index 450bec36e08..a57bd8fc2f9 100644
--- a/src/objective-c/GRPCClient/private/GRPCHost.m
+++ b/src/objective-c/GRPCClient/private/GRPCHost.m
@@ -50,7 +50,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 // TODO(jcanizales): Generate the version in a standalone header, from templates. Like
 // templates/src/core/surface/version.c.template .
-#define GRPC_OBJC_VERSION_STRING @"1.0.2"
+#define GRPC_OBJC_VERSION_STRING @"1.1.0-pre1"
 
 static NSMutableDictionary *kHostCache;
 
diff --git a/templates/gRPC-Core.podspec.template b/templates/gRPC-Core.podspec.template
index 1b97d18f163..f15d0efc17d 100644
--- a/templates/gRPC-Core.podspec.template
+++ b/templates/gRPC-Core.podspec.template
@@ -62,7 +62,7 @@
   %>
   Pod::Spec.new do |s|
     s.name     = 'gRPC-Core'
-    version = '1.0.2'
+    version = '1.1.0-pre1'
     s.version  = version
     s.summary  = 'Core cross-platform gRPC library, written in C'
     s.homepage = 'http://www.grpc.io'
@@ -71,9 +71,7 @@
 
     s.source = {
       :git => 'https://github.com/grpc/grpc.git',
-      # TODO(mxyan): Change back to "v#{version}" for next release
-      #:tag => "v#{version}",
-      :tag => "objective-c-v#{version}",
+      :tag => "v#{version}",
       # TODO(jcanizales): Depend explicitly on the nanopb pod, and disable submodules.
       :submodules => true,
     }
@@ -151,7 +149,7 @@
       ss.header_mappings_dir = '.'
       ss.libraries = 'z'
       ss.dependency "#{s.name}/Interface", version
-      ss.dependency 'BoringSSL', '~> 7.0'
+      ss.dependency 'BoringSSL', '~> 8.0'
 
       # To save you from scrolling, this is the last part of the podspec.
       ss.source_files = ${ruby_multiline_list(grpc_private_files(libs), 22)}

From 36031a0c7168d26fc5df4a2feae56b3ef697ab59 Mon Sep 17 00:00:00 2001
From: Muxi Yan <mxyan@google.com>
Date: Wed, 25 Jan 2017 15:56:59 -0800
Subject: [PATCH 06/52] Fix BoringSSL.podspec double slashes

---
 src/objective-c/BoringSSL.podspec | 1158 ++++++++++++++---------------
 1 file changed, 579 insertions(+), 579 deletions(-)

diff --git a/src/objective-c/BoringSSL.podspec b/src/objective-c/BoringSSL.podspec
index d806cd9bf04..908bb0b5e5e 100644
--- a/src/objective-c/BoringSSL.podspec
+++ b/src/objective-c/BoringSSL.podspec
@@ -897,585 +897,585 @@ Pod::Spec.new do |s|
       const size_t kOpenSSLReasonValuesLen = sizeof(kOpenSSLReasonValues) / sizeof(kOpenSSLReasonValues[0]);
 
       const char kOpenSSLReasonStringData[] =
-          "ASN1_LENGTH_MISMATCH\0"
-          "AUX_ERROR\0"
-          "BAD_GET_ASN1_OBJECT_CALL\0"
-          "BAD_OBJECT_HEADER\0"
-          "BMPSTRING_IS_WRONG_LENGTH\0"
-          "BN_LIB\0"
-          "BOOLEAN_IS_WRONG_LENGTH\0"
-          "BUFFER_TOO_SMALL\0"
-          "CONTEXT_NOT_INITIALISED\0"
-          "DECODE_ERROR\0"
-          "DEPTH_EXCEEDED\0"
-          "DIGEST_AND_KEY_TYPE_NOT_SUPPORTED\0"
-          "ENCODE_ERROR\0"
-          "ERROR_GETTING_TIME\0"
-          "EXPECTING_AN_ASN1_SEQUENCE\0"
-          "EXPECTING_AN_INTEGER\0"
-          "EXPECTING_AN_OBJECT\0"
-          "EXPECTING_A_BOOLEAN\0"
-          "EXPECTING_A_TIME\0"
-          "EXPLICIT_LENGTH_MISMATCH\0"
-          "EXPLICIT_TAG_NOT_CONSTRUCTED\0"
-          "FIELD_MISSING\0"
-          "FIRST_NUM_TOO_LARGE\0"
-          "HEADER_TOO_LONG\0"
-          "ILLEGAL_BITSTRING_FORMAT\0"
-          "ILLEGAL_BOOLEAN\0"
-          "ILLEGAL_CHARACTERS\0"
-          "ILLEGAL_FORMAT\0"
-          "ILLEGAL_HEX\0"
-          "ILLEGAL_IMPLICIT_TAG\0"
-          "ILLEGAL_INTEGER\0"
-          "ILLEGAL_NESTED_TAGGING\0"
-          "ILLEGAL_NULL\0"
-          "ILLEGAL_NULL_VALUE\0"
-          "ILLEGAL_OBJECT\0"
-          "ILLEGAL_OPTIONAL_ANY\0"
-          "ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE\0"
-          "ILLEGAL_TAGGED_ANY\0"
-          "ILLEGAL_TIME_VALUE\0"
-          "INTEGER_NOT_ASCII_FORMAT\0"
-          "INTEGER_TOO_LARGE_FOR_LONG\0"
-          "INVALID_BIT_STRING_BITS_LEFT\0"
-          "INVALID_BMPSTRING_LENGTH\0"
-          "INVALID_DIGIT\0"
-          "INVALID_MODIFIER\0"
-          "INVALID_NUMBER\0"
-          "INVALID_OBJECT_ENCODING\0"
-          "INVALID_SEPARATOR\0"
-          "INVALID_TIME_FORMAT\0"
-          "INVALID_UNIVERSALSTRING_LENGTH\0"
-          "INVALID_UTF8STRING\0"
-          "LIST_ERROR\0"
-          "MISSING_ASN1_EOS\0"
-          "MISSING_EOC\0"
-          "MISSING_SECOND_NUMBER\0"
-          "MISSING_VALUE\0"
-          "MSTRING_NOT_UNIVERSAL\0"
-          "MSTRING_WRONG_TAG\0"
-          "NESTED_ASN1_ERROR\0"
-          "NESTED_ASN1_STRING\0"
-          "NON_HEX_CHARACTERS\0"
-          "NOT_ASCII_FORMAT\0"
-          "NOT_ENOUGH_DATA\0"
-          "NO_MATCHING_CHOICE_TYPE\0"
-          "NULL_IS_WRONG_LENGTH\0"
-          "OBJECT_NOT_ASCII_FORMAT\0"
-          "ODD_NUMBER_OF_CHARS\0"
-          "SECOND_NUMBER_TOO_LARGE\0"
-          "SEQUENCE_LENGTH_MISMATCH\0"
-          "SEQUENCE_NOT_CONSTRUCTED\0"
-          "SEQUENCE_OR_SET_NEEDS_CONFIG\0"
-          "SHORT_LINE\0"
-          "STREAMING_NOT_SUPPORTED\0"
-          "STRING_TOO_LONG\0"
-          "STRING_TOO_SHORT\0"
-          "TAG_VALUE_TOO_HIGH\0"
-          "TIME_NOT_ASCII_FORMAT\0"
-          "TOO_LONG\0"
-          "TYPE_NOT_CONSTRUCTED\0"
-          "TYPE_NOT_PRIMITIVE\0"
-          "UNEXPECTED_EOC\0"
-          "UNIVERSALSTRING_IS_WRONG_LENGTH\0"
-          "UNKNOWN_FORMAT\0"
-          "UNKNOWN_MESSAGE_DIGEST_ALGORITHM\0"
-          "UNKNOWN_SIGNATURE_ALGORITHM\0"
-          "UNKNOWN_TAG\0"
-          "UNSUPPORTED_ANY_DEFINED_BY_TYPE\0"
-          "UNSUPPORTED_PUBLIC_KEY_TYPE\0"
-          "UNSUPPORTED_TYPE\0"
-          "WRONG_PUBLIC_KEY_TYPE\0"
-          "WRONG_TAG\0"
-          "WRONG_TYPE\0"
-          "BAD_FOPEN_MODE\0"
-          "BROKEN_PIPE\0"
-          "CONNECT_ERROR\0"
-          "ERROR_SETTING_NBIO\0"
-          "INVALID_ARGUMENT\0"
-          "IN_USE\0"
-          "KEEPALIVE\0"
-          "NBIO_CONNECT_ERROR\0"
-          "NO_HOSTNAME_SPECIFIED\0"
-          "NO_PORT_SPECIFIED\0"
-          "NO_SUCH_FILE\0"
-          "NULL_PARAMETER\0"
-          "SYS_LIB\0"
-          "UNABLE_TO_CREATE_SOCKET\0"
-          "UNINITIALIZED\0"
-          "UNSUPPORTED_METHOD\0"
-          "WRITE_TO_READ_ONLY_BIO\0"
-          "ARG2_LT_ARG3\0"
-          "BAD_ENCODING\0"
-          "BAD_RECIPROCAL\0"
-          "BIGNUM_TOO_LONG\0"
-          "BITS_TOO_SMALL\0"
-          "CALLED_WITH_EVEN_MODULUS\0"
-          "DIV_BY_ZERO\0"
-          "EXPAND_ON_STATIC_BIGNUM_DATA\0"
-          "INPUT_NOT_REDUCED\0"
-          "INVALID_RANGE\0"
-          "NEGATIVE_NUMBER\0"
-          "NOT_A_SQUARE\0"
-          "NOT_INITIALIZED\0"
-          "NO_INVERSE\0"
-          "PRIVATE_KEY_TOO_LARGE\0"
-          "P_IS_NOT_PRIME\0"
-          "TOO_MANY_ITERATIONS\0"
-          "TOO_MANY_TEMPORARY_VARIABLES\0"
-          "AES_KEY_SETUP_FAILED\0"
-          "BAD_DECRYPT\0"
-          "BAD_KEY_LENGTH\0"
-          "CTRL_NOT_IMPLEMENTED\0"
-          "CTRL_OPERATION_NOT_IMPLEMENTED\0"
-          "DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH\0"
-          "INITIALIZATION_ERROR\0"
-          "INPUT_NOT_INITIALIZED\0"
-          "INVALID_AD_SIZE\0"
-          "INVALID_KEY_LENGTH\0"
-          "INVALID_NONCE_SIZE\0"
-          "INVALID_OPERATION\0"
-          "IV_TOO_LARGE\0"
-          "NO_CIPHER_SET\0"
-          "NO_DIRECTION_SET\0"
-          "OUTPUT_ALIASES_INPUT\0"
-          "TAG_TOO_LARGE\0"
-          "TOO_LARGE\0"
-          "UNSUPPORTED_AD_SIZE\0"
-          "UNSUPPORTED_INPUT_SIZE\0"
-          "UNSUPPORTED_KEY_SIZE\0"
-          "UNSUPPORTED_NONCE_SIZE\0"
-          "UNSUPPORTED_TAG_SIZE\0"
-          "WRONG_FINAL_BLOCK_LENGTH\0"
-          "LIST_CANNOT_BE_NULL\0"
-          "MISSING_CLOSE_SQUARE_BRACKET\0"
-          "MISSING_EQUAL_SIGN\0"
-          "NO_CLOSE_BRACE\0"
-          "UNABLE_TO_CREATE_NEW_SECTION\0"
-          "VARIABLE_HAS_NO_VALUE\0"
-          "BAD_GENERATOR\0"
-          "INVALID_PUBKEY\0"
-          "MODULUS_TOO_LARGE\0"
-          "NO_PRIVATE_VALUE\0"
-          "BAD_Q_VALUE\0"
-          "BAD_VERSION\0"
-          "MISSING_PARAMETERS\0"
-          "NEED_NEW_SETUP_VALUES\0"
-          "BIGNUM_OUT_OF_RANGE\0"
-          "COORDINATES_OUT_OF_RANGE\0"
-          "D2I_ECPKPARAMETERS_FAILURE\0"
-          "EC_GROUP_NEW_BY_NAME_FAILURE\0"
-          "GROUP2PKPARAMETERS_FAILURE\0"
-          "GROUP_MISMATCH\0"
-          "I2D_ECPKPARAMETERS_FAILURE\0"
-          "INCOMPATIBLE_OBJECTS\0"
-          "INVALID_COFACTOR\0"
-          "INVALID_COMPRESSED_POINT\0"
-          "INVALID_COMPRESSION_BIT\0"
-          "INVALID_ENCODING\0"
-          "INVALID_FIELD\0"
-          "INVALID_FORM\0"
-          "INVALID_GROUP_ORDER\0"
-          "INVALID_PRIVATE_KEY\0"
-          "MISSING_PRIVATE_KEY\0"
-          "NON_NAMED_CURVE\0"
-          "PKPARAMETERS2GROUP_FAILURE\0"
-          "POINT_AT_INFINITY\0"
-          "POINT_IS_NOT_ON_CURVE\0"
-          "SLOT_FULL\0"
-          "UNDEFINED_GENERATOR\0"
-          "UNKNOWN_GROUP\0"
-          "UNKNOWN_ORDER\0"
-          "WRONG_CURVE_PARAMETERS\0"
-          "WRONG_ORDER\0"
-          "KDF_FAILED\0"
-          "POINT_ARITHMETIC_FAILURE\0"
-          "BAD_SIGNATURE\0"
-          "NOT_IMPLEMENTED\0"
-          "RANDOM_NUMBER_GENERATION_FAILED\0"
-          "OPERATION_NOT_SUPPORTED\0"
-          "COMMAND_NOT_SUPPORTED\0"
-          "DIFFERENT_KEY_TYPES\0"
-          "DIFFERENT_PARAMETERS\0"
-          "EXPECTING_AN_EC_KEY_KEY\0"
-          "EXPECTING_AN_RSA_KEY\0"
-          "EXPECTING_A_DSA_KEY\0"
-          "ILLEGAL_OR_UNSUPPORTED_PADDING_MODE\0"
-          "INVALID_DIGEST_LENGTH\0"
-          "INVALID_DIGEST_TYPE\0"
-          "INVALID_KEYBITS\0"
-          "INVALID_MGF1_MD\0"
-          "INVALID_PADDING_MODE\0"
-          "INVALID_PSS_SALTLEN\0"
-          "KEYS_NOT_SET\0"
-          "NO_DEFAULT_DIGEST\0"
-          "NO_KEY_SET\0"
-          "NO_MDC2_SUPPORT\0"
-          "NO_NID_FOR_CURVE\0"
-          "NO_OPERATION_SET\0"
-          "NO_PARAMETERS_SET\0"
-          "OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE\0"
-          "OPERATON_NOT_INITIALIZED\0"
-          "UNKNOWN_PUBLIC_KEY_TYPE\0"
-          "UNSUPPORTED_ALGORITHM\0"
-          "OUTPUT_TOO_LARGE\0"
-          "UNKNOWN_NID\0"
-          "BAD_BASE64_DECODE\0"
-          "BAD_END_LINE\0"
-          "BAD_IV_CHARS\0"
-          "BAD_PASSWORD_READ\0"
-          "CIPHER_IS_NULL\0"
-          "ERROR_CONVERTING_PRIVATE_KEY\0"
-          "NOT_DEK_INFO\0"
-          "NOT_ENCRYPTED\0"
-          "NOT_PROC_TYPE\0"
-          "NO_START_LINE\0"
-          "READ_KEY\0"
-          "SHORT_HEADER\0"
-          "UNSUPPORTED_CIPHER\0"
-          "UNSUPPORTED_ENCRYPTION\0"
-          "BAD_PKCS12_DATA\0"
-          "BAD_PKCS12_VERSION\0"
-          "CIPHER_HAS_NO_OBJECT_IDENTIFIER\0"
-          "CRYPT_ERROR\0"
-          "ENCRYPT_ERROR\0"
-          "ERROR_SETTING_CIPHER_PARAMS\0"
-          "INCORRECT_PASSWORD\0"
-          "KEYGEN_FAILURE\0"
-          "KEY_GEN_ERROR\0"
-          "METHOD_NOT_SUPPORTED\0"
-          "MISSING_MAC\0"
-          "MULTIPLE_PRIVATE_KEYS_IN_PKCS12\0"
-          "PKCS12_PUBLIC_KEY_INTEGRITY_NOT_SUPPORTED\0"
-          "PKCS12_TOO_DEEPLY_NESTED\0"
-          "PRIVATE_KEY_DECODE_ERROR\0"
-          "PRIVATE_KEY_ENCODE_ERROR\0"
-          "UNKNOWN_ALGORITHM\0"
-          "UNKNOWN_CIPHER\0"
-          "UNKNOWN_CIPHER_ALGORITHM\0"
-          "UNKNOWN_DIGEST\0"
-          "UNKNOWN_HASH\0"
-          "UNSUPPORTED_PRIVATE_KEY_ALGORITHM\0"
-          "BAD_E_VALUE\0"
-          "BAD_FIXED_HEADER_DECRYPT\0"
-          "BAD_PAD_BYTE_COUNT\0"
-          "BAD_RSA_PARAMETERS\0"
-          "BLOCK_TYPE_IS_NOT_01\0"
-          "BN_NOT_INITIALIZED\0"
-          "CANNOT_RECOVER_MULTI_PRIME_KEY\0"
-          "CRT_PARAMS_ALREADY_GIVEN\0"
-          "CRT_VALUES_INCORRECT\0"
-          "DATA_LEN_NOT_EQUAL_TO_MOD_LEN\0"
-          "DATA_TOO_LARGE\0"
-          "DATA_TOO_LARGE_FOR_KEY_SIZE\0"
-          "DATA_TOO_LARGE_FOR_MODULUS\0"
-          "DATA_TOO_SMALL\0"
-          "DATA_TOO_SMALL_FOR_KEY_SIZE\0"
-          "DIGEST_TOO_BIG_FOR_RSA_KEY\0"
-          "D_E_NOT_CONGRUENT_TO_1\0"
-          "EMPTY_PUBLIC_KEY\0"
-          "FIRST_OCTET_INVALID\0"
-          "INCONSISTENT_SET_OF_CRT_VALUES\0"
-          "INTERNAL_ERROR\0"
-          "INVALID_MESSAGE_LENGTH\0"
-          "KEY_SIZE_TOO_SMALL\0"
-          "LAST_OCTET_INVALID\0"
-          "MUST_HAVE_AT_LEAST_TWO_PRIMES\0"
-          "NO_PUBLIC_EXPONENT\0"
-          "NULL_BEFORE_BLOCK_MISSING\0"
-          "N_NOT_EQUAL_P_Q\0"
-          "OAEP_DECODING_ERROR\0"
-          "ONLY_ONE_OF_P_Q_GIVEN\0"
-          "OUTPUT_BUFFER_TOO_SMALL\0"
-          "PADDING_CHECK_FAILED\0"
-          "PKCS_DECODING_ERROR\0"
-          "SLEN_CHECK_FAILED\0"
-          "SLEN_RECOVERY_FAILED\0"
-          "UNKNOWN_ALGORITHM_TYPE\0"
-          "UNKNOWN_PADDING_TYPE\0"
-          "VALUE_MISSING\0"
-          "WRONG_SIGNATURE_LENGTH\0"
-          "APP_DATA_IN_HANDSHAKE\0"
-          "ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT\0"
-          "BAD_ALERT\0"
-          "BAD_CHANGE_CIPHER_SPEC\0"
-          "BAD_DATA_RETURNED_BY_CALLBACK\0"
-          "BAD_DH_P_LENGTH\0"
-          "BAD_DIGEST_LENGTH\0"
-          "BAD_ECC_CERT\0"
-          "BAD_ECPOINT\0"
-          "BAD_HANDSHAKE_RECORD\0"
-          "BAD_HELLO_REQUEST\0"
-          "BAD_LENGTH\0"
-          "BAD_PACKET_LENGTH\0"
-          "BAD_RSA_ENCRYPT\0"
-          "BAD_SRTP_MKI_VALUE\0"
-          "BAD_SRTP_PROTECTION_PROFILE_LIST\0"
-          "BAD_SSL_FILETYPE\0"
-          "BAD_WRITE_RETRY\0"
-          "BIO_NOT_SET\0"
-          "BLOCK_CIPHER_PAD_IS_WRONG\0"
-          "BUFFERED_MESSAGES_ON_CIPHER_CHANGE\0"
-          "CA_DN_LENGTH_MISMATCH\0"
-          "CA_DN_TOO_LONG\0"
-          "CCS_RECEIVED_EARLY\0"
-          "CERTIFICATE_VERIFY_FAILED\0"
-          "CERT_CB_ERROR\0"
-          "CERT_LENGTH_MISMATCH\0"
-          "CHANNEL_ID_NOT_P256\0"
-          "CHANNEL_ID_SIGNATURE_INVALID\0"
-          "CIPHER_OR_HASH_UNAVAILABLE\0"
-          "CLIENTHELLO_PARSE_FAILED\0"
-          "CLIENTHELLO_TLSEXT\0"
-          "CONNECTION_REJECTED\0"
-          "CONNECTION_TYPE_NOT_SET\0"
-          "CUSTOM_EXTENSION_ERROR\0"
-          "DATA_LENGTH_TOO_LONG\0"
-          "DECRYPTION_FAILED\0"
-          "DECRYPTION_FAILED_OR_BAD_RECORD_MAC\0"
-          "DH_PUBLIC_VALUE_LENGTH_IS_WRONG\0"
-          "DH_P_TOO_LONG\0"
-          "DIGEST_CHECK_FAILED\0"
-          "DOWNGRADE_DETECTED\0"
-          "DTLS_MESSAGE_TOO_BIG\0"
-          "DUPLICATE_EXTENSION\0"
-          "DUPLICATE_KEY_SHARE\0"
-          "ECC_CERT_NOT_FOR_SIGNING\0"
-          "EMS_STATE_INCONSISTENT\0"
-          "ENCRYPTED_LENGTH_TOO_LONG\0"
-          "ERROR_ADDING_EXTENSION\0"
-          "ERROR_IN_RECEIVED_CIPHER_LIST\0"
-          "ERROR_PARSING_EXTENSION\0"
-          "EXCESSIVE_MESSAGE_SIZE\0"
-          "EXTRA_DATA_IN_MESSAGE\0"
-          "FRAGMENT_MISMATCH\0"
-          "GOT_NEXT_PROTO_WITHOUT_EXTENSION\0"
-          "HANDSHAKE_FAILURE_ON_CLIENT_HELLO\0"
-          "HTTPS_PROXY_REQUEST\0"
-          "HTTP_REQUEST\0"
-          "INAPPROPRIATE_FALLBACK\0"
-          "INVALID_ALPN_PROTOCOL\0"
-          "INVALID_COMMAND\0"
-          "INVALID_COMPRESSION_LIST\0"
-          "INVALID_MESSAGE\0"
-          "INVALID_OUTER_RECORD_TYPE\0"
-          "INVALID_SSL_SESSION\0"
-          "INVALID_TICKET_KEYS_LENGTH\0"
-          "LENGTH_MISMATCH\0"
-          "LIBRARY_HAS_NO_CIPHERS\0"
-          "MISSING_EXTENSION\0"
-          "MISSING_KEY_SHARE\0"
-          "MISSING_RSA_CERTIFICATE\0"
-          "MISSING_TMP_DH_KEY\0"
-          "MISSING_TMP_ECDH_KEY\0"
-          "MIXED_SPECIAL_OPERATOR_WITH_GROUPS\0"
-          "MTU_TOO_SMALL\0"
-          "NEGOTIATED_BOTH_NPN_AND_ALPN\0"
-          "NESTED_GROUP\0"
-          "NO_CERTIFICATES_RETURNED\0"
-          "NO_CERTIFICATE_ASSIGNED\0"
-          "NO_CERTIFICATE_SET\0"
-          "NO_CIPHERS_AVAILABLE\0"
-          "NO_CIPHERS_PASSED\0"
-          "NO_CIPHERS_SPECIFIED\0"
-          "NO_CIPHER_MATCH\0"
-          "NO_COMMON_SIGNATURE_ALGORITHMS\0"
-          "NO_COMPRESSION_SPECIFIED\0"
-          "NO_GROUPS_SPECIFIED\0"
-          "NO_METHOD_SPECIFIED\0"
-          "NO_P256_SUPPORT\0"
-          "NO_PRIVATE_KEY_ASSIGNED\0"
-          "NO_RENEGOTIATION\0"
-          "NO_REQUIRED_DIGEST\0"
-          "NO_SHARED_CIPHER\0"
-          "NULL_SSL_CTX\0"
-          "NULL_SSL_METHOD_PASSED\0"
-          "OLD_SESSION_CIPHER_NOT_RETURNED\0"
-          "OLD_SESSION_VERSION_NOT_RETURNED\0"
-          "PARSE_TLSEXT\0"
-          "PATH_TOO_LONG\0"
-          "PEER_DID_NOT_RETURN_A_CERTIFICATE\0"
-          "PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE\0"
-          "PROTOCOL_IS_SHUTDOWN\0"
-          "PSK_IDENTITY_NOT_FOUND\0"
-          "PSK_NO_CLIENT_CB\0"
-          "PSK_NO_SERVER_CB\0"
-          "READ_TIMEOUT_EXPIRED\0"
-          "RECORD_LENGTH_MISMATCH\0"
-          "RECORD_TOO_LARGE\0"
-          "RENEGOTIATION_EMS_MISMATCH\0"
-          "RENEGOTIATION_ENCODING_ERR\0"
-          "RENEGOTIATION_MISMATCH\0"
-          "REQUIRED_CIPHER_MISSING\0"
-          "RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION\0"
-          "RESUMED_NON_EMS_SESSION_WITH_EMS_EXTENSION\0"
-          "SCSV_RECEIVED_WHEN_RENEGOTIATING\0"
-          "SERVERHELLO_TLSEXT\0"
-          "SESSION_ID_CONTEXT_UNINITIALIZED\0"
-          "SESSION_MAY_NOT_BE_CREATED\0"
-          "SHUTDOWN_WHILE_IN_INIT\0"
-          "SIGNATURE_ALGORITHMS_EXTENSION_SENT_BY_SERVER\0"
-          "SRTP_COULD_NOT_ALLOCATE_PROFILES\0"
-          "SRTP_UNKNOWN_PROTECTION_PROFILE\0"
-          "SSL3_EXT_INVALID_SERVERNAME\0"
-          "SSLV3_ALERT_BAD_CERTIFICATE\0"
-          "SSLV3_ALERT_BAD_RECORD_MAC\0"
-          "SSLV3_ALERT_CERTIFICATE_EXPIRED\0"
-          "SSLV3_ALERT_CERTIFICATE_REVOKED\0"
-          "SSLV3_ALERT_CERTIFICATE_UNKNOWN\0"
-          "SSLV3_ALERT_CLOSE_NOTIFY\0"
-          "SSLV3_ALERT_DECOMPRESSION_FAILURE\0"
-          "SSLV3_ALERT_HANDSHAKE_FAILURE\0"
-          "SSLV3_ALERT_ILLEGAL_PARAMETER\0"
-          "SSLV3_ALERT_NO_CERTIFICATE\0"
-          "SSLV3_ALERT_UNEXPECTED_MESSAGE\0"
-          "SSLV3_ALERT_UNSUPPORTED_CERTIFICATE\0"
-          "SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION\0"
-          "SSL_HANDSHAKE_FAILURE\0"
-          "SSL_SESSION_ID_CONTEXT_TOO_LONG\0"
-          "TLSV1_ALERT_ACCESS_DENIED\0"
-          "TLSV1_ALERT_DECODE_ERROR\0"
-          "TLSV1_ALERT_DECRYPTION_FAILED\0"
-          "TLSV1_ALERT_DECRYPT_ERROR\0"
-          "TLSV1_ALERT_EXPORT_RESTRICTION\0"
-          "TLSV1_ALERT_INAPPROPRIATE_FALLBACK\0"
-          "TLSV1_ALERT_INSUFFICIENT_SECURITY\0"
-          "TLSV1_ALERT_INTERNAL_ERROR\0"
-          "TLSV1_ALERT_NO_RENEGOTIATION\0"
-          "TLSV1_ALERT_PROTOCOL_VERSION\0"
-          "TLSV1_ALERT_RECORD_OVERFLOW\0"
-          "TLSV1_ALERT_UNKNOWN_CA\0"
-          "TLSV1_ALERT_USER_CANCELLED\0"
-          "TLSV1_BAD_CERTIFICATE_HASH_VALUE\0"
-          "TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE\0"
-          "TLSV1_CERTIFICATE_UNOBTAINABLE\0"
-          "TLSV1_UNRECOGNIZED_NAME\0"
-          "TLSV1_UNSUPPORTED_EXTENSION\0"
-          "TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST\0"
-          "TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG\0"
-          "TOO_MANY_EMPTY_FRAGMENTS\0"
-          "TOO_MANY_KEY_UPDATES\0"
-          "TOO_MANY_WARNING_ALERTS\0"
-          "UNABLE_TO_FIND_ECDH_PARAMETERS\0"
-          "UNEXPECTED_EXTENSION\0"
-          "UNEXPECTED_MESSAGE\0"
-          "UNEXPECTED_OPERATOR_IN_GROUP\0"
-          "UNEXPECTED_RECORD\0"
-          "UNKNOWN_ALERT_TYPE\0"
-          "UNKNOWN_CERTIFICATE_TYPE\0"
-          "UNKNOWN_CIPHER_RETURNED\0"
-          "UNKNOWN_CIPHER_TYPE\0"
-          "UNKNOWN_KEY_EXCHANGE_TYPE\0"
-          "UNKNOWN_PROTOCOL\0"
-          "UNKNOWN_SSL_VERSION\0"
-          "UNKNOWN_STATE\0"
-          "UNSAFE_LEGACY_RENEGOTIATION_DISABLED\0"
-          "UNSUPPORTED_COMPRESSION_ALGORITHM\0"
-          "UNSUPPORTED_ELLIPTIC_CURVE\0"
-          "UNSUPPORTED_PROTOCOL\0"
-          "UNSUPPORTED_PROTOCOL_FOR_CUSTOM_KEY\0"
-          "WRONG_CERTIFICATE_TYPE\0"
-          "WRONG_CIPHER_RETURNED\0"
-          "WRONG_CURVE\0"
-          "WRONG_MESSAGE_TYPE\0"
-          "WRONG_SIGNATURE_TYPE\0"
-          "WRONG_SSL_VERSION\0"
-          "WRONG_VERSION_NUMBER\0"
-          "X509_LIB\0"
-          "X509_VERIFICATION_SETUP_PROBLEMS\0"
-          "AKID_MISMATCH\0"
-          "BAD_PKCS7_VERSION\0"
-          "BAD_X509_FILETYPE\0"
-          "BASE64_DECODE_ERROR\0"
-          "CANT_CHECK_DH_KEY\0"
-          "CERT_ALREADY_IN_HASH_TABLE\0"
-          "CRL_ALREADY_DELTA\0"
-          "CRL_VERIFY_FAILURE\0"
-          "IDP_MISMATCH\0"
-          "INVALID_DIRECTORY\0"
-          "INVALID_FIELD_NAME\0"
-          "INVALID_PSS_PARAMETERS\0"
-          "INVALID_TRUST\0"
-          "ISSUER_MISMATCH\0"
-          "KEY_TYPE_MISMATCH\0"
-          "KEY_VALUES_MISMATCH\0"
-          "LOADING_CERT_DIR\0"
-          "LOADING_DEFAULTS\0"
-          "NAME_TOO_LONG\0"
-          "NEWER_CRL_NOT_NEWER\0"
-          "NOT_PKCS7_SIGNED_DATA\0"
-          "NO_CERTIFICATES_INCLUDED\0"
-          "NO_CERT_SET_FOR_US_TO_VERIFY\0"
-          "NO_CRLS_INCLUDED\0"
-          "NO_CRL_NUMBER\0"
-          "PUBLIC_KEY_DECODE_ERROR\0"
-          "PUBLIC_KEY_ENCODE_ERROR\0"
-          "SHOULD_RETRY\0"
-          "UNKNOWN_KEY_TYPE\0"
-          "UNKNOWN_PURPOSE_ID\0"
-          "UNKNOWN_TRUST_ID\0"
-          "WRONG_LOOKUP_TYPE\0"
-          "BAD_IP_ADDRESS\0"
-          "BAD_OBJECT\0"
-          "BN_DEC2BN_ERROR\0"
-          "BN_TO_ASN1_INTEGER_ERROR\0"
-          "CANNOT_FIND_FREE_FUNCTION\0"
-          "DIRNAME_ERROR\0"
-          "DISTPOINT_ALREADY_SET\0"
-          "DUPLICATE_ZONE_ID\0"
-          "ERROR_CONVERTING_ZONE\0"
-          "ERROR_CREATING_EXTENSION\0"
-          "ERROR_IN_EXTENSION\0"
-          "EXPECTED_A_SECTION_NAME\0"
-          "EXTENSION_EXISTS\0"
-          "EXTENSION_NAME_ERROR\0"
-          "EXTENSION_NOT_FOUND\0"
-          "EXTENSION_SETTING_NOT_SUPPORTED\0"
-          "EXTENSION_VALUE_ERROR\0"
-          "ILLEGAL_EMPTY_EXTENSION\0"
-          "ILLEGAL_HEX_DIGIT\0"
-          "INCORRECT_POLICY_SYNTAX_TAG\0"
-          "INVALID_BOOLEAN_STRING\0"
-          "INVALID_EXTENSION_STRING\0"
-          "INVALID_MULTIPLE_RDNS\0"
-          "INVALID_NAME\0"
-          "INVALID_NULL_ARGUMENT\0"
-          "INVALID_NULL_NAME\0"
-          "INVALID_NULL_VALUE\0"
-          "INVALID_NUMBERS\0"
-          "INVALID_OBJECT_IDENTIFIER\0"
-          "INVALID_OPTION\0"
-          "INVALID_POLICY_IDENTIFIER\0"
-          "INVALID_PROXY_POLICY_SETTING\0"
-          "INVALID_PURPOSE\0"
-          "INVALID_SECTION\0"
-          "INVALID_SYNTAX\0"
-          "ISSUER_DECODE_ERROR\0"
-          "NEED_ORGANIZATION_AND_NUMBERS\0"
-          "NO_CONFIG_DATABASE\0"
-          "NO_ISSUER_CERTIFICATE\0"
-          "NO_ISSUER_DETAILS\0"
-          "NO_POLICY_IDENTIFIER\0"
-          "NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED\0"
-          "NO_PUBLIC_KEY\0"
-          "NO_SUBJECT_DETAILS\0"
-          "ODD_NUMBER_OF_DIGITS\0"
-          "OPERATION_NOT_DEFINED\0"
-          "OTHERNAME_ERROR\0"
-          "POLICY_LANGUAGE_ALREADY_DEFINED\0"
-          "POLICY_PATH_LENGTH\0"
-          "POLICY_PATH_LENGTH_ALREADY_DEFINED\0"
-          "POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY\0"
-          "SECTION_NOT_FOUND\0"
-          "UNABLE_TO_GET_ISSUER_DETAILS\0"
-          "UNABLE_TO_GET_ISSUER_KEYID\0"
-          "UNKNOWN_BIT_STRING_ARGUMENT\0"
-          "UNKNOWN_EXTENSION\0"
-          "UNKNOWN_EXTENSION_NAME\0"
-          "UNKNOWN_OPTION\0"
-          "UNSUPPORTED_OPTION\0"
-          "USER_TOO_LONG\0"
+          "ASN1_LENGTH_MISMATCH\\0"
+          "AUX_ERROR\\0"
+          "BAD_GET_ASN1_OBJECT_CALL\\0"
+          "BAD_OBJECT_HEADER\\0"
+          "BMPSTRING_IS_WRONG_LENGTH\\0"
+          "BN_LIB\\0"
+          "BOOLEAN_IS_WRONG_LENGTH\\0"
+          "BUFFER_TOO_SMALL\\0"
+          "CONTEXT_NOT_INITIALISED\\0"
+          "DECODE_ERROR\\0"
+          "DEPTH_EXCEEDED\\0"
+          "DIGEST_AND_KEY_TYPE_NOT_SUPPORTED\\0"
+          "ENCODE_ERROR\\0"
+          "ERROR_GETTING_TIME\\0"
+          "EXPECTING_AN_ASN1_SEQUENCE\\0"
+          "EXPECTING_AN_INTEGER\\0"
+          "EXPECTING_AN_OBJECT\\0"
+          "EXPECTING_A_BOOLEAN\\0"
+          "EXPECTING_A_TIME\\0"
+          "EXPLICIT_LENGTH_MISMATCH\\0"
+          "EXPLICIT_TAG_NOT_CONSTRUCTED\\0"
+          "FIELD_MISSING\\0"
+          "FIRST_NUM_TOO_LARGE\\0"
+          "HEADER_TOO_LONG\\0"
+          "ILLEGAL_BITSTRING_FORMAT\\0"
+          "ILLEGAL_BOOLEAN\\0"
+          "ILLEGAL_CHARACTERS\\0"
+          "ILLEGAL_FORMAT\\0"
+          "ILLEGAL_HEX\\0"
+          "ILLEGAL_IMPLICIT_TAG\\0"
+          "ILLEGAL_INTEGER\\0"
+          "ILLEGAL_NESTED_TAGGING\\0"
+          "ILLEGAL_NULL\\0"
+          "ILLEGAL_NULL_VALUE\\0"
+          "ILLEGAL_OBJECT\\0"
+          "ILLEGAL_OPTIONAL_ANY\\0"
+          "ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE\\0"
+          "ILLEGAL_TAGGED_ANY\\0"
+          "ILLEGAL_TIME_VALUE\\0"
+          "INTEGER_NOT_ASCII_FORMAT\\0"
+          "INTEGER_TOO_LARGE_FOR_LONG\\0"
+          "INVALID_BIT_STRING_BITS_LEFT\\0"
+          "INVALID_BMPSTRING_LENGTH\\0"
+          "INVALID_DIGIT\\0"
+          "INVALID_MODIFIER\\0"
+          "INVALID_NUMBER\\0"
+          "INVALID_OBJECT_ENCODING\\0"
+          "INVALID_SEPARATOR\\0"
+          "INVALID_TIME_FORMAT\\0"
+          "INVALID_UNIVERSALSTRING_LENGTH\\0"
+          "INVALID_UTF8STRING\\0"
+          "LIST_ERROR\\0"
+          "MISSING_ASN1_EOS\\0"
+          "MISSING_EOC\\0"
+          "MISSING_SECOND_NUMBER\\0"
+          "MISSING_VALUE\\0"
+          "MSTRING_NOT_UNIVERSAL\\0"
+          "MSTRING_WRONG_TAG\\0"
+          "NESTED_ASN1_ERROR\\0"
+          "NESTED_ASN1_STRING\\0"
+          "NON_HEX_CHARACTERS\\0"
+          "NOT_ASCII_FORMAT\\0"
+          "NOT_ENOUGH_DATA\\0"
+          "NO_MATCHING_CHOICE_TYPE\\0"
+          "NULL_IS_WRONG_LENGTH\\0"
+          "OBJECT_NOT_ASCII_FORMAT\\0"
+          "ODD_NUMBER_OF_CHARS\\0"
+          "SECOND_NUMBER_TOO_LARGE\\0"
+          "SEQUENCE_LENGTH_MISMATCH\\0"
+          "SEQUENCE_NOT_CONSTRUCTED\\0"
+          "SEQUENCE_OR_SET_NEEDS_CONFIG\\0"
+          "SHORT_LINE\\0"
+          "STREAMING_NOT_SUPPORTED\\0"
+          "STRING_TOO_LONG\\0"
+          "STRING_TOO_SHORT\\0"
+          "TAG_VALUE_TOO_HIGH\\0"
+          "TIME_NOT_ASCII_FORMAT\\0"
+          "TOO_LONG\\0"
+          "TYPE_NOT_CONSTRUCTED\\0"
+          "TYPE_NOT_PRIMITIVE\\0"
+          "UNEXPECTED_EOC\\0"
+          "UNIVERSALSTRING_IS_WRONG_LENGTH\\0"
+          "UNKNOWN_FORMAT\\0"
+          "UNKNOWN_MESSAGE_DIGEST_ALGORITHM\\0"
+          "UNKNOWN_SIGNATURE_ALGORITHM\\0"
+          "UNKNOWN_TAG\\0"
+          "UNSUPPORTED_ANY_DEFINED_BY_TYPE\\0"
+          "UNSUPPORTED_PUBLIC_KEY_TYPE\\0"
+          "UNSUPPORTED_TYPE\\0"
+          "WRONG_PUBLIC_KEY_TYPE\\0"
+          "WRONG_TAG\\0"
+          "WRONG_TYPE\\0"
+          "BAD_FOPEN_MODE\\0"
+          "BROKEN_PIPE\\0"
+          "CONNECT_ERROR\\0"
+          "ERROR_SETTING_NBIO\\0"
+          "INVALID_ARGUMENT\\0"
+          "IN_USE\\0"
+          "KEEPALIVE\\0"
+          "NBIO_CONNECT_ERROR\\0"
+          "NO_HOSTNAME_SPECIFIED\\0"
+          "NO_PORT_SPECIFIED\\0"
+          "NO_SUCH_FILE\\0"
+          "NULL_PARAMETER\\0"
+          "SYS_LIB\\0"
+          "UNABLE_TO_CREATE_SOCKET\\0"
+          "UNINITIALIZED\\0"
+          "UNSUPPORTED_METHOD\\0"
+          "WRITE_TO_READ_ONLY_BIO\\0"
+          "ARG2_LT_ARG3\\0"
+          "BAD_ENCODING\\0"
+          "BAD_RECIPROCAL\\0"
+          "BIGNUM_TOO_LONG\\0"
+          "BITS_TOO_SMALL\\0"
+          "CALLED_WITH_EVEN_MODULUS\\0"
+          "DIV_BY_ZERO\\0"
+          "EXPAND_ON_STATIC_BIGNUM_DATA\\0"
+          "INPUT_NOT_REDUCED\\0"
+          "INVALID_RANGE\\0"
+          "NEGATIVE_NUMBER\\0"
+          "NOT_A_SQUARE\\0"
+          "NOT_INITIALIZED\\0"
+          "NO_INVERSE\\0"
+          "PRIVATE_KEY_TOO_LARGE\\0"
+          "P_IS_NOT_PRIME\\0"
+          "TOO_MANY_ITERATIONS\\0"
+          "TOO_MANY_TEMPORARY_VARIABLES\\0"
+          "AES_KEY_SETUP_FAILED\\0"
+          "BAD_DECRYPT\\0"
+          "BAD_KEY_LENGTH\\0"
+          "CTRL_NOT_IMPLEMENTED\\0"
+          "CTRL_OPERATION_NOT_IMPLEMENTED\\0"
+          "DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH\\0"
+          "INITIALIZATION_ERROR\\0"
+          "INPUT_NOT_INITIALIZED\\0"
+          "INVALID_AD_SIZE\\0"
+          "INVALID_KEY_LENGTH\\0"
+          "INVALID_NONCE_SIZE\\0"
+          "INVALID_OPERATION\\0"
+          "IV_TOO_LARGE\\0"
+          "NO_CIPHER_SET\\0"
+          "NO_DIRECTION_SET\\0"
+          "OUTPUT_ALIASES_INPUT\\0"
+          "TAG_TOO_LARGE\\0"
+          "TOO_LARGE\\0"
+          "UNSUPPORTED_AD_SIZE\\0"
+          "UNSUPPORTED_INPUT_SIZE\\0"
+          "UNSUPPORTED_KEY_SIZE\\0"
+          "UNSUPPORTED_NONCE_SIZE\\0"
+          "UNSUPPORTED_TAG_SIZE\\0"
+          "WRONG_FINAL_BLOCK_LENGTH\\0"
+          "LIST_CANNOT_BE_NULL\\0"
+          "MISSING_CLOSE_SQUARE_BRACKET\\0"
+          "MISSING_EQUAL_SIGN\\0"
+          "NO_CLOSE_BRACE\\0"
+          "UNABLE_TO_CREATE_NEW_SECTION\\0"
+          "VARIABLE_HAS_NO_VALUE\\0"
+          "BAD_GENERATOR\\0"
+          "INVALID_PUBKEY\\0"
+          "MODULUS_TOO_LARGE\\0"
+          "NO_PRIVATE_VALUE\\0"
+          "BAD_Q_VALUE\\0"
+          "BAD_VERSION\\0"
+          "MISSING_PARAMETERS\\0"
+          "NEED_NEW_SETUP_VALUES\\0"
+          "BIGNUM_OUT_OF_RANGE\\0"
+          "COORDINATES_OUT_OF_RANGE\\0"
+          "D2I_ECPKPARAMETERS_FAILURE\\0"
+          "EC_GROUP_NEW_BY_NAME_FAILURE\\0"
+          "GROUP2PKPARAMETERS_FAILURE\\0"
+          "GROUP_MISMATCH\\0"
+          "I2D_ECPKPARAMETERS_FAILURE\\0"
+          "INCOMPATIBLE_OBJECTS\\0"
+          "INVALID_COFACTOR\\0"
+          "INVALID_COMPRESSED_POINT\\0"
+          "INVALID_COMPRESSION_BIT\\0"
+          "INVALID_ENCODING\\0"
+          "INVALID_FIELD\\0"
+          "INVALID_FORM\\0"
+          "INVALID_GROUP_ORDER\\0"
+          "INVALID_PRIVATE_KEY\\0"
+          "MISSING_PRIVATE_KEY\\0"
+          "NON_NAMED_CURVE\\0"
+          "PKPARAMETERS2GROUP_FAILURE\\0"
+          "POINT_AT_INFINITY\\0"
+          "POINT_IS_NOT_ON_CURVE\\0"
+          "SLOT_FULL\\0"
+          "UNDEFINED_GENERATOR\\0"
+          "UNKNOWN_GROUP\\0"
+          "UNKNOWN_ORDER\\0"
+          "WRONG_CURVE_PARAMETERS\\0"
+          "WRONG_ORDER\\0"
+          "KDF_FAILED\\0"
+          "POINT_ARITHMETIC_FAILURE\\0"
+          "BAD_SIGNATURE\\0"
+          "NOT_IMPLEMENTED\\0"
+          "RANDOM_NUMBER_GENERATION_FAILED\\0"
+          "OPERATION_NOT_SUPPORTED\\0"
+          "COMMAND_NOT_SUPPORTED\\0"
+          "DIFFERENT_KEY_TYPES\\0"
+          "DIFFERENT_PARAMETERS\\0"
+          "EXPECTING_AN_EC_KEY_KEY\\0"
+          "EXPECTING_AN_RSA_KEY\\0"
+          "EXPECTING_A_DSA_KEY\\0"
+          "ILLEGAL_OR_UNSUPPORTED_PADDING_MODE\\0"
+          "INVALID_DIGEST_LENGTH\\0"
+          "INVALID_DIGEST_TYPE\\0"
+          "INVALID_KEYBITS\\0"
+          "INVALID_MGF1_MD\\0"
+          "INVALID_PADDING_MODE\\0"
+          "INVALID_PSS_SALTLEN\\0"
+          "KEYS_NOT_SET\\0"
+          "NO_DEFAULT_DIGEST\\0"
+          "NO_KEY_SET\\0"
+          "NO_MDC2_SUPPORT\\0"
+          "NO_NID_FOR_CURVE\\0"
+          "NO_OPERATION_SET\\0"
+          "NO_PARAMETERS_SET\\0"
+          "OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE\\0"
+          "OPERATON_NOT_INITIALIZED\\0"
+          "UNKNOWN_PUBLIC_KEY_TYPE\\0"
+          "UNSUPPORTED_ALGORITHM\\0"
+          "OUTPUT_TOO_LARGE\\0"
+          "UNKNOWN_NID\\0"
+          "BAD_BASE64_DECODE\\0"
+          "BAD_END_LINE\\0"
+          "BAD_IV_CHARS\\0"
+          "BAD_PASSWORD_READ\\0"
+          "CIPHER_IS_NULL\\0"
+          "ERROR_CONVERTING_PRIVATE_KEY\\0"
+          "NOT_DEK_INFO\\0"
+          "NOT_ENCRYPTED\\0"
+          "NOT_PROC_TYPE\\0"
+          "NO_START_LINE\\0"
+          "READ_KEY\\0"
+          "SHORT_HEADER\\0"
+          "UNSUPPORTED_CIPHER\\0"
+          "UNSUPPORTED_ENCRYPTION\\0"
+          "BAD_PKCS12_DATA\\0"
+          "BAD_PKCS12_VERSION\\0"
+          "CIPHER_HAS_NO_OBJECT_IDENTIFIER\\0"
+          "CRYPT_ERROR\\0"
+          "ENCRYPT_ERROR\\0"
+          "ERROR_SETTING_CIPHER_PARAMS\\0"
+          "INCORRECT_PASSWORD\\0"
+          "KEYGEN_FAILURE\\0"
+          "KEY_GEN_ERROR\\0"
+          "METHOD_NOT_SUPPORTED\\0"
+          "MISSING_MAC\\0"
+          "MULTIPLE_PRIVATE_KEYS_IN_PKCS12\\0"
+          "PKCS12_PUBLIC_KEY_INTEGRITY_NOT_SUPPORTED\\0"
+          "PKCS12_TOO_DEEPLY_NESTED\\0"
+          "PRIVATE_KEY_DECODE_ERROR\\0"
+          "PRIVATE_KEY_ENCODE_ERROR\\0"
+          "UNKNOWN_ALGORITHM\\0"
+          "UNKNOWN_CIPHER\\0"
+          "UNKNOWN_CIPHER_ALGORITHM\\0"
+          "UNKNOWN_DIGEST\\0"
+          "UNKNOWN_HASH\\0"
+          "UNSUPPORTED_PRIVATE_KEY_ALGORITHM\\0"
+          "BAD_E_VALUE\\0"
+          "BAD_FIXED_HEADER_DECRYPT\\0"
+          "BAD_PAD_BYTE_COUNT\\0"
+          "BAD_RSA_PARAMETERS\\0"
+          "BLOCK_TYPE_IS_NOT_01\\0"
+          "BN_NOT_INITIALIZED\\0"
+          "CANNOT_RECOVER_MULTI_PRIME_KEY\\0"
+          "CRT_PARAMS_ALREADY_GIVEN\\0"
+          "CRT_VALUES_INCORRECT\\0"
+          "DATA_LEN_NOT_EQUAL_TO_MOD_LEN\\0"
+          "DATA_TOO_LARGE\\0"
+          "DATA_TOO_LARGE_FOR_KEY_SIZE\\0"
+          "DATA_TOO_LARGE_FOR_MODULUS\\0"
+          "DATA_TOO_SMALL\\0"
+          "DATA_TOO_SMALL_FOR_KEY_SIZE\\0"
+          "DIGEST_TOO_BIG_FOR_RSA_KEY\\0"
+          "D_E_NOT_CONGRUENT_TO_1\\0"
+          "EMPTY_PUBLIC_KEY\\0"
+          "FIRST_OCTET_INVALID\\0"
+          "INCONSISTENT_SET_OF_CRT_VALUES\\0"
+          "INTERNAL_ERROR\\0"
+          "INVALID_MESSAGE_LENGTH\\0"
+          "KEY_SIZE_TOO_SMALL\\0"
+          "LAST_OCTET_INVALID\\0"
+          "MUST_HAVE_AT_LEAST_TWO_PRIMES\\0"
+          "NO_PUBLIC_EXPONENT\\0"
+          "NULL_BEFORE_BLOCK_MISSING\\0"
+          "N_NOT_EQUAL_P_Q\\0"
+          "OAEP_DECODING_ERROR\\0"
+          "ONLY_ONE_OF_P_Q_GIVEN\\0"
+          "OUTPUT_BUFFER_TOO_SMALL\\0"
+          "PADDING_CHECK_FAILED\\0"
+          "PKCS_DECODING_ERROR\\0"
+          "SLEN_CHECK_FAILED\\0"
+          "SLEN_RECOVERY_FAILED\\0"
+          "UNKNOWN_ALGORITHM_TYPE\\0"
+          "UNKNOWN_PADDING_TYPE\\0"
+          "VALUE_MISSING\\0"
+          "WRONG_SIGNATURE_LENGTH\\0"
+          "APP_DATA_IN_HANDSHAKE\\0"
+          "ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT\\0"
+          "BAD_ALERT\\0"
+          "BAD_CHANGE_CIPHER_SPEC\\0"
+          "BAD_DATA_RETURNED_BY_CALLBACK\\0"
+          "BAD_DH_P_LENGTH\\0"
+          "BAD_DIGEST_LENGTH\\0"
+          "BAD_ECC_CERT\\0"
+          "BAD_ECPOINT\\0"
+          "BAD_HANDSHAKE_RECORD\\0"
+          "BAD_HELLO_REQUEST\\0"
+          "BAD_LENGTH\\0"
+          "BAD_PACKET_LENGTH\\0"
+          "BAD_RSA_ENCRYPT\\0"
+          "BAD_SRTP_MKI_VALUE\\0"
+          "BAD_SRTP_PROTECTION_PROFILE_LIST\\0"
+          "BAD_SSL_FILETYPE\\0"
+          "BAD_WRITE_RETRY\\0"
+          "BIO_NOT_SET\\0"
+          "BLOCK_CIPHER_PAD_IS_WRONG\\0"
+          "BUFFERED_MESSAGES_ON_CIPHER_CHANGE\\0"
+          "CA_DN_LENGTH_MISMATCH\\0"
+          "CA_DN_TOO_LONG\\0"
+          "CCS_RECEIVED_EARLY\\0"
+          "CERTIFICATE_VERIFY_FAILED\\0"
+          "CERT_CB_ERROR\\0"
+          "CERT_LENGTH_MISMATCH\\0"
+          "CHANNEL_ID_NOT_P256\\0"
+          "CHANNEL_ID_SIGNATURE_INVALID\\0"
+          "CIPHER_OR_HASH_UNAVAILABLE\\0"
+          "CLIENTHELLO_PARSE_FAILED\\0"
+          "CLIENTHELLO_TLSEXT\\0"
+          "CONNECTION_REJECTED\\0"
+          "CONNECTION_TYPE_NOT_SET\\0"
+          "CUSTOM_EXTENSION_ERROR\\0"
+          "DATA_LENGTH_TOO_LONG\\0"
+          "DECRYPTION_FAILED\\0"
+          "DECRYPTION_FAILED_OR_BAD_RECORD_MAC\\0"
+          "DH_PUBLIC_VALUE_LENGTH_IS_WRONG\\0"
+          "DH_P_TOO_LONG\\0"
+          "DIGEST_CHECK_FAILED\\0"
+          "DOWNGRADE_DETECTED\\0"
+          "DTLS_MESSAGE_TOO_BIG\\0"
+          "DUPLICATE_EXTENSION\\0"
+          "DUPLICATE_KEY_SHARE\\0"
+          "ECC_CERT_NOT_FOR_SIGNING\\0"
+          "EMS_STATE_INCONSISTENT\\0"
+          "ENCRYPTED_LENGTH_TOO_LONG\\0"
+          "ERROR_ADDING_EXTENSION\\0"
+          "ERROR_IN_RECEIVED_CIPHER_LIST\\0"
+          "ERROR_PARSING_EXTENSION\\0"
+          "EXCESSIVE_MESSAGE_SIZE\\0"
+          "EXTRA_DATA_IN_MESSAGE\\0"
+          "FRAGMENT_MISMATCH\\0"
+          "GOT_NEXT_PROTO_WITHOUT_EXTENSION\\0"
+          "HANDSHAKE_FAILURE_ON_CLIENT_HELLO\\0"
+          "HTTPS_PROXY_REQUEST\\0"
+          "HTTP_REQUEST\\0"
+          "INAPPROPRIATE_FALLBACK\\0"
+          "INVALID_ALPN_PROTOCOL\\0"
+          "INVALID_COMMAND\\0"
+          "INVALID_COMPRESSION_LIST\\0"
+          "INVALID_MESSAGE\\0"
+          "INVALID_OUTER_RECORD_TYPE\\0"
+          "INVALID_SSL_SESSION\\0"
+          "INVALID_TICKET_KEYS_LENGTH\\0"
+          "LENGTH_MISMATCH\\0"
+          "LIBRARY_HAS_NO_CIPHERS\\0"
+          "MISSING_EXTENSION\\0"
+          "MISSING_KEY_SHARE\\0"
+          "MISSING_RSA_CERTIFICATE\\0"
+          "MISSING_TMP_DH_KEY\\0"
+          "MISSING_TMP_ECDH_KEY\\0"
+          "MIXED_SPECIAL_OPERATOR_WITH_GROUPS\\0"
+          "MTU_TOO_SMALL\\0"
+          "NEGOTIATED_BOTH_NPN_AND_ALPN\\0"
+          "NESTED_GROUP\\0"
+          "NO_CERTIFICATES_RETURNED\\0"
+          "NO_CERTIFICATE_ASSIGNED\\0"
+          "NO_CERTIFICATE_SET\\0"
+          "NO_CIPHERS_AVAILABLE\\0"
+          "NO_CIPHERS_PASSED\\0"
+          "NO_CIPHERS_SPECIFIED\\0"
+          "NO_CIPHER_MATCH\\0"
+          "NO_COMMON_SIGNATURE_ALGORITHMS\\0"
+          "NO_COMPRESSION_SPECIFIED\\0"
+          "NO_GROUPS_SPECIFIED\\0"
+          "NO_METHOD_SPECIFIED\\0"
+          "NO_P256_SUPPORT\\0"
+          "NO_PRIVATE_KEY_ASSIGNED\\0"
+          "NO_RENEGOTIATION\\0"
+          "NO_REQUIRED_DIGEST\\0"
+          "NO_SHARED_CIPHER\\0"
+          "NULL_SSL_CTX\\0"
+          "NULL_SSL_METHOD_PASSED\\0"
+          "OLD_SESSION_CIPHER_NOT_RETURNED\\0"
+          "OLD_SESSION_VERSION_NOT_RETURNED\\0"
+          "PARSE_TLSEXT\\0"
+          "PATH_TOO_LONG\\0"
+          "PEER_DID_NOT_RETURN_A_CERTIFICATE\\0"
+          "PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE\\0"
+          "PROTOCOL_IS_SHUTDOWN\\0"
+          "PSK_IDENTITY_NOT_FOUND\\0"
+          "PSK_NO_CLIENT_CB\\0"
+          "PSK_NO_SERVER_CB\\0"
+          "READ_TIMEOUT_EXPIRED\\0"
+          "RECORD_LENGTH_MISMATCH\\0"
+          "RECORD_TOO_LARGE\\0"
+          "RENEGOTIATION_EMS_MISMATCH\\0"
+          "RENEGOTIATION_ENCODING_ERR\\0"
+          "RENEGOTIATION_MISMATCH\\0"
+          "REQUIRED_CIPHER_MISSING\\0"
+          "RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION\\0"
+          "RESUMED_NON_EMS_SESSION_WITH_EMS_EXTENSION\\0"
+          "SCSV_RECEIVED_WHEN_RENEGOTIATING\\0"
+          "SERVERHELLO_TLSEXT\\0"
+          "SESSION_ID_CONTEXT_UNINITIALIZED\\0"
+          "SESSION_MAY_NOT_BE_CREATED\\0"
+          "SHUTDOWN_WHILE_IN_INIT\\0"
+          "SIGNATURE_ALGORITHMS_EXTENSION_SENT_BY_SERVER\\0"
+          "SRTP_COULD_NOT_ALLOCATE_PROFILES\\0"
+          "SRTP_UNKNOWN_PROTECTION_PROFILE\\0"
+          "SSL3_EXT_INVALID_SERVERNAME\\0"
+          "SSLV3_ALERT_BAD_CERTIFICATE\\0"
+          "SSLV3_ALERT_BAD_RECORD_MAC\\0"
+          "SSLV3_ALERT_CERTIFICATE_EXPIRED\\0"
+          "SSLV3_ALERT_CERTIFICATE_REVOKED\\0"
+          "SSLV3_ALERT_CERTIFICATE_UNKNOWN\\0"
+          "SSLV3_ALERT_CLOSE_NOTIFY\\0"
+          "SSLV3_ALERT_DECOMPRESSION_FAILURE\\0"
+          "SSLV3_ALERT_HANDSHAKE_FAILURE\\0"
+          "SSLV3_ALERT_ILLEGAL_PARAMETER\\0"
+          "SSLV3_ALERT_NO_CERTIFICATE\\0"
+          "SSLV3_ALERT_UNEXPECTED_MESSAGE\\0"
+          "SSLV3_ALERT_UNSUPPORTED_CERTIFICATE\\0"
+          "SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION\\0"
+          "SSL_HANDSHAKE_FAILURE\\0"
+          "SSL_SESSION_ID_CONTEXT_TOO_LONG\\0"
+          "TLSV1_ALERT_ACCESS_DENIED\\0"
+          "TLSV1_ALERT_DECODE_ERROR\\0"
+          "TLSV1_ALERT_DECRYPTION_FAILED\\0"
+          "TLSV1_ALERT_DECRYPT_ERROR\\0"
+          "TLSV1_ALERT_EXPORT_RESTRICTION\\0"
+          "TLSV1_ALERT_INAPPROPRIATE_FALLBACK\\0"
+          "TLSV1_ALERT_INSUFFICIENT_SECURITY\\0"
+          "TLSV1_ALERT_INTERNAL_ERROR\\0"
+          "TLSV1_ALERT_NO_RENEGOTIATION\\0"
+          "TLSV1_ALERT_PROTOCOL_VERSION\\0"
+          "TLSV1_ALERT_RECORD_OVERFLOW\\0"
+          "TLSV1_ALERT_UNKNOWN_CA\\0"
+          "TLSV1_ALERT_USER_CANCELLED\\0"
+          "TLSV1_BAD_CERTIFICATE_HASH_VALUE\\0"
+          "TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE\\0"
+          "TLSV1_CERTIFICATE_UNOBTAINABLE\\0"
+          "TLSV1_UNRECOGNIZED_NAME\\0"
+          "TLSV1_UNSUPPORTED_EXTENSION\\0"
+          "TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST\\0"
+          "TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG\\0"
+          "TOO_MANY_EMPTY_FRAGMENTS\\0"
+          "TOO_MANY_KEY_UPDATES\\0"
+          "TOO_MANY_WARNING_ALERTS\\0"
+          "UNABLE_TO_FIND_ECDH_PARAMETERS\\0"
+          "UNEXPECTED_EXTENSION\\0"
+          "UNEXPECTED_MESSAGE\\0"
+          "UNEXPECTED_OPERATOR_IN_GROUP\\0"
+          "UNEXPECTED_RECORD\\0"
+          "UNKNOWN_ALERT_TYPE\\0"
+          "UNKNOWN_CERTIFICATE_TYPE\\0"
+          "UNKNOWN_CIPHER_RETURNED\\0"
+          "UNKNOWN_CIPHER_TYPE\\0"
+          "UNKNOWN_KEY_EXCHANGE_TYPE\\0"
+          "UNKNOWN_PROTOCOL\\0"
+          "UNKNOWN_SSL_VERSION\\0"
+          "UNKNOWN_STATE\\0"
+          "UNSAFE_LEGACY_RENEGOTIATION_DISABLED\\0"
+          "UNSUPPORTED_COMPRESSION_ALGORITHM\\0"
+          "UNSUPPORTED_ELLIPTIC_CURVE\\0"
+          "UNSUPPORTED_PROTOCOL\\0"
+          "UNSUPPORTED_PROTOCOL_FOR_CUSTOM_KEY\\0"
+          "WRONG_CERTIFICATE_TYPE\\0"
+          "WRONG_CIPHER_RETURNED\\0"
+          "WRONG_CURVE\\0"
+          "WRONG_MESSAGE_TYPE\\0"
+          "WRONG_SIGNATURE_TYPE\\0"
+          "WRONG_SSL_VERSION\\0"
+          "WRONG_VERSION_NUMBER\\0"
+          "X509_LIB\\0"
+          "X509_VERIFICATION_SETUP_PROBLEMS\\0"
+          "AKID_MISMATCH\\0"
+          "BAD_PKCS7_VERSION\\0"
+          "BAD_X509_FILETYPE\\0"
+          "BASE64_DECODE_ERROR\\0"
+          "CANT_CHECK_DH_KEY\\0"
+          "CERT_ALREADY_IN_HASH_TABLE\\0"
+          "CRL_ALREADY_DELTA\\0"
+          "CRL_VERIFY_FAILURE\\0"
+          "IDP_MISMATCH\\0"
+          "INVALID_DIRECTORY\\0"
+          "INVALID_FIELD_NAME\\0"
+          "INVALID_PSS_PARAMETERS\\0"
+          "INVALID_TRUST\\0"
+          "ISSUER_MISMATCH\\0"
+          "KEY_TYPE_MISMATCH\\0"
+          "KEY_VALUES_MISMATCH\\0"
+          "LOADING_CERT_DIR\\0"
+          "LOADING_DEFAULTS\\0"
+          "NAME_TOO_LONG\\0"
+          "NEWER_CRL_NOT_NEWER\\0"
+          "NOT_PKCS7_SIGNED_DATA\\0"
+          "NO_CERTIFICATES_INCLUDED\\0"
+          "NO_CERT_SET_FOR_US_TO_VERIFY\\0"
+          "NO_CRLS_INCLUDED\\0"
+          "NO_CRL_NUMBER\\0"
+          "PUBLIC_KEY_DECODE_ERROR\\0"
+          "PUBLIC_KEY_ENCODE_ERROR\\0"
+          "SHOULD_RETRY\\0"
+          "UNKNOWN_KEY_TYPE\\0"
+          "UNKNOWN_PURPOSE_ID\\0"
+          "UNKNOWN_TRUST_ID\\0"
+          "WRONG_LOOKUP_TYPE\\0"
+          "BAD_IP_ADDRESS\\0"
+          "BAD_OBJECT\\0"
+          "BN_DEC2BN_ERROR\\0"
+          "BN_TO_ASN1_INTEGER_ERROR\\0"
+          "CANNOT_FIND_FREE_FUNCTION\\0"
+          "DIRNAME_ERROR\\0"
+          "DISTPOINT_ALREADY_SET\\0"
+          "DUPLICATE_ZONE_ID\\0"
+          "ERROR_CONVERTING_ZONE\\0"
+          "ERROR_CREATING_EXTENSION\\0"
+          "ERROR_IN_EXTENSION\\0"
+          "EXPECTED_A_SECTION_NAME\\0"
+          "EXTENSION_EXISTS\\0"
+          "EXTENSION_NAME_ERROR\\0"
+          "EXTENSION_NOT_FOUND\\0"
+          "EXTENSION_SETTING_NOT_SUPPORTED\\0"
+          "EXTENSION_VALUE_ERROR\\0"
+          "ILLEGAL_EMPTY_EXTENSION\\0"
+          "ILLEGAL_HEX_DIGIT\\0"
+          "INCORRECT_POLICY_SYNTAX_TAG\\0"
+          "INVALID_BOOLEAN_STRING\\0"
+          "INVALID_EXTENSION_STRING\\0"
+          "INVALID_MULTIPLE_RDNS\\0"
+          "INVALID_NAME\\0"
+          "INVALID_NULL_ARGUMENT\\0"
+          "INVALID_NULL_NAME\\0"
+          "INVALID_NULL_VALUE\\0"
+          "INVALID_NUMBERS\\0"
+          "INVALID_OBJECT_IDENTIFIER\\0"
+          "INVALID_OPTION\\0"
+          "INVALID_POLICY_IDENTIFIER\\0"
+          "INVALID_PROXY_POLICY_SETTING\\0"
+          "INVALID_PURPOSE\\0"
+          "INVALID_SECTION\\0"
+          "INVALID_SYNTAX\\0"
+          "ISSUER_DECODE_ERROR\\0"
+          "NEED_ORGANIZATION_AND_NUMBERS\\0"
+          "NO_CONFIG_DATABASE\\0"
+          "NO_ISSUER_CERTIFICATE\\0"
+          "NO_ISSUER_DETAILS\\0"
+          "NO_POLICY_IDENTIFIER\\0"
+          "NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED\\0"
+          "NO_PUBLIC_KEY\\0"
+          "NO_SUBJECT_DETAILS\\0"
+          "ODD_NUMBER_OF_DIGITS\\0"
+          "OPERATION_NOT_DEFINED\\0"
+          "OTHERNAME_ERROR\\0"
+          "POLICY_LANGUAGE_ALREADY_DEFINED\\0"
+          "POLICY_PATH_LENGTH\\0"
+          "POLICY_PATH_LENGTH_ALREADY_DEFINED\\0"
+          "POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY\\0"
+          "SECTION_NOT_FOUND\\0"
+          "UNABLE_TO_GET_ISSUER_DETAILS\\0"
+          "UNABLE_TO_GET_ISSUER_KEYID\\0"
+          "UNKNOWN_BIT_STRING_ARGUMENT\\0"
+          "UNKNOWN_EXTENSION\\0"
+          "UNKNOWN_EXTENSION_NAME\\0"
+          "UNKNOWN_OPTION\\0"
+          "UNSUPPORTED_OPTION\\0"
+          "USER_TOO_LONG\\0"
           "";
     EOF
   END_OF_COMMAND

From 249d7a66ff82d3e919684ec742e6a51b56664c45 Mon Sep 17 00:00:00 2001
From: Muxi Yan <mxyan@google.com>
Date: Fri, 27 Jan 2017 04:34:30 +0000
Subject: [PATCH 07/52] Automatedly advance ObjC version numbers

---
 src/objective-c/GRPCClient/private/GRPCHost.m |   5 +-
 src/objective-c/GRPCClient/private/version.h  |  34 +++++
 templates/gRPC-Core.podspec.template          |   2 +-
 templates/gRPC-ProtoRPC.podspec.template      |  67 ++++++++++
 templates/gRPC-RxLibrary.podspec.template     |  58 +++++++++
 templates/gRPC.podspec.template               |  69 ++++++++++
 ...!ProtoCompiler-gRPCPlugin.podspec.template | 123 ++++++++++++++++++
 .../GRPCClient/private/version.h.template     |  36 +++++
 8 files changed, 389 insertions(+), 5 deletions(-)
 create mode 100644 src/objective-c/GRPCClient/private/version.h
 create mode 100644 templates/gRPC-ProtoRPC.podspec.template
 create mode 100644 templates/gRPC-RxLibrary.podspec.template
 create mode 100644 templates/gRPC.podspec.template
 create mode 100644 templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template
 create mode 100644 templates/src/objective-c/GRPCClient/private/version.h.template

diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m
index a57bd8fc2f9..246af560cdb 100644
--- a/src/objective-c/GRPCClient/private/GRPCHost.m
+++ b/src/objective-c/GRPCClient/private/GRPCHost.m
@@ -45,13 +45,10 @@
 #import "GRPCCompletionQueue.h"
 #import "GRPCConnectivityMonitor.h"
 #import "NSDictionary+GRPC.h"
+#import "version.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
-// TODO(jcanizales): Generate the version in a standalone header, from templates. Like
-// templates/src/core/surface/version.c.template .
-#define GRPC_OBJC_VERSION_STRING @"1.1.0-pre1"
-
 static NSMutableDictionary *kHostCache;
 
 // This connectivity monitor flushes the host cache when connectivity status
diff --git a/src/objective-c/GRPCClient/private/version.h b/src/objective-c/GRPCClient/private/version.h
new file mode 100644
index 00000000000..973c206f9cb
--- /dev/null
+++ b/src/objective-c/GRPCClient/private/version.h
@@ -0,0 +1,34 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#define GRPC_OBJC_VERSION_STRING @"1.1.0-pre1"
diff --git a/templates/gRPC-Core.podspec.template b/templates/gRPC-Core.podspec.template
index f15d0efc17d..baa9f5497da 100644
--- a/templates/gRPC-Core.podspec.template
+++ b/templates/gRPC-Core.podspec.template
@@ -62,7 +62,7 @@
   %>
   Pod::Spec.new do |s|
     s.name     = 'gRPC-Core'
-    version = '1.1.0-pre1'
+    version = '${settings.version}'
     s.version  = version
     s.summary  = 'Core cross-platform gRPC library, written in C'
     s.homepage = 'http://www.grpc.io'
diff --git a/templates/gRPC-ProtoRPC.podspec.template b/templates/gRPC-ProtoRPC.podspec.template
new file mode 100644
index 00000000000..4b507d217c0
--- /dev/null
+++ b/templates/gRPC-ProtoRPC.podspec.template
@@ -0,0 +1,67 @@
+%YAML 1.2
+--- |
+  # 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.
+
+
+  Pod::Spec.new do |s|
+    s.name     = 'gRPC-ProtoRPC'
+    version = '${settings.version}'
+    s.version  = version
+    s.summary  = 'RPC library for Protocol Buffers, based on gRPC'
+    s.homepage = 'http://www.grpc.io'
+    s.license  = 'New BSD'
+    s.authors  = { 'The gRPC contributors' => 'grpc-packages@google.com' }
+
+    s.source = {
+      :git => 'https://github.com/grpc/grpc.git',
+      :tag => "v#{version}",
+    }
+
+    s.ios.deployment_target = '7.1'
+    s.osx.deployment_target = '10.9'
+
+    name = 'ProtoRPC'
+    s.module_name = name
+    s.header_dir = name
+
+    src_dir = 'src/objective-c/ProtoRPC'
+    s.source_files = "#{src_dir}/*.{h,m}"
+    s.header_mappings_dir = "#{src_dir}"
+
+    s.dependency 'gRPC', version
+    s.dependency 'gRPC-RxLibrary', version
+    s.dependency 'Protobuf', '~> 3.0'
+    s.pod_target_xcconfig = {
+      # This is needed by all pods that depend on Protobuf:
+      'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1',
+      # This is needed by all pods that depend on gRPC-RxLibrary:
+      'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES',
+    }
+  end
diff --git a/templates/gRPC-RxLibrary.podspec.template b/templates/gRPC-RxLibrary.podspec.template
new file mode 100644
index 00000000000..99a40730fa2
--- /dev/null
+++ b/templates/gRPC-RxLibrary.podspec.template
@@ -0,0 +1,58 @@
+%YAML 1.2
+--- |
+  # 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.
+
+
+  Pod::Spec.new do |s|
+    s.name     = 'gRPC-RxLibrary'
+    version = '${settings.version}'
+    s.version  = version
+    s.summary  = 'Reactive Extensions library for iOS/OSX.'
+    s.homepage = 'http://www.grpc.io'
+    s.license  = 'New BSD'
+    s.authors  = { 'The gRPC contributors' => 'grpc-packages@google.com' }
+
+    s.source = {
+      :git => 'https://github.com/grpc/grpc.git',
+      :tag => "v#{version}",
+    }
+
+    s.ios.deployment_target = '7.1'
+    s.osx.deployment_target = '10.9'
+
+    name = 'RxLibrary'
+    s.module_name = name
+    s.header_dir = name
+
+    src_dir = 'src/objective-c/RxLibrary'
+    s.source_files = "#{src_dir}/*.{h,m}", "#{src_dir}/**/*.{h,m}"
+    s.private_header_files = "#{src_dir}/private/*.h"
+    s.header_mappings_dir = "#{src_dir}"
+  end
diff --git a/templates/gRPC.podspec.template b/templates/gRPC.podspec.template
new file mode 100644
index 00000000000..8ccd1867dd0
--- /dev/null
+++ b/templates/gRPC.podspec.template
@@ -0,0 +1,69 @@
+%YAML 1.2
+--- |
+  # 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.
+
+
+  Pod::Spec.new do |s|
+    s.name     = 'gRPC'
+    version = '${settings.version}'
+    s.version  = version
+    s.summary  = 'gRPC client library for iOS/OSX'
+    s.homepage = 'http://www.grpc.io'
+    s.license  = 'New BSD'
+    s.authors  = { 'The gRPC contributors' => 'grpc-packages@google.com' }
+
+    s.source = {
+      :git => 'https://github.com/grpc/grpc.git',
+      :tag => "v#{version}",
+    }
+
+    s.ios.deployment_target = '7.1'
+    s.osx.deployment_target = '10.9'
+
+    name = 'GRPCClient'
+    s.module_name = name
+    s.header_dir = name
+
+    src_dir = 'src/objective-c/GRPCClient'
+    s.source_files = "#{src_dir}/*.{h,m}", "#{src_dir}/**/*.{h,m}"
+    s.private_header_files = "#{src_dir}/private/*.h"
+    s.header_mappings_dir = "#{src_dir}"
+
+    s.dependency 'gRPC-Core', version
+    s.dependency 'gRPC-RxLibrary', version
+
+    # Certificates, to be able to establish TLS connections:
+    s.resource_bundles = { 'gRPCCertificates' => ['etc/roots.pem'] }
+
+    s.pod_target_xcconfig = {
+      # This is needed by all pods that depend on gRPC-RxLibrary:
+      'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES',
+    }
+  end
diff --git a/templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template b/templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template
new file mode 100644
index 00000000000..6c45fb45c04
--- /dev/null
+++ b/templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template
@@ -0,0 +1,123 @@
+%YAML 1.2
+--- |
+  # CocoaPods podspec for the gRPC Proto Compiler Plugin
+
+  # Copyright 2016, 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.
+
+  Pod::Spec.new do |s|
+    # This pod is only a utility that will be used by other pods _at install time_ (not at compile
+    # time). Other pods can access it in their `prepare_command` script, under <pods_root>/<pod name>.
+    # Because CocoaPods installs pods in alphabetical order, beginning this pod's name with an
+    # exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed
+    # before them.
+    s.name     = '!ProtoCompiler-gRPCPlugin'
+    v = '${settings.version}'
+    s.version  = v
+    s.summary  = 'The gRPC ProtoC plugin generates Objective-C files from .proto services.'
+    s.description = <<-DESC
+      This podspec only downloads the gRPC protoc plugin so that local pods generating protos can use
+      it in their invocation of protoc, as part of their prepare_command.
+      The generated code will have a dependency on the gRPC Objective-C Proto runtime of the same
+      version. The runtime can be obtained as the "gRPC-ProtoRPC" pod.
+    DESC
+    s.homepage = 'http://www.grpc.io'
+    s.license  = {
+      :type => 'New BSD',
+      :text => <<-LICENSE
+        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.
+      LICENSE
+    }
+    s.authors  = { 'The gRPC contributors' => 'grpc-packages@google.com' }
+
+    repo = 'grpc/grpc'
+    file = "grpc_objective_c_plugin-#{v}-macos-x86_64.zip"
+    s.source = {
+      :http => "https://github.com/#{repo}/releases/download/v#{v}/#{file}",
+      # TODO(jcanizales): Add sha1 or sha256
+      # :sha1 => '??',
+    }
+
+    repo_root = '../..'
+    plugin = 'grpc_objective_c_plugin'
+
+    s.preserve_paths = plugin
+
+    # Restrict the protoc version to the one supported by this plugin.
+    s.dependency '!ProtoCompiler', '3.0.2'
+    # For the Protobuf dependency not to complain:
+    s.ios.deployment_target = '7.1'
+    s.osx.deployment_target = '10.9'
+    # Restrict the gRPC runtime version to the one supported by this plugin.
+    s.dependency 'gRPC-ProtoRPC', v
+
+    # This is only for local development of the plugin: If the Podfile brings this pod from a local
+    # directory using `:path`, CocoaPods won't download the zip file and so the plugin won't be
+    # present in this pod's directory. We use that knowledge to check for the existence of the file
+    # and, if absent, compile the plugin from the local sources.
+    s.prepare_command = <<-CMD
+      if [ ! -f #{plugin} ]; then
+        cd #{repo_root}
+        # This will build the plugin and put it in #{repo_root}/bins/opt.
+        #
+        # TODO(jcanizales): I reckon make will try to use locally-installed libprotoc (headers and
+        # library binary) if found, which _we do not want_. Find a way for this to always use the
+        # sources in the repo.
+        make #{plugin}
+        cd -
+      fi
+    CMD
+  end
diff --git a/templates/src/objective-c/GRPCClient/private/version.h.template b/templates/src/objective-c/GRPCClient/private/version.h.template
new file mode 100644
index 00000000000..07df286c8b4
--- /dev/null
+++ b/templates/src/objective-c/GRPCClient/private/version.h.template
@@ -0,0 +1,36 @@
+%YAML 1.2
+--- |
+  /*
+   *
+   * 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.
+   *
+   */
+  
+  #define GRPC_OBJC_VERSION_STRING @"${settings.version}"

From 0b5fc6a544765a62b7099f6d1a79d251620e3674 Mon Sep 17 00:00:00 2001
From: Muxi Yan <mxyan@google.com>
Date: Fri, 27 Jan 2017 17:20:20 -0800
Subject: [PATCH 08/52] Advance protoc version to 3.1.0

---
 src/objective-c/!ProtoCompiler.podspec | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/objective-c/!ProtoCompiler.podspec b/src/objective-c/!ProtoCompiler.podspec
index b55f6c93c62..dc4d8e964e6 100644
--- a/src/objective-c/!ProtoCompiler.podspec
+++ b/src/objective-c/!ProtoCompiler.podspec
@@ -36,7 +36,7 @@ Pod::Spec.new do |s|
   # exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed
   # before them.
   s.name     = '!ProtoCompiler'
-  v = '3.0.2'
+  v = '3.1.0'
   s.version  = v
   s.summary  = 'The Protobuf Compiler (protoc) generates Objective-C files from .proto files'
   s.description = <<-DESC

From e6dd773dffb9eaf30361f616bfb17c8a7ecebdac Mon Sep 17 00:00:00 2001
From: "Mark D. Roth" <roth@google.com>
Date: Wed, 25 Jan 2017 10:44:30 -0800
Subject: [PATCH 09/52] Move parameters for all grpc_op types into their own
 sub-structs.

---
 include/grpc++/impl/codegen/call.h            |  9 ++++----
 include/grpc/impl/codegen/grpc_types.h        | 12 +++++++---
 src/core/ext/lb_policy/grpclb/grpclb.c        |  9 ++++----
 src/core/lib/surface/call.c                   | 13 +++++++----
 src/core/lib/surface/call_log_batch.c         |  8 ++++---
 src/core/lib/surface/server.c                 |  5 ++--
 src/csharp/ext/grpc_csharp_ext.c              | 23 +++++++++++--------
 src/node/ext/call.cc                          |  6 ++---
 .../GRPCClient/private/GRPCWrappedCall.m      |  8 +++----
 .../tests/CronetUnitTests/CronetUnitTests.m   |  6 ++---
 src/php/ext/grpc/call.c                       |  9 ++++----
 .../grpc/_cython/_cygrpc/records.pyx.pxi      |  7 +++---
 src/ruby/ext/grpc/rb_call.c                   | 12 ++++++----
 13 files changed, 74 insertions(+), 53 deletions(-)

diff --git a/include/grpc++/impl/codegen/call.h b/include/grpc++/impl/codegen/call.h
index 6ab00612f6e..475f8d11bc1 100644
--- a/include/grpc++/impl/codegen/call.h
+++ b/include/grpc++/impl/codegen/call.h
@@ -249,7 +249,7 @@ class CallOpSendMessage {
     op->op = GRPC_OP_SEND_MESSAGE;
     op->flags = write_options_.flags();
     op->reserved = NULL;
-    op->data.send_message = send_buf_;
+    op->data.send_message.send_message = send_buf_;
     // Flags are per-message: clear them after use.
     write_options_.Clear();
   }
@@ -298,7 +298,7 @@ class CallOpRecvMessage {
     op->op = GRPC_OP_RECV_MESSAGE;
     op->flags = 0;
     op->reserved = NULL;
-    op->data.recv_message = &recv_buf_;
+    op->data.recv_message.recv_message = &recv_buf_;
   }
 
   void FinishOp(bool* status, int max_receive_message_size) {
@@ -379,7 +379,7 @@ class CallOpGenericRecvMessage {
     op->op = GRPC_OP_RECV_MESSAGE;
     op->flags = 0;
     op->reserved = NULL;
-    op->data.recv_message = &recv_buf_;
+    op->data.recv_message.recv_message = &recv_buf_;
   }
 
   void FinishOp(bool* status, int max_receive_message_size) {
@@ -486,7 +486,8 @@ class CallOpRecvInitialMetadata {
     memset(&recv_initial_metadata_arr_, 0, sizeof(recv_initial_metadata_arr_));
     grpc_op* op = &ops[(*nops)++];
     op->op = GRPC_OP_RECV_INITIAL_METADATA;
-    op->data.recv_initial_metadata = &recv_initial_metadata_arr_;
+    op->data.recv_initial_metadata.recv_initial_metadata =
+        &recv_initial_metadata_arr_;
     op->flags = 0;
     op->reserved = NULL;
   }
diff --git a/include/grpc/impl/codegen/grpc_types.h b/include/grpc/impl/codegen/grpc_types.h
index ee8101aab8d..8d20f705eee 100644
--- a/include/grpc/impl/codegen/grpc_types.h
+++ b/include/grpc/impl/codegen/grpc_types.h
@@ -418,7 +418,9 @@ typedef struct grpc_op {
         grpc_compression_level level;
       } maybe_compression_level;
     } send_initial_metadata;
-    struct grpc_byte_buffer *send_message;
+    struct {
+      struct grpc_byte_buffer *send_message;
+    } send_message;
     struct {
       size_t trailing_metadata_count;
       grpc_metadata *trailing_metadata;
@@ -430,11 +432,15 @@ typedef struct grpc_op {
         object, recv_initial_metadata->array is owned by the caller).
         After the operation completes, call grpc_metadata_array_destroy on this
         value, or reuse it in a future op. */
-    grpc_metadata_array *recv_initial_metadata;
+    struct {
+      grpc_metadata_array *recv_initial_metadata;
+    } recv_initial_metadata;
     /** ownership of the byte buffer is moved to the caller; the caller must
         call grpc_byte_buffer_destroy on this value, or reuse it in a future op.
        */
-    struct grpc_byte_buffer **recv_message;
+    struct {
+      struct grpc_byte_buffer **recv_message;
+    } recv_message;
     struct {
       /** ownership of the array is with the caller, but ownership of the
           elements stays with the call object (ie key, value members are owned
diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c
index 97f98df03af..567e65ac69e 100644
--- a/src/core/ext/lb_policy/grpclb/grpclb.c
+++ b/src/core/ext/lb_policy/grpclb/grpclb.c
@@ -1178,14 +1178,15 @@ static void query_for_backends_locked(grpc_exec_ctx *exec_ctx,
   op++;
 
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &glb_policy->lb_initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata =
+      &glb_policy->lb_initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
 
   GPR_ASSERT(glb_policy->lb_request_payload != NULL);
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = glb_policy->lb_request_payload;
+  op->data.send_message.send_message = glb_policy->lb_request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -1211,7 +1212,7 @@ static void query_for_backends_locked(grpc_exec_ctx *exec_ctx,
 
   op = ops;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &glb_policy->lb_response_payload;
+  op->data.recv_message.recv_message = &glb_policy->lb_response_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -1293,7 +1294,7 @@ static void lb_on_response_received(grpc_exec_ctx *exec_ctx, void *arg,
     if (!glb_policy->shutting_down) {
       /* keep listening for serverlist updates */
       op->op = GRPC_OP_RECV_MESSAGE;
-      op->data.recv_message = &glb_policy->lb_response_payload;
+      op->data.recv_message.recv_message = &glb_policy->lb_response_payload;
       op->flags = 0;
       op->reserved = NULL;
       op++;
diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c
index 899e8fab3f6..8de0b41fa43 100644
--- a/src/core/lib/surface/call.c
+++ b/src/core/lib/surface/call.c
@@ -1461,7 +1461,7 @@ static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx,
           error = GRPC_CALL_ERROR_INVALID_FLAGS;
           goto done_with_error;
         }
-        if (op->data.send_message == NULL) {
+        if (op->data.send_message.send_message == NULL) {
           error = GRPC_CALL_ERROR_INVALID_MESSAGE;
           goto done_with_error;
         }
@@ -1473,11 +1473,13 @@ static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx,
         call->sending_message = 1;
         grpc_slice_buffer_stream_init(
             &call->sending_stream,
-            &op->data.send_message->data.raw.slice_buffer, op->flags);
+            &op->data.send_message.send_message->data.raw.slice_buffer,
+            op->flags);
         /* If the outgoing buffer is already compressed, mark it as so in the
            flags. These will be picked up by the compression filter and further
            (wasteful) attempts at compression skipped. */
-        if (op->data.send_message->data.raw.compression > GRPC_COMPRESS_NONE) {
+        if (op->data.send_message.send_message->data.raw.compression
+            > GRPC_COMPRESS_NONE) {
           call->sending_stream.base.flags |= GRPC_WRITE_INTERNAL_COMPRESS;
         }
         stream_op->send_message = &call->sending_stream.base;
@@ -1565,7 +1567,8 @@ static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx,
            that case we're not necessarily covered by a poller. */
         stream_op->covered_by_poller = call->is_client;
         call->received_initial_metadata = 1;
-        call->buffered_metadata[0] = op->data.recv_initial_metadata;
+        call->buffered_metadata[0] =
+            op->data.recv_initial_metadata.recv_initial_metadata;
         grpc_closure_init(&call->receiving_initial_metadata_ready,
                           receiving_initial_metadata_ready, bctl,
                           grpc_schedule_on_exec_ctx);
@@ -1588,7 +1591,7 @@ static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx,
         }
         call->receiving_message = 1;
         bctl->recv_message = 1;
-        call->receiving_buffer = op->data.recv_message;
+        call->receiving_buffer = op->data.recv_message.recv_message;
         stream_op->recv_message = &call->receiving_stream;
         grpc_closure_init(&call->receiving_stream_ready, receiving_stream_ready,
                           bctl, grpc_schedule_on_exec_ctx);
diff --git a/src/core/lib/surface/call_log_batch.c b/src/core/lib/surface/call_log_batch.c
index 31c074f15dc..61b73a138f2 100644
--- a/src/core/lib/surface/call_log_batch.c
+++ b/src/core/lib/surface/call_log_batch.c
@@ -63,7 +63,8 @@ char *grpc_op_string(const grpc_op *op) {
                    op->data.send_initial_metadata.count);
       break;
     case GRPC_OP_SEND_MESSAGE:
-      gpr_asprintf(&tmp, "SEND_MESSAGE ptr=%p", op->data.send_message);
+      gpr_asprintf(&tmp, "SEND_MESSAGE ptr=%p",
+                   op->data.send_message.send_message);
       gpr_strvec_add(&b, tmp);
       break;
     case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
@@ -79,11 +80,12 @@ char *grpc_op_string(const grpc_op *op) {
       break;
     case GRPC_OP_RECV_INITIAL_METADATA:
       gpr_asprintf(&tmp, "RECV_INITIAL_METADATA ptr=%p",
-                   op->data.recv_initial_metadata);
+                   op->data.recv_initial_metadata.recv_initial_metadata);
       gpr_strvec_add(&b, tmp);
       break;
     case GRPC_OP_RECV_MESSAGE:
-      gpr_asprintf(&tmp, "RECV_MESSAGE ptr=%p", op->data.recv_message);
+      gpr_asprintf(&tmp, "RECV_MESSAGE ptr=%p",
+                   op->data.recv_message.recv_message);
       gpr_strvec_add(&b, tmp);
       break;
     case GRPC_OP_RECV_STATUS_ON_CLIENT:
diff --git a/src/core/lib/surface/server.c b/src/core/lib/surface/server.c
index addb7c4fbc0..9e916465bed 100644
--- a/src/core/lib/surface/server.c
+++ b/src/core/lib/surface/server.c
@@ -609,7 +609,7 @@ static void finish_start_new_rpc(
       grpc_op op;
       memset(&op, 0, sizeof(op));
       op.op = GRPC_OP_RECV_MESSAGE;
-      op.data.recv_message = &calld->payload;
+      op.data.recv_message.recv_message = &calld->payload;
       grpc_closure_init(&calld->publish, publish_new_rpc, elem,
                         grpc_schedule_on_exec_ctx);
       grpc_call_start_batch_and_execute(exec_ctx, calld->call, &op, 1,
@@ -857,7 +857,8 @@ static void accept_stream(grpc_exec_ctx *exec_ctx, void *cd,
   grpc_op op;
   memset(&op, 0, sizeof(op));
   op.op = GRPC_OP_RECV_INITIAL_METADATA;
-  op.data.recv_initial_metadata = &calld->initial_metadata;
+  op.data.recv_initial_metadata.recv_initial_metadata =
+      &calld->initial_metadata;
   grpc_closure_init(&calld->got_initial_metadata, got_initial_metadata, elem,
                     grpc_schedule_on_exec_ctx);
   grpc_call_start_batch_and_execute(exec_ctx, call, &op, 1,
diff --git a/src/csharp/ext/grpc_csharp_ext.c b/src/csharp/ext/grpc_csharp_ext.c
index 946f5872c0e..7239606c645 100644
--- a/src/csharp/ext/grpc_csharp_ext.c
+++ b/src/csharp/ext/grpc_csharp_ext.c
@@ -537,7 +537,7 @@ grpcsharp_call_start_unary(grpc_call *call, grpcsharp_batch_context *ctx,
 
   ops[1].op = GRPC_OP_SEND_MESSAGE;
   ctx->send_message = string_to_byte_buffer(send_buffer, send_buffer_len);
-  ops[1].data.send_message = ctx->send_message;
+  ops[1].data.send_message.send_message = ctx->send_message;
   ops[1].flags = write_flags;
   ops[1].reserved = NULL;
 
@@ -546,12 +546,13 @@ grpcsharp_call_start_unary(grpc_call *call, grpcsharp_batch_context *ctx,
   ops[2].reserved = NULL;
 
   ops[3].op = GRPC_OP_RECV_INITIAL_METADATA;
-  ops[3].data.recv_initial_metadata = &(ctx->recv_initial_metadata);
+  ops[3].data.recv_initial_metadata.recv_initial_metadata =
+      &(ctx->recv_initial_metadata);
   ops[3].flags = 0;
   ops[3].reserved = NULL;
 
   ops[4].op = GRPC_OP_RECV_MESSAGE;
-  ops[4].data.recv_message = &(ctx->recv_message);
+  ops[4].data.recv_message.recv_message = &(ctx->recv_message);
   ops[4].flags = 0;
   ops[4].reserved = NULL;
 
@@ -590,12 +591,13 @@ grpcsharp_call_start_client_streaming(grpc_call *call,
   ops[0].reserved = NULL;
 
   ops[1].op = GRPC_OP_RECV_INITIAL_METADATA;
-  ops[1].data.recv_initial_metadata = &(ctx->recv_initial_metadata);
+  ops[1].data.recv_initial_metadata.recv_initial_metadata =
+      &(ctx->recv_initial_metadata);
   ops[1].flags = 0;
   ops[1].reserved = NULL;
 
   ops[2].op = GRPC_OP_RECV_MESSAGE;
-  ops[2].data.recv_message = &(ctx->recv_message);
+  ops[2].data.recv_message.recv_message = &(ctx->recv_message);
   ops[2].flags = 0;
   ops[2].reserved = NULL;
 
@@ -634,7 +636,7 @@ GPR_EXPORT grpc_call_error GPR_CALLTYPE grpcsharp_call_start_server_streaming(
 
   ops[1].op = GRPC_OP_SEND_MESSAGE;
   ctx->send_message = string_to_byte_buffer(send_buffer, send_buffer_len);
-  ops[1].data.send_message = ctx->send_message;
+  ops[1].data.send_message.send_message = ctx->send_message;
   ops[1].flags = write_flags;
   ops[1].reserved = NULL;
 
@@ -698,7 +700,8 @@ GPR_EXPORT grpc_call_error GPR_CALLTYPE grpcsharp_call_recv_initial_metadata(
   /* TODO: don't use magic number */
   grpc_op ops[1];
   ops[0].op = GRPC_OP_RECV_INITIAL_METADATA;
-  ops[0].data.recv_initial_metadata = &(ctx->recv_initial_metadata);
+  ops[0].data.recv_initial_metadata.recv_initial_metadata =
+      &(ctx->recv_initial_metadata);
   ops[0].flags = 0;
   ops[0].reserved = NULL;
 
@@ -717,7 +720,7 @@ grpcsharp_call_send_message(grpc_call *call, grpcsharp_batch_context *ctx,
   size_t nops = send_empty_initial_metadata ? 2 : 1;
   ops[0].op = GRPC_OP_SEND_MESSAGE;
   ctx->send_message = string_to_byte_buffer(send_buffer, send_buffer_len);
-  ops[0].data.send_message = ctx->send_message;
+  ops[0].data.send_message.send_message = ctx->send_message;
   ops[0].flags = write_flags;
   ops[0].reserved = NULL;
   ops[1].op = GRPC_OP_SEND_INITIAL_METADATA;
@@ -765,7 +768,7 @@ GPR_EXPORT grpc_call_error GPR_CALLTYPE grpcsharp_call_send_status_from_server(
     ops[nops].op = GRPC_OP_SEND_MESSAGE;
     ctx->send_message = string_to_byte_buffer(optional_send_buffer,
                                               optional_send_buffer_len);
-    ops[nops].data.send_message = ctx->send_message;
+    ops[nops].data.send_message.send_message = ctx->send_message;
     ops[nops].flags = write_flags;
     ops[nops].reserved = NULL;
     nops ++;
@@ -784,7 +787,7 @@ grpcsharp_call_recv_message(grpc_call *call, grpcsharp_batch_context *ctx) {
   /* TODO: don't use magic number */
   grpc_op ops[1];
   ops[0].op = GRPC_OP_RECV_MESSAGE;
-  ops[0].data.recv_message = &(ctx->recv_message);
+  ops[0].data.recv_message.recv_message = &(ctx->recv_message);
   ops[0].flags = 0;
   ops[0].reserved = NULL;
   return grpc_call_start_batch(call, ops, sizeof(ops) / sizeof(ops[0]), ctx,
diff --git a/src/node/ext/call.cc b/src/node/ext/call.cc
index 191e763e0e7..96f66a48d29 100644
--- a/src/node/ext/call.cc
+++ b/src/node/ext/call.cc
@@ -262,7 +262,7 @@ class SendMessageOp : public Op {
       }
     }
     send_message = BufferToByteBuffer(value);
-    out->data.send_message = send_message;
+    out->data.send_message.send_message = send_message;
     PersistentValue *handle = new PersistentValue(value);
     resources->handles.push_back(unique_ptr<PersistentValue>(handle));
     return true;
@@ -377,7 +377,7 @@ class GetMetadataOp : public Op {
 
   bool ParseOp(Local<Value> value, grpc_op *out,
                shared_ptr<Resources> resources) {
-    out->data.recv_initial_metadata = &recv_metadata;
+    out->data.recv_initial_metadata.recv_initial_metadata = &recv_metadata;
     return true;
   }
   bool IsFinalOp() {
@@ -410,7 +410,7 @@ class ReadMessageOp : public Op {
 
   bool ParseOp(Local<Value> value, grpc_op *out,
                shared_ptr<Resources> resources) {
-    out->data.recv_message = &recv_message;
+    out->data.recv_message.recv_message = &recv_message;
     return true;
   }
   bool IsFinalOp() {
diff --git a/src/objective-c/GRPCClient/private/GRPCWrappedCall.m b/src/objective-c/GRPCClient/private/GRPCWrappedCall.m
index 38fcae0299d..45d0aae2038 100644
--- a/src/objective-c/GRPCClient/private/GRPCWrappedCall.m
+++ b/src/objective-c/GRPCClient/private/GRPCWrappedCall.m
@@ -105,14 +105,14 @@
   }
   if (self = [super init]) {
     _op.op = GRPC_OP_SEND_MESSAGE;
-    _op.data.send_message = message.grpc_byteBuffer;
+    _op.data.send_message.send_message = message.grpc_byteBuffer;
     _handler = handler;
   }
   return self;
 }
 
 - (void)dealloc {
-  grpc_byte_buffer_destroy(_op.data.send_message);
+  grpc_byte_buffer_destroy(_op.data.send_message.send_message);
 }
 
 @end
@@ -145,7 +145,7 @@
   if (self = [super init]) {
     _op.op = GRPC_OP_RECV_INITIAL_METADATA;
     grpc_metadata_array_init(&_headers);
-    _op.data.recv_initial_metadata = &_headers;
+    _op.data.recv_initial_metadata.recv_initial_metadata = &_headers;
     if (handler) {
       // Prevent reference cycle with _handler
       __weak typeof(self) weakSelf = self;
@@ -177,7 +177,7 @@
 - (instancetype)initWithHandler:(void (^)(grpc_byte_buffer *))handler {
   if (self = [super init]) {
     _op.op = GRPC_OP_RECV_MESSAGE;
-    _op.data.recv_message = &_receivedMessage;
+    _op.data.recv_message.recv_message = &_receivedMessage;
     if (handler) {
       // Prevent reference cycle with _handler
       __weak typeof(self) weakSelf = self;
diff --git a/src/objective-c/tests/CronetUnitTests/CronetUnitTests.m b/src/objective-c/tests/CronetUnitTests/CronetUnitTests.m
index dbd28076ddb..43b91a072b8 100644
--- a/src/objective-c/tests/CronetUnitTests/CronetUnitTests.m
+++ b/src/objective-c/tests/CronetUnitTests/CronetUnitTests.m
@@ -142,7 +142,7 @@ static void drain_cq(grpc_completion_queue *cq) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -151,12 +151,12 @@ static void drain_cq(grpc_completion_queue *cq) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/src/php/ext/grpc/call.c b/src/php/ext/grpc/call.c
index 64b1137c2a4..be11e63d622 100644
--- a/src/php/ext/grpc/call.c
+++ b/src/php/ext/grpc/call.c
@@ -335,7 +335,7 @@ PHP_METHOD(Call, startBatch) {
                              1 TSRMLS_CC);
         goto cleanup;
       }
-      ops[op_num].data.send_message =
+      ops[op_num].data.send_message.send_message =
           string_to_byte_buffer(Z_STRVAL_P(message_value),
                                 Z_STRLEN_P(message_value));
       break;
@@ -390,10 +390,11 @@ PHP_METHOD(Call, startBatch) {
       }
       break;
     case GRPC_OP_RECV_INITIAL_METADATA:
-      ops[op_num].data.recv_initial_metadata = &recv_metadata;
+      ops[op_num].data.recv_initial_metadata.recv_initial_metadata =
+          &recv_metadata;
       break;
     case GRPC_OP_RECV_MESSAGE:
-      ops[op_num].data.recv_message = &message;
+      ops[op_num].data.recv_message.recv_message = &message;
       break;
     case GRPC_OP_RECV_STATUS_ON_CLIENT:
       ops[op_num].data.recv_status_on_client.trailing_metadata =
@@ -498,7 +499,7 @@ cleanup:
   }
   for (int i = 0; i < op_num; i++) {
     if (ops[i].op == GRPC_OP_SEND_MESSAGE) {
-      grpc_byte_buffer_destroy(ops[i].data.send_message);
+      grpc_byte_buffer_destroy(ops[i].data.send_message.send_message);
     }
     if (ops[i].op == GRPC_OP_RECV_MESSAGE) {
       grpc_byte_buffer_destroy(message);
diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi
index 69b837c4dba..e07a2f873c1 100644
--- a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi
@@ -606,7 +606,7 @@ def operation_send_message(data, int flags):
   op.c_op.type = GRPC_OP_SEND_MESSAGE
   op.c_op.flags = flags
   byte_buffer = ByteBuffer(data)
-  op.c_op.data.send_message = byte_buffer.c_byte_buffer
+  op.c_op.data.send_message.send_message = byte_buffer.c_byte_buffer
   op.references.append(byte_buffer)
   op.is_valid = True
   return op
@@ -639,7 +639,7 @@ def operation_receive_initial_metadata(int flags):
   op.c_op.type = GRPC_OP_RECV_INITIAL_METADATA
   op.c_op.flags = flags
   op._received_metadata = Metadata([])
-  op.c_op.data.receive_initial_metadata = (
+  op.c_op.data.recv_initial_metadata.receive_initial_metadata = (
       &op._received_metadata.c_metadata_array)
   op.is_valid = True
   return op
@@ -652,7 +652,8 @@ def operation_receive_message(int flags):
   # n.b. the c_op.data.receive_message field needs to be deleted by us,
   # anyway, so we just let that be handled by the ByteBuffer() we allocated
   # the line before.
-  op.c_op.data.receive_message = &op._received_message.c_byte_buffer
+  op.c_op.data.recv_message.receive_message =
+      &op._received_message.c_byte_buffer
   op.is_valid = True
   return op
 
diff --git a/src/ruby/ext/grpc/rb_call.c b/src/ruby/ext/grpc/rb_call.c
index 67a42af619b..fbc68c4e590 100644
--- a/src/ruby/ext/grpc/rb_call.c
+++ b/src/ruby/ext/grpc/rb_call.c
@@ -641,7 +641,7 @@ static void grpc_run_batch_stack_cleanup(run_batch_stack *st) {
 
   for (i = 0; i < st->op_num; i++) {
     if (st->ops[i].op == GRPC_OP_SEND_MESSAGE) {
-      grpc_byte_buffer_destroy(st->ops[i].data.send_message);
+      grpc_byte_buffer_destroy(st->ops[i].data.send_message.send_message);
     }
   }
 }
@@ -673,8 +673,9 @@ static void grpc_run_batch_stack_fill_ops(run_batch_stack *st, VALUE ops_hash) {
             st->send_metadata.metadata;
         break;
       case GRPC_OP_SEND_MESSAGE:
-        st->ops[st->op_num].data.send_message = grpc_rb_s_to_byte_buffer(
-            RSTRING_PTR(this_value), RSTRING_LEN(this_value));
+        st->ops[st->op_num].data.send_message.send_message =
+            grpc_rb_s_to_byte_buffer(RSTRING_PTR(this_value),
+                                     RSTRING_LEN(this_value));
         st->ops[st->op_num].flags = st->write_flag;
         break;
       case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
@@ -686,10 +687,11 @@ static void grpc_run_batch_stack_fill_ops(run_batch_stack *st, VALUE ops_hash) {
             &st->ops[st->op_num], &st->send_trailing_metadata, this_value);
         break;
       case GRPC_OP_RECV_INITIAL_METADATA:
-        st->ops[st->op_num].data.recv_initial_metadata = &st->recv_metadata;
+        st->ops[st->op_num].data.recv_initial_metadata.recv_initial_metadata =
+            &st->recv_metadata;
         break;
       case GRPC_OP_RECV_MESSAGE:
-        st->ops[st->op_num].data.recv_message = &st->recv_message;
+        st->ops[st->op_num].data.recv_message.recv_message = &st->recv_message;
         break;
       case GRPC_OP_RECV_STATUS_ON_CLIENT:
         st->ops[st->op_num].data.recv_status_on_client.trailing_metadata =

From 835646e9ffcaf3e825aaf538f44c504292480be5 Mon Sep 17 00:00:00 2001
From: "Mark D. Roth" <roth@google.com>
Date: Wed, 25 Jan 2017 12:53:54 -0800
Subject: [PATCH 10/52] Fix tests.

---
 test/core/bad_ssl/bad_ssl_test.c               |  2 +-
 test/core/client_channel/lb_policies_test.c    |  3 ++-
 test/core/end2end/bad_server_response_test.c   |  2 +-
 test/core/end2end/dualstack_socket_test.c      |  2 +-
 test/core/end2end/fixtures/proxy.c             | 15 ++++++++-------
 test/core/end2end/fuzzers/api_fuzzer.c         |  7 ++++---
 test/core/end2end/fuzzers/client_fuzzer.c      |  4 ++--
 test/core/end2end/invalid_call_argument_test.c | 18 ++++++++++--------
 .../end2end/tests/authority_not_supported.c    |  6 +++---
 test/core/end2end/tests/bad_hostname.c         |  2 +-
 test/core/end2end/tests/binary_metadata.c      | 10 +++++-----
 test/core/end2end/tests/call_creds.c           | 16 ++++++++--------
 test/core/end2end/tests/cancel_after_accept.c  | 10 +++++-----
 .../end2end/tests/cancel_after_client_done.c   | 10 +++++-----
 test/core/end2end/tests/cancel_after_invoke.c  |  6 +++---
 test/core/end2end/tests/cancel_before_invoke.c |  6 +++---
 test/core/end2end/tests/cancel_with_status.c   |  2 +-
 test/core/end2end/tests/compressed_payload.c   | 16 ++++++++--------
 test/core/end2end/tests/default_host.c         |  2 +-
 test/core/end2end/tests/disappearing_server.c  |  2 +-
 .../end2end/tests/filter_call_init_fails.c     |  4 ++--
 test/core/end2end/tests/filter_causes_close.c  |  4 ++--
 test/core/end2end/tests/filter_latency.c       |  4 ++--
 .../end2end/tests/graceful_server_shutdown.c   |  2 +-
 test/core/end2end/tests/high_initial_seqno.c   |  2 +-
 test/core/end2end/tests/hpack_size.c           |  2 +-
 test/core/end2end/tests/idempotent_request.c   |  2 +-
 test/core/end2end/tests/invoke_large_request.c | 10 +++++-----
 test/core/end2end/tests/large_metadata.c       |  6 +++---
 test/core/end2end/tests/load_reporting_hook.c  | 10 +++++-----
 .../end2end/tests/max_concurrent_streams.c     |  8 +++++---
 test/core/end2end/tests/max_message_length.c   | 12 ++++++------
 test/core/end2end/tests/negative_deadline.c    |  2 +-
 .../core/end2end/tests/network_status_change.c |  6 +++---
 test/core/end2end/tests/no_logging.c           |  2 +-
 test/core/end2end/tests/payload.c              | 10 +++++-----
 test/core/end2end/tests/ping_pong_streaming.c  | 10 +++++-----
 test/core/end2end/tests/registered_call.c      |  2 +-
 test/core/end2end/tests/request_with_flags.c   |  4 ++--
 test/core/end2end/tests/request_with_payload.c |  6 +++---
 .../core/end2end/tests/resource_quota_server.c |  7 ++++---
 .../end2end/tests/server_finishes_request.c    |  2 +-
 .../end2end/tests/shutdown_finishes_calls.c    |  2 +-
 .../end2end/tests/simple_cacheable_request.c   | 10 +++++-----
 .../end2end/tests/simple_delayed_request.c     |  2 +-
 test/core/end2end/tests/simple_metadata.c      | 10 +++++-----
 test/core/end2end/tests/simple_request.c       |  2 +-
 .../end2end/tests/streaming_error_response.c   | 10 +++++-----
 test/core/end2end/tests/trailing_metadata.c    | 10 +++++-----
 test/core/end2end/tests/write_buffering.c      | 10 +++++-----
 .../end2end/tests/write_buffering_at_end.c     |  8 ++++----
 test/core/fling/client.c                       | 13 +++++++------
 test/core/fling/server.c                       |  8 ++++----
 test/core/memory_usage/client.c                |  8 +++++---
 test/core/memory_usage/server.c                |  4 ++--
 test/core/surface/lame_client_test.c           |  2 +-
 test/cpp/grpclb/grpclb_test.cc                 | 14 +++++++-------
 57 files changed, 191 insertions(+), 180 deletions(-)

diff --git a/test/core/bad_ssl/bad_ssl_test.c b/test/core/bad_ssl/bad_ssl_test.c
index f8a9fe6caca..41b514be1cc 100644
--- a/test/core/bad_ssl/bad_ssl_test.c
+++ b/test/core/bad_ssl/bad_ssl_test.c
@@ -100,7 +100,7 @@ static void run_test(const char *target, size_t nops) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/client_channel/lb_policies_test.c b/test/core/client_channel/lb_policies_test.c
index f46982a3879..a34741ee47a 100644
--- a/test/core/client_channel/lb_policies_test.c
+++ b/test/core/client_channel/lb_policies_test.c
@@ -312,7 +312,8 @@ static request_sequences perform_request(servers_fixture *f,
     op->reserved = NULL;
     op++;
     op->op = GRPC_OP_RECV_INITIAL_METADATA;
-    op->data.recv_initial_metadata = &rdata->initial_metadata_recv;
+    op->data.recv_initial_metadata.recv_initial_metadata =
+        &rdata->initial_metadata_recv;
     op->flags = 0;
     op->reserved = NULL;
     op++;
diff --git a/test/core/end2end/bad_server_response_test.c b/test/core/end2end/bad_server_response_test.c
index a0520168830..d3a47ab34d1 100644
--- a/test/core/end2end/bad_server_response_test.c
+++ b/test/core/end2end/bad_server_response_test.c
@@ -198,7 +198,7 @@ static void start_rpc(int target_port, grpc_status_code expected_status,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/dualstack_socket_test.c b/test/core/end2end/dualstack_socket_test.c
index 11e8604f56a..59079f54453 100644
--- a/test/core/end2end/dualstack_socket_test.c
+++ b/test/core/end2end/dualstack_socket_test.c
@@ -184,7 +184,7 @@ void test_connect(const char *server_host, const char *client_host, int port,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/fixtures/proxy.c b/test/core/end2end/fixtures/proxy.c
index beed80df819..70d8da48aee 100644
--- a/test/core/end2end/fixtures/proxy.c
+++ b/test/core/end2end/fixtures/proxy.c
@@ -203,7 +203,7 @@ static void on_p2s_sent_message(void *arg, int success) {
     op.op = GRPC_OP_RECV_MESSAGE;
     op.flags = 0;
     op.reserved = NULL;
-    op.data.recv_message = &pc->c2p_msg;
+    op.data.recv_message.recv_message = &pc->c2p_msg;
     refpc(pc, "on_c2p_recv_msg");
     err = grpc_call_start_batch(pc->c2p, &op, 1,
                                 new_closure(on_c2p_recv_msg, pc), NULL);
@@ -228,7 +228,7 @@ static void on_c2p_recv_msg(void *arg, int success) {
       op.op = GRPC_OP_SEND_MESSAGE;
       op.flags = 0;
       op.reserved = NULL;
-      op.data.send_message = pc->c2p_msg;
+      op.data.send_message.send_message = pc->c2p_msg;
       refpc(pc, "on_p2s_sent_message");
       err = grpc_call_start_batch(pc->p2s, &op, 1,
                                   new_closure(on_p2s_sent_message, pc), NULL);
@@ -259,7 +259,7 @@ static void on_c2p_sent_message(void *arg, int success) {
     op.op = GRPC_OP_RECV_MESSAGE;
     op.flags = 0;
     op.reserved = NULL;
-    op.data.recv_message = &pc->p2s_msg;
+    op.data.recv_message.recv_message = &pc->p2s_msg;
     refpc(pc, "on_p2s_recv_msg");
     err = grpc_call_start_batch(pc->p2s, &op, 1,
                                 new_closure(on_p2s_recv_msg, pc), NULL);
@@ -278,7 +278,7 @@ static void on_p2s_recv_msg(void *arg, int success) {
     op.op = GRPC_OP_SEND_MESSAGE;
     op.flags = 0;
     op.reserved = NULL;
-    op.data.send_message = pc->p2s_msg;
+    op.data.send_message.send_message = pc->p2s_msg;
     refpc(pc, "on_c2p_sent_message");
     err = grpc_call_start_batch(pc->c2p, &op, 1,
                                 new_closure(on_c2p_sent_message, pc), NULL);
@@ -347,7 +347,8 @@ static void on_new_call(void *arg, int success) {
 
     op.op = GRPC_OP_RECV_INITIAL_METADATA;
     op.flags = 0;
-    op.data.recv_initial_metadata = &pc->p2s_initial_metadata;
+    op.data.recv_initial_metadata.recv_initial_metadata =
+        &pc->p2s_initial_metadata;
     refpc(pc, "on_p2s_recv_initial_metadata");
     err = grpc_call_start_batch(
         pc->p2s, &op, 1, new_closure(on_p2s_recv_initial_metadata, pc), NULL);
@@ -364,7 +365,7 @@ static void on_new_call(void *arg, int success) {
 
     op.op = GRPC_OP_RECV_MESSAGE;
     op.flags = 0;
-    op.data.recv_message = &pc->c2p_msg;
+    op.data.recv_message.recv_message = &pc->c2p_msg;
     refpc(pc, "on_c2p_recv_msg");
     err = grpc_call_start_batch(pc->c2p, &op, 1,
                                 new_closure(on_c2p_recv_msg, pc), NULL);
@@ -372,7 +373,7 @@ static void on_new_call(void *arg, int success) {
 
     op.op = GRPC_OP_RECV_MESSAGE;
     op.flags = 0;
-    op.data.recv_message = &pc->p2s_msg;
+    op.data.recv_message.recv_message = &pc->p2s_msg;
     refpc(pc, "on_p2s_recv_msg");
     err = grpc_call_start_batch(pc->p2s, &op, 1,
                                 new_closure(on_p2s_recv_msg, pc), NULL);
diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c
index 200a51858a0..07f282b5f53 100644
--- a/test/core/end2end/fuzzers/api_fuzzer.c
+++ b/test/core/end2end/fuzzers/api_fuzzer.c
@@ -933,7 +933,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
                 ok = false;
               } else {
                 has_ops |= 1 << GRPC_OP_SEND_MESSAGE;
-                g_active_call->send_message = op->data.send_message =
+                g_active_call->send_message =
+                    op->data.send_message.send_message =
                     read_message(&inp);
               }
               break;
@@ -956,13 +957,13 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
             case GRPC_OP_RECV_INITIAL_METADATA:
               op->op = GRPC_OP_RECV_INITIAL_METADATA;
               has_ops |= 1 << GRPC_OP_RECV_INITIAL_METADATA;
-              op->data.recv_initial_metadata =
+              op->data.recv_initial_metadata.recv_initial_metadata =
                   &g_active_call->recv_initial_metadata;
               break;
             case GRPC_OP_RECV_MESSAGE:
               op->op = GRPC_OP_RECV_MESSAGE;
               has_ops |= 1 << GRPC_OP_RECV_MESSAGE;
-              op->data.recv_message = &g_active_call->recv_message;
+              op->data.recv_message.recv_message = &g_active_call->recv_message;
               break;
             case GRPC_OP_RECV_STATUS_ON_CLIENT:
               op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
diff --git a/test/core/end2end/fuzzers/client_fuzzer.c b/test/core/end2end/fuzzers/client_fuzzer.c
index 26b520885bb..ab708bc7d8e 100644
--- a/test/core/end2end/fuzzers/client_fuzzer.c
+++ b/test/core/end2end/fuzzers/client_fuzzer.c
@@ -97,12 +97,12 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/invalid_call_argument_test.c b/test/core/end2end/invalid_call_argument_test.c
index d974d2c8ff9..5ce7ca0243a 100644
--- a/test/core/end2end/invalid_call_argument_test.c
+++ b/test/core/end2end/invalid_call_argument_test.c
@@ -237,7 +237,7 @@ static void test_send_null_message() {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = NULL;
+  op->data.send_message.send_message = NULL;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -263,12 +263,12 @@ static void test_send_messages_at_the_same_time() {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = tag(2);
+  op->data.send_message.send_message = tag(2);
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -306,7 +306,8 @@ static void test_receive_initial_metadata_twice_at_client() {
   prepare_test(1);
   op = g_state.ops;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &g_state.initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata =
+      &g_state.initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -317,7 +318,8 @@ static void test_receive_initial_metadata_twice_at_client() {
   cq_verify(g_state.cqv);
   op = g_state.ops;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &g_state.initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata =
+      &g_state.initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -335,7 +337,7 @@ static void test_receive_message_with_invalid_flags() {
   prepare_test(1);
   op = g_state.ops;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &payload;
+  op->data.recv_message.recv_message = &payload;
   op->flags = 1;
   op->reserved = NULL;
   op++;
@@ -353,12 +355,12 @@ static void test_receive_two_messages_at_the_same_time() {
   prepare_test(1);
   op = g_state.ops;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &payload;
+  op->data.recv_message.recv_message = &payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &payload;
+  op->data.recv_message.recv_message = &payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/authority_not_supported.c b/test/core/end2end/tests/authority_not_supported.c
index 705970f6cab..b9a1d889a84 100644
--- a/test/core/end2end/tests/authority_not_supported.c
+++ b/test/core/end2end/tests/authority_not_supported.c
@@ -135,7 +135,7 @@ static void test_with_authority_header(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -144,12 +144,12 @@ static void test_with_authority_header(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/bad_hostname.c b/test/core/end2end/tests/bad_hostname.c
index e0c7ac7c021..054a1f446d8 100644
--- a/test/core/end2end/tests/bad_hostname.c
+++ b/test/core/end2end/tests/bad_hostname.c
@@ -133,7 +133,7 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/binary_metadata.c b/test/core/end2end/tests/binary_metadata.c
index dd7a8a9ad38..2b76cc257ac 100644
--- a/test/core/end2end/tests/binary_metadata.c
+++ b/test/core/end2end/tests/binary_metadata.c
@@ -168,7 +168,7 @@ static void test_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -177,12 +177,12 @@ static void test_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -213,7 +213,7 @@ static void test_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv;
+  op->data.recv_message.recv_message = &request_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -231,7 +231,7 @@ static void test_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = response_payload;
+  op->data.send_message.send_message = response_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/call_creds.c b/test/core/end2end/tests/call_creds.c
index 606938fff64..cb0c215db46 100644
--- a/test/core/end2end/tests/call_creds.c
+++ b/test/core/end2end/tests/call_creds.c
@@ -203,7 +203,7 @@ static void request_response_with_payload_and_call_creds(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -212,12 +212,12 @@ static void request_response_with_payload_and_call_creds(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -259,7 +259,7 @@ static void request_response_with_payload_and_call_creds(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv;
+  op->data.recv_message.recv_message = &request_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -277,7 +277,7 @@ static void request_response_with_payload_and_call_creds(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = response_payload;
+  op->data.send_message.send_message = response_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -435,7 +435,7 @@ static void test_request_with_server_rejecting_client_creds(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -444,12 +444,12 @@ static void test_request_with_server_rejecting_client_creds(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/cancel_after_accept.c b/test/core/end2end/tests/cancel_after_accept.c
index a8e310c6835..b14d9daf22f 100644
--- a/test/core/end2end/tests/cancel_after_accept.c
+++ b/test/core/end2end/tests/cancel_after_accept.c
@@ -180,17 +180,17 @@ static void test_cancel_after_accept(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -206,7 +206,7 @@ static void test_cancel_after_accept(grpc_end2end_test_config config,
   memset(ops, 0, sizeof(ops));
   op = ops;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv;
+  op->data.recv_message.recv_message = &request_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -216,7 +216,7 @@ static void test_cancel_after_accept(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = response_payload;
+  op->data.send_message.send_message = response_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/cancel_after_client_done.c b/test/core/end2end/tests/cancel_after_client_done.c
index 7742f9d1798..b713278ae56 100644
--- a/test/core/end2end/tests/cancel_after_client_done.c
+++ b/test/core/end2end/tests/cancel_after_client_done.c
@@ -154,7 +154,7 @@ static void test_cancel_after_accept_and_writes_closed(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -163,12 +163,12 @@ static void test_cancel_after_accept_and_writes_closed(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -184,7 +184,7 @@ static void test_cancel_after_accept_and_writes_closed(
   memset(ops, 0, sizeof(ops));
   op = ops;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv;
+  op->data.recv_message.recv_message = &request_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -199,7 +199,7 @@ static void test_cancel_after_accept_and_writes_closed(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = response_payload;
+  op->data.send_message.send_message = response_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/cancel_after_invoke.c b/test/core/end2end/tests/cancel_after_invoke.c
index c3c5418f207..b68f3245b30 100644
--- a/test/core/end2end/tests/cancel_after_invoke.c
+++ b/test/core/end2end/tests/cancel_after_invoke.c
@@ -148,7 +148,7 @@ static void test_cancel_after_invoke(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -157,12 +157,12 @@ static void test_cancel_after_invoke(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/cancel_before_invoke.c b/test/core/end2end/tests/cancel_before_invoke.c
index d4842829c0a..9174fcb6557 100644
--- a/test/core/end2end/tests/cancel_before_invoke.c
+++ b/test/core/end2end/tests/cancel_before_invoke.c
@@ -148,7 +148,7 @@ static void test_cancel_before_invoke(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -157,12 +157,12 @@ static void test_cancel_before_invoke(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/cancel_with_status.c b/test/core/end2end/tests/cancel_with_status.c
index 3aecaf71598..071c07887cc 100644
--- a/test/core/end2end/tests/cancel_with_status.c
+++ b/test/core/end2end/tests/cancel_with_status.c
@@ -133,7 +133,7 @@ static void simple_request_body(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/compressed_payload.c b/test/core/end2end/tests/compressed_payload.c
index d7efe7747bf..f3b06253806 100644
--- a/test/core/end2end/tests/compressed_payload.c
+++ b/test/core/end2end/tests/compressed_payload.c
@@ -174,7 +174,7 @@ static void request_for_disabled_algorithm(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = send_flags_bitmask;
   op->reserved = NULL;
   op++;
@@ -183,7 +183,7 @@ static void request_for_disabled_algorithm(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -212,7 +212,7 @@ static void request_for_disabled_algorithm(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv;
+  op->data.recv_message.recv_message = &request_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -354,7 +354,7 @@ static void request_with_payload_template(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -412,12 +412,12 @@ static void request_with_payload_template(
     memset(ops, 0, sizeof(ops));
     op = ops;
     op->op = GRPC_OP_SEND_MESSAGE;
-    op->data.send_message = request_payload;
+    op->data.send_message.send_message = request_payload;
     op->flags = client_send_flags_bitmask;
     op->reserved = NULL;
     op++;
     op->op = GRPC_OP_RECV_MESSAGE;
-    op->data.recv_message = &response_payload_recv;
+    op->data.recv_message.recv_message = &response_payload_recv;
     op->flags = 0;
     op->reserved = NULL;
     op++;
@@ -427,7 +427,7 @@ static void request_with_payload_template(
     memset(ops, 0, sizeof(ops));
     op = ops;
     op->op = GRPC_OP_RECV_MESSAGE;
-    op->data.recv_message = &request_payload_recv;
+    op->data.recv_message.recv_message = &request_payload_recv;
     op->flags = 0;
     op->reserved = NULL;
     op++;
@@ -444,7 +444,7 @@ static void request_with_payload_template(
     memset(ops, 0, sizeof(ops));
     op = ops;
     op->op = GRPC_OP_SEND_MESSAGE;
-    op->data.send_message = response_payload;
+    op->data.send_message.send_message = response_payload;
     op->flags = 0;
     op->reserved = NULL;
     op++;
diff --git a/test/core/end2end/tests/default_host.c b/test/core/end2end/tests/default_host.c
index 208e31697e6..21dd04f0693 100644
--- a/test/core/end2end/tests/default_host.c
+++ b/test/core/end2end/tests/default_host.c
@@ -141,7 +141,7 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/disappearing_server.c b/test/core/end2end/tests/disappearing_server.c
index 8ebf7e643e0..4fa06755e51 100644
--- a/test/core/end2end/tests/disappearing_server.c
+++ b/test/core/end2end/tests/disappearing_server.c
@@ -120,7 +120,7 @@ static void do_request_and_shutdown_server(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/filter_call_init_fails.c b/test/core/end2end/tests/filter_call_init_fails.c
index ac9d2dd2fe8..1ecf1ef2a86 100644
--- a/test/core/end2end/tests/filter_call_init_fails.c
+++ b/test/core/end2end/tests/filter_call_init_fails.c
@@ -148,7 +148,7 @@ static void test_request(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -157,7 +157,7 @@ static void test_request(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/filter_causes_close.c b/test/core/end2end/tests/filter_causes_close.c
index 45f623c5c7b..0991431eace 100644
--- a/test/core/end2end/tests/filter_causes_close.c
+++ b/test/core/end2end/tests/filter_causes_close.c
@@ -144,7 +144,7 @@ static void test_request(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -153,7 +153,7 @@ static void test_request(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/filter_latency.c b/test/core/end2end/tests/filter_latency.c
index dbb5c8dcd9d..5f412e1f1cc 100644
--- a/test/core/end2end/tests/filter_latency.c
+++ b/test/core/end2end/tests/filter_latency.c
@@ -156,7 +156,7 @@ static void test_request(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -165,7 +165,7 @@ static void test_request(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/graceful_server_shutdown.c b/test/core/end2end/tests/graceful_server_shutdown.c
index 5fecadbe441..172618e1df3 100644
--- a/test/core/end2end/tests/graceful_server_shutdown.c
+++ b/test/core/end2end/tests/graceful_server_shutdown.c
@@ -135,7 +135,7 @@ static void test_early_server_shutdown_finishes_inflight_calls(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/high_initial_seqno.c b/test/core/end2end/tests/high_initial_seqno.c
index 01a4909ccdb..bb981f7fb50 100644
--- a/test/core/end2end/tests/high_initial_seqno.c
+++ b/test/core/end2end/tests/high_initial_seqno.c
@@ -140,7 +140,7 @@ static void simple_request_body(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/hpack_size.c b/test/core/end2end/tests/hpack_size.c
index cec8b2faae1..ccb8f71e4c9 100644
--- a/test/core/end2end/tests/hpack_size.c
+++ b/test/core/end2end/tests/hpack_size.c
@@ -293,7 +293,7 @@ static void simple_request_body(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/idempotent_request.c b/test/core/end2end/tests/idempotent_request.c
index 4f6d3bb808c..475303e1807 100644
--- a/test/core/end2end/tests/idempotent_request.c
+++ b/test/core/end2end/tests/idempotent_request.c
@@ -144,7 +144,7 @@ static void simple_request_body(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/invoke_large_request.c b/test/core/end2end/tests/invoke_large_request.c
index 24abfa2ea0d..10459a35c49 100644
--- a/test/core/end2end/tests/invoke_large_request.c
+++ b/test/core/end2end/tests/invoke_large_request.c
@@ -163,7 +163,7 @@ static void test_invoke_large_request(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -172,12 +172,12 @@ static void test_invoke_large_request(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -207,7 +207,7 @@ static void test_invoke_large_request(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv;
+  op->data.recv_message.recv_message = &request_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -225,7 +225,7 @@ static void test_invoke_large_request(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = response_payload;
+  op->data.send_message.send_message = response_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/large_metadata.c b/test/core/end2end/tests/large_metadata.c
index 69b4b24b061..2a7f49ccfea 100644
--- a/test/core/end2end/tests/large_metadata.c
+++ b/test/core/end2end/tests/large_metadata.c
@@ -153,7 +153,7 @@ static void test_request_with_large_metadata(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -162,7 +162,7 @@ static void test_request_with_large_metadata(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -194,7 +194,7 @@ static void test_request_with_large_metadata(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv;
+  op->data.recv_message.recv_message = &request_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/load_reporting_hook.c b/test/core/end2end/tests/load_reporting_hook.c
index ae5c2706299..c8de0697048 100644
--- a/test/core/end2end/tests/load_reporting_hook.c
+++ b/test/core/end2end/tests/load_reporting_hook.c
@@ -171,7 +171,7 @@ static void request_response_with_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -180,12 +180,12 @@ static void request_response_with_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -215,7 +215,7 @@ static void request_response_with_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv;
+  op->data.recv_message.recv_message = &request_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -233,7 +233,7 @@ static void request_response_with_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = response_payload;
+  op->data.send_message.send_message = response_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/max_concurrent_streams.c b/test/core/end2end/tests/max_concurrent_streams.c
index 9338bc5f0d7..45821789588 100644
--- a/test/core/end2end/tests/max_concurrent_streams.c
+++ b/test/core/end2end/tests/max_concurrent_streams.c
@@ -136,7 +136,7 @@ static void simple_request_body(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -300,7 +300,8 @@ static void test_max_concurrent_streams(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv1;
+  op->data.recv_initial_metadata.recv_initial_metadata =
+      &initial_metadata_recv1;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -332,7 +333,8 @@ static void test_max_concurrent_streams(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv1;
+  op->data.recv_initial_metadata.recv_initial_metadata =
+      &initial_metadata_recv1;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/max_message_length.c b/test/core/end2end/tests/max_message_length.c
index 4a6ef44bb32..57d4f1c1975 100644
--- a/test/core/end2end/tests/max_message_length.c
+++ b/test/core/end2end/tests/max_message_length.c
@@ -196,7 +196,7 @@ static void test_max_message_length_on_request(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -205,7 +205,7 @@ static void test_max_message_length_on_request(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -241,7 +241,7 @@ static void test_max_message_length_on_request(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &recv_payload;
+  op->data.recv_message.recv_message = &recv_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -376,12 +376,12 @@ static void test_max_message_length_on_response(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &recv_payload;
+  op->data.recv_message.recv_message = &recv_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -416,7 +416,7 @@ static void test_max_message_length_on_response(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = response_payload;
+  op->data.send_message.send_message = response_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/negative_deadline.c b/test/core/end2end/tests/negative_deadline.c
index 929777d39ef..61a985819e8 100644
--- a/test/core/end2end/tests/negative_deadline.c
+++ b/test/core/end2end/tests/negative_deadline.c
@@ -133,7 +133,7 @@ static void simple_request_body(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/network_status_change.c b/test/core/end2end/tests/network_status_change.c
index 2ebda2ccb85..dc855b7940c 100644
--- a/test/core/end2end/tests/network_status_change.c
+++ b/test/core/end2end/tests/network_status_change.c
@@ -142,7 +142,7 @@ static void test_invoke_network_status_change(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -151,7 +151,7 @@ static void test_invoke_network_status_change(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -179,7 +179,7 @@ static void test_invoke_network_status_change(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv;
+  op->data.recv_message.recv_message = &request_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/no_logging.c b/test/core/end2end/tests/no_logging.c
index 54614cb0291..497ed05cac2 100644
--- a/test/core/end2end/tests/no_logging.c
+++ b/test/core/end2end/tests/no_logging.c
@@ -171,7 +171,7 @@ static void simple_request_body(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/payload.c b/test/core/end2end/tests/payload.c
index 4a88c5f2a81..e39b513ffd1 100644
--- a/test/core/end2end/tests/payload.c
+++ b/test/core/end2end/tests/payload.c
@@ -161,7 +161,7 @@ static void request_response_with_payload(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -170,12 +170,12 @@ static void request_response_with_payload(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -205,7 +205,7 @@ static void request_response_with_payload(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv;
+  op->data.recv_message.recv_message = &request_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -223,7 +223,7 @@ static void request_response_with_payload(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = response_payload;
+  op->data.send_message.send_message = response_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/ping_pong_streaming.c b/test/core/end2end/tests/ping_pong_streaming.c
index 0a1566e9c25..bd6b53ff19f 100644
--- a/test/core/end2end/tests/ping_pong_streaming.c
+++ b/test/core/end2end/tests/ping_pong_streaming.c
@@ -144,7 +144,7 @@ static void test_pingpong_streaming(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -188,12 +188,12 @@ static void test_pingpong_streaming(grpc_end2end_test_config config,
     memset(ops, 0, sizeof(ops));
     op = ops;
     op->op = GRPC_OP_SEND_MESSAGE;
-    op->data.send_message = request_payload;
+    op->data.send_message.send_message = request_payload;
     op->flags = 0;
     op->reserved = NULL;
     op++;
     op->op = GRPC_OP_RECV_MESSAGE;
-    op->data.recv_message = &response_payload_recv;
+    op->data.recv_message.recv_message = &response_payload_recv;
     op->flags = 0;
     op->reserved = NULL;
     op++;
@@ -203,7 +203,7 @@ static void test_pingpong_streaming(grpc_end2end_test_config config,
     memset(ops, 0, sizeof(ops));
     op = ops;
     op->op = GRPC_OP_RECV_MESSAGE;
-    op->data.recv_message = &request_payload_recv;
+    op->data.recv_message.recv_message = &request_payload_recv;
     op->flags = 0;
     op->reserved = NULL;
     op++;
@@ -215,7 +215,7 @@ static void test_pingpong_streaming(grpc_end2end_test_config config,
     memset(ops, 0, sizeof(ops));
     op = ops;
     op->op = GRPC_OP_SEND_MESSAGE;
-    op->data.send_message = response_payload;
+    op->data.send_message.send_message = response_payload;
     op->flags = 0;
     op->reserved = NULL;
     op++;
diff --git a/test/core/end2end/tests/registered_call.c b/test/core/end2end/tests/registered_call.c
index 6594b420b9d..ea1b4cf5244 100644
--- a/test/core/end2end/tests/registered_call.c
+++ b/test/core/end2end/tests/registered_call.c
@@ -136,7 +136,7 @@ static void simple_request_body(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/request_with_flags.c b/test/core/end2end/tests/request_with_flags.c
index 9c18e155f32..bafe6f605a2 100644
--- a/test/core/end2end/tests/request_with_flags.c
+++ b/test/core/end2end/tests/request_with_flags.c
@@ -140,7 +140,7 @@ static void test_invoke_request_with_flags(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = flags_for_op[op->op];
   op->reserved = NULL;
   op++;
@@ -149,7 +149,7 @@ static void test_invoke_request_with_flags(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = flags_for_op[op->op];
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/request_with_payload.c b/test/core/end2end/tests/request_with_payload.c
index c84e3ac5b50..58f7279b0d2 100644
--- a/test/core/end2end/tests/request_with_payload.c
+++ b/test/core/end2end/tests/request_with_payload.c
@@ -139,7 +139,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -148,7 +148,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -177,7 +177,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv;
+  op->data.recv_message.recv_message = &request_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/resource_quota_server.c b/test/core/end2end/tests/resource_quota_server.c
index c919faea89f..96abc1cc764 100644
--- a/test/core/end2end/tests/resource_quota_server.c
+++ b/test/core/end2end/tests/resource_quota_server.c
@@ -201,7 +201,7 @@ void resource_quota_server(grpc_end2end_test_config config) {
     op->reserved = NULL;
     op++;
     op->op = GRPC_OP_SEND_MESSAGE;
-    op->data.send_message = request_payload;
+    op->data.send_message.send_message = request_payload;
     op->flags = 0;
     op->reserved = NULL;
     op++;
@@ -210,7 +210,8 @@ void resource_quota_server(grpc_end2end_test_config config) {
     op->reserved = NULL;
     op++;
     op->op = GRPC_OP_RECV_INITIAL_METADATA;
-    op->data.recv_initial_metadata = &initial_metadata_recv[i];
+    op->data.recv_initial_metadata.recv_initial_metadata =
+        &initial_metadata_recv[i];
     op->flags = 0;
     op->reserved = NULL;
     op++;
@@ -277,7 +278,7 @@ void resource_quota_server(grpc_end2end_test_config config) {
       op->reserved = NULL;
       op++;
       op->op = GRPC_OP_RECV_MESSAGE;
-      op->data.recv_message = &request_payload_recv[call_id];
+      op->data.recv_message.recv_message = &request_payload_recv[call_id];
       op->flags = 0;
       op->reserved = NULL;
       op++;
diff --git a/test/core/end2end/tests/server_finishes_request.c b/test/core/end2end/tests/server_finishes_request.c
index 3bb25fd9242..6541815125a 100644
--- a/test/core/end2end/tests/server_finishes_request.c
+++ b/test/core/end2end/tests/server_finishes_request.c
@@ -134,7 +134,7 @@ static void simple_request_body(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/shutdown_finishes_calls.c b/test/core/end2end/tests/shutdown_finishes_calls.c
index b80a2e35f23..608e97e3387 100644
--- a/test/core/end2end/tests/shutdown_finishes_calls.c
+++ b/test/core/end2end/tests/shutdown_finishes_calls.c
@@ -128,7 +128,7 @@ static void test_early_server_shutdown_finishes_inflight_calls(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/simple_cacheable_request.c b/test/core/end2end/tests/simple_cacheable_request.c
index 2c229b08fe9..269a40de9c7 100644
--- a/test/core/end2end/tests/simple_cacheable_request.c
+++ b/test/core/end2end/tests/simple_cacheable_request.c
@@ -155,7 +155,7 @@ static void test_cacheable_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -164,12 +164,12 @@ static void test_cacheable_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -200,7 +200,7 @@ static void test_cacheable_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv;
+  op->data.recv_message.recv_message = &request_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -218,7 +218,7 @@ static void test_cacheable_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = response_payload;
+  op->data.send_message.send_message = response_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/simple_delayed_request.c b/test/core/end2end/tests/simple_delayed_request.c
index 414a03d98bb..be9f9bffac1 100644
--- a/test/core/end2end/tests/simple_delayed_request.c
+++ b/test/core/end2end/tests/simple_delayed_request.c
@@ -129,7 +129,7 @@ static void simple_delayed_request_body(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/simple_metadata.c b/test/core/end2end/tests/simple_metadata.c
index 5490cc2b75f..c9e571e6554 100644
--- a/test/core/end2end/tests/simple_metadata.c
+++ b/test/core/end2end/tests/simple_metadata.c
@@ -152,7 +152,7 @@ static void test_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -161,12 +161,12 @@ static void test_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -197,7 +197,7 @@ static void test_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv;
+  op->data.recv_message.recv_message = &request_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -215,7 +215,7 @@ static void test_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = response_payload;
+  op->data.send_message.send_message = response_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/simple_request.c b/test/core/end2end/tests/simple_request.c
index 2dea5d6af2e..787ad400571 100644
--- a/test/core/end2end/tests/simple_request.c
+++ b/test/core/end2end/tests/simple_request.c
@@ -144,7 +144,7 @@ static void simple_request_body(grpc_end2end_test_config config,
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/streaming_error_response.c b/test/core/end2end/tests/streaming_error_response.c
index 583bc9268f4..6fc6d759112 100644
--- a/test/core/end2end/tests/streaming_error_response.c
+++ b/test/core/end2end/tests/streaming_error_response.c
@@ -144,10 +144,10 @@ static void test(grpc_end2end_test_config config, bool request_status_early) {
   op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload1_recv;
+  op->data.recv_message.recv_message = &response_payload1_recv;
   op++;
   if (request_status_early) {
     op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
@@ -172,7 +172,7 @@ static void test(grpc_end2end_test_config config, bool request_status_early) {
   op->data.send_initial_metadata.count = 0;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = response_payload1;
+  op->data.send_message.send_message = response_payload1;
   op++;
   error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(102), NULL);
   GPR_ASSERT(GRPC_CALL_OK == error);
@@ -183,7 +183,7 @@ static void test(grpc_end2end_test_config config, bool request_status_early) {
   memset(ops, 0, sizeof(ops));
   op = ops;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = response_payload2;
+  op->data.send_message.send_message = response_payload2;
   op++;
   error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
   GPR_ASSERT(GRPC_CALL_OK == error);
@@ -211,7 +211,7 @@ static void test(grpc_end2end_test_config config, bool request_status_early) {
     memset(ops, 0, sizeof(ops));
     op = ops;
     op->op = GRPC_OP_RECV_MESSAGE;
-    op->data.recv_message = &response_payload2_recv;
+    op->data.recv_message.recv_message = &response_payload2_recv;
     op++;
     error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(2), NULL);
     GPR_ASSERT(GRPC_CALL_OK == error);
diff --git a/test/core/end2end/tests/trailing_metadata.c b/test/core/end2end/tests/trailing_metadata.c
index 9fd4fbc052f..a44ed77a826 100644
--- a/test/core/end2end/tests/trailing_metadata.c
+++ b/test/core/end2end/tests/trailing_metadata.c
@@ -155,7 +155,7 @@ static void test_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -164,12 +164,12 @@ static void test_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -200,7 +200,7 @@ static void test_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv;
+  op->data.recv_message.recv_message = &request_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -218,7 +218,7 @@ static void test_request_response_with_metadata_and_payload(
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = response_payload;
+  op->data.send_message.send_message = response_payload;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/core/end2end/tests/write_buffering.c b/test/core/end2end/tests/write_buffering.c
index 856e9f0306f..ee95338de1e 100644
--- a/test/core/end2end/tests/write_buffering.c
+++ b/test/core/end2end/tests/write_buffering.c
@@ -146,7 +146,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
   memset(ops, 0, sizeof(ops));
   op = ops;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -163,7 +163,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
   memset(ops, 0, sizeof(ops));
   op = ops;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload1;
+  op->data.send_message.send_message = request_payload1;
   op->flags = GRPC_WRITE_BUFFER_HINT;
   op++;
   error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(3), NULL);
@@ -181,7 +181,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
   memset(ops, 0, sizeof(ops));
   op = ops;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv1;
+  op->data.recv_message.recv_message = &request_payload_recv1;
   op++;
   error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
   GPR_ASSERT(GRPC_CALL_OK == error);
@@ -195,7 +195,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
   memset(ops, 0, sizeof(ops));
   op = ops;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload2;
+  op->data.send_message.send_message = request_payload2;
   op->flags = 0;
   op++;
   error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(4), NULL);
@@ -210,7 +210,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
   memset(ops, 0, sizeof(ops));
   op = ops;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv2;
+  op->data.recv_message.recv_message = &request_payload_recv2;
   op++;
   error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(104), NULL);
   GPR_ASSERT(GRPC_CALL_OK == error);
diff --git a/test/core/end2end/tests/write_buffering_at_end.c b/test/core/end2end/tests/write_buffering_at_end.c
index 43aefcbdbcc..9b203ea2628 100644
--- a/test/core/end2end/tests/write_buffering_at_end.c
+++ b/test/core/end2end/tests/write_buffering_at_end.c
@@ -143,7 +143,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
   memset(ops, 0, sizeof(ops));
   op = ops;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -160,7 +160,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
   memset(ops, 0, sizeof(ops));
   op = ops;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = request_payload;
+  op->data.send_message.send_message = request_payload;
   op->flags = GRPC_WRITE_BUFFER_HINT;
   op++;
   error = grpc_call_start_batch(c, ops, (size_t)(op - ops), tag(3), NULL);
@@ -178,7 +178,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
   memset(ops, 0, sizeof(ops));
   op = ops;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv1;
+  op->data.recv_message.recv_message = &request_payload_recv1;
   op++;
   error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(103), NULL);
   GPR_ASSERT(GRPC_CALL_OK == error);
@@ -205,7 +205,7 @@ static void test_invoke_request_with_payload(grpc_end2end_test_config config) {
   memset(ops, 0, sizeof(ops));
   op = ops;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv2;
+  op->data.recv_message.recv_message = &request_payload_recv2;
   op++;
   error = grpc_call_start_batch(s, ops, (size_t)(op - ops), tag(104), NULL);
   GPR_ASSERT(GRPC_CALL_OK == error);
diff --git a/test/core/fling/client.c b/test/core/fling/client.c
index e717b7f7fed..e1a4630094b 100644
--- a/test/core/fling/client.c
+++ b/test/core/fling/client.c
@@ -72,15 +72,15 @@ static void init_ping_pong_request(void) {
   op->data.send_initial_metadata.count = 0;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
-  op->data.send_message = the_buffer;
+  op->data.send_message.send_message = the_buffer;
   op++;
   op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op++;
   op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
   op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv;
@@ -115,7 +115,8 @@ static void init_ping_pong_stream(void) {
   stream_init_ops[0].op = GRPC_OP_SEND_INITIAL_METADATA;
   stream_init_ops[0].data.send_initial_metadata.count = 0;
   stream_init_ops[1].op = GRPC_OP_RECV_INITIAL_METADATA;
-  stream_init_ops[1].data.recv_initial_metadata = &initial_metadata_recv;
+  stream_init_ops[1].data.recv_initial_metadata.recv_initial_metadata =
+      &initial_metadata_recv;
   error = grpc_call_start_batch(call, stream_init_ops, 2, (void *)1, NULL);
   GPR_ASSERT(GRPC_CALL_OK == error);
   grpc_completion_queue_next(cq, gpr_inf_future(GPR_CLOCK_REALTIME), NULL);
@@ -123,9 +124,9 @@ static void init_ping_pong_stream(void) {
   grpc_metadata_array_init(&initial_metadata_recv);
 
   stream_step_ops[0].op = GRPC_OP_SEND_MESSAGE;
-  stream_step_ops[0].data.send_message = the_buffer;
+  stream_step_ops[0].data.send_message.send_message = the_buffer;
   stream_step_ops[1].op = GRPC_OP_RECV_MESSAGE;
-  stream_step_ops[1].data.recv_message = &response_payload_recv;
+  stream_step_ops[1].data.recv_message.recv_message = &response_payload_recv;
 }
 
 static void step_ping_pong_stream(void) {
diff --git a/test/core/fling/server.c b/test/core/fling/server.c
index fd446f1128e..79e5e352115 100644
--- a/test/core/fling/server.c
+++ b/test/core/fling/server.c
@@ -107,13 +107,13 @@ static void handle_unary_method(void) {
   op->data.send_initial_metadata.count = 0;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &terminal_buffer;
+  op->data.recv_message.recv_message = &terminal_buffer;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
   if (payload_buffer == NULL) {
     gpr_log(GPR_INFO, "NULL payload buffer !!!");
   }
-  op->data.send_message = payload_buffer;
+  op->data.send_message.send_message = payload_buffer;
   op++;
   op->op = GRPC_OP_SEND_STATUS_FROM_SERVER;
   op->data.send_status_from_server.status = GRPC_STATUS_OK;
@@ -144,7 +144,7 @@ static void start_read_op(int t) {
   grpc_call_error error;
   /* Starting read at server */
   read_op.op = GRPC_OP_RECV_MESSAGE;
-  read_op.data.recv_message = &payload_buffer;
+  read_op.data.recv_message.recv_message = &payload_buffer;
   error = grpc_call_start_batch(call, &read_op, 1, tag(t), NULL);
   GPR_ASSERT(GRPC_CALL_OK == error);
 }
@@ -157,7 +157,7 @@ static void start_write_op(void) {
   if (payload_buffer == NULL) {
     gpr_log(GPR_INFO, "NULL payload buffer !!!");
   }
-  write_op.data.send_message = payload_buffer;
+  write_op.data.send_message.send_message = payload_buffer;
   error = grpc_call_start_batch(call, &write_op, 1, tagarg, NULL);
   GPR_ASSERT(GRPC_CALL_OK == error);
 }
diff --git a/test/core/memory_usage/client.c b/test/core/memory_usage/client.c
index f4432bf5727..827a39540dc 100644
--- a/test/core/memory_usage/client.c
+++ b/test/core/memory_usage/client.c
@@ -82,7 +82,8 @@ static void init_ping_pong_request(int call_idx) {
   op->flags = GRPC_INITIAL_METADATA_WAIT_FOR_READY;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &calls[call_idx].initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata =
+      &calls[call_idx].initial_metadata_recv;
   op++;
 
   calls[call_idx].call = grpc_channel_create_call(
@@ -139,10 +140,11 @@ static struct grpc_memory_counters send_snapshot_request(
   op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &calls[call_idx].initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata =
+      &calls[call_idx].initial_metadata_recv;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &response_payload_recv;
+  op->data.recv_message.recv_message = &response_payload_recv;
   op++;
   op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
   op->data.recv_status_on_client.trailing_metadata =
diff --git a/test/core/memory_usage/server.c b/test/core/memory_usage/server.c
index c0710930b07..cd7f2aabddf 100644
--- a/test/core/memory_usage/server.c
+++ b/test/core/memory_usage/server.c
@@ -129,13 +129,13 @@ static void send_snapshot(void *tag, struct grpc_memory_counters *snapshot) {
   op->data.send_initial_metadata.count = 0;
   op++;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &terminal_buffer;
+  op->data.recv_message.recv_message = &terminal_buffer;
   op++;
   op->op = GRPC_OP_SEND_MESSAGE;
   if (payload_buffer == NULL) {
     gpr_log(GPR_INFO, "NULL payload buffer !!!");
   }
-  op->data.send_message = payload_buffer;
+  op->data.send_message.send_message = payload_buffer;
   op++;
   op->op = GRPC_OP_SEND_STATUS_FROM_SERVER;
   op->data.send_status_from_server.status = GRPC_STATUS_OK;
diff --git a/test/core/surface/lame_client_test.c b/test/core/surface/lame_client_test.c
index b6db6a6b084..b78361aacb8 100644
--- a/test/core/surface/lame_client_test.c
+++ b/test/core/surface/lame_client_test.c
@@ -125,7 +125,7 @@ int main(int argc, char **argv) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
diff --git a/test/cpp/grpclb/grpclb_test.cc b/test/cpp/grpclb/grpclb_test.cc
index de304b9f89c..3637190b6d7 100644
--- a/test/cpp/grpclb/grpclb_test.cc
+++ b/test/cpp/grpclb/grpclb_test.cc
@@ -213,7 +213,7 @@ static void start_lb_server(server_fixture *sf, int *ports, size_t nports,
   // receive request for backends
   op = ops;
   op->op = GRPC_OP_RECV_MESSAGE;
-  op->data.recv_message = &request_payload_recv;
+  op->data.recv_message.recv_message = &request_payload_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -268,7 +268,7 @@ static void start_lb_server(server_fixture *sf, int *ports, size_t nports,
     response_payload = grpc_raw_byte_buffer_create(&response_payload_slice, 1);
     op = ops;
     op->op = GRPC_OP_SEND_MESSAGE;
-    op->data.send_message = response_payload;
+    op->data.send_message.send_message = response_payload;
     op->flags = 0;
     op->reserved = NULL;
     op++;
@@ -372,7 +372,7 @@ static void start_backend_server(server_fixture *sf) {
     while (!exit) {
       op = ops;
       op->op = GRPC_OP_RECV_MESSAGE;
-      op->data.recv_message = &request_payload_recv;
+      op->data.recv_message.recv_message = &request_payload_recv;
       op->flags = 0;
       op->reserved = NULL;
       op++;
@@ -401,7 +401,7 @@ static void start_backend_server(server_fixture *sf) {
             grpc_raw_byte_buffer_create(&response_payload_slice, 1);
         op = ops;
         op->op = GRPC_OP_SEND_MESSAGE;
-        op->data.send_message = response_payload;
+        op->data.send_message.send_message = response_payload;
         op->flags = 0;
         op->reserved = NULL;
         op++;
@@ -489,7 +489,7 @@ static void perform_request(client_fixture *cf) {
   op->reserved = NULL;
   op++;
   op->op = GRPC_OP_RECV_INITIAL_METADATA;
-  op->data.recv_initial_metadata = &initial_metadata_recv;
+  op->data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_recv;
   op->flags = 0;
   op->reserved = NULL;
   op++;
@@ -509,12 +509,12 @@ static void perform_request(client_fixture *cf) {
 
     op = ops;
     op->op = GRPC_OP_SEND_MESSAGE;
-    op->data.send_message = request_payload;
+    op->data.send_message.send_message = request_payload;
     op->flags = 0;
     op->reserved = NULL;
     op++;
     op->op = GRPC_OP_RECV_MESSAGE;
-    op->data.recv_message = &response_payload_recv;
+    op->data.recv_message.recv_message = &response_payload_recv;
     op->flags = 0;
     op->reserved = NULL;
     op++;

From 26e973e36e30135f233bbc706df562a2217f6670 Mon Sep 17 00:00:00 2001
From: "Mark D. Roth" <roth@google.com>
Date: Wed, 25 Jan 2017 15:02:08 -0800
Subject: [PATCH 11/52] Fix cython bug.

---
 src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi
index e07a2f873c1..aee5d3c188f 100644
--- a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi
@@ -652,8 +652,8 @@ def operation_receive_message(int flags):
   # n.b. the c_op.data.receive_message field needs to be deleted by us,
   # anyway, so we just let that be handled by the ByteBuffer() we allocated
   # the line before.
-  op.c_op.data.recv_message.receive_message =
-      &op._received_message.c_byte_buffer
+  op.c_op.data.recv_message.receive_message = (
+      &op._received_message.c_byte_buffer)
   op.is_valid = True
   return op
 

From 6f12c7496948678eb24c14f54ac99e5452ea07fc Mon Sep 17 00:00:00 2001
From: "Mark D. Roth" <roth@google.com>
Date: Wed, 25 Jan 2017 15:02:56 -0800
Subject: [PATCH 12/52] clang-format

---
 src/core/lib/surface/call.c            | 4 ++--
 test/core/end2end/fuzzers/api_fuzzer.c | 3 +--
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c
index 8de0b41fa43..cac5737d919 100644
--- a/src/core/lib/surface/call.c
+++ b/src/core/lib/surface/call.c
@@ -1478,8 +1478,8 @@ static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx,
         /* If the outgoing buffer is already compressed, mark it as so in the
            flags. These will be picked up by the compression filter and further
            (wasteful) attempts at compression skipped. */
-        if (op->data.send_message.send_message->data.raw.compression
-            > GRPC_COMPRESS_NONE) {
+        if (op->data.send_message.send_message->data.raw.compression >
+            GRPC_COMPRESS_NONE) {
           call->sending_stream.base.flags |= GRPC_WRITE_INTERNAL_COMPRESS;
         }
         stream_op->send_message = &call->sending_stream.base;
diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c
index 07f282b5f53..690c1a4582d 100644
--- a/test/core/end2end/fuzzers/api_fuzzer.c
+++ b/test/core/end2end/fuzzers/api_fuzzer.c
@@ -934,8 +934,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
               } else {
                 has_ops |= 1 << GRPC_OP_SEND_MESSAGE;
                 g_active_call->send_message =
-                    op->data.send_message.send_message =
-                    read_message(&inp);
+                    op->data.send_message.send_message = read_message(&inp);
               }
               break;
             case GRPC_OP_SEND_CLOSE_FROM_CLIENT:

From 203de0fa412269b3776663d9e2d05d7aed665af8 Mon Sep 17 00:00:00 2001
From: "Mark D. Roth" <roth@google.com>
Date: Thu, 26 Jan 2017 08:04:15 -0800
Subject: [PATCH 13/52] Really fix python.

---
 src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi   | 15 ++++++++++++---
 .../grpcio/grpc/_cython/_cygrpc/records.pyx.pxi   |  4 ++--
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi
index ad766186bd1..348d42cb0ba 100644
--- a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi
@@ -279,12 +279,21 @@ cdef extern from "grpc/grpc.h":
   ctypedef struct grpc_op_data_recv_close_on_server:
     int *cancelled
 
+  ctypedef struct grpc_op_data_send_message:
+    grpc_byte_buffer *send_message
+
+  ctypedef struct grpc_op_data_receive_message:
+    grpc_byte_buffer **receive_message "recv_message"
+
+  ctypedef struct grpc_op_data_receive_initial_metadata:
+    grpc_metadata_array *receive_initial_metadata "recv_initial_metadata"
+
   union grpc_op_data:
     grpc_op_data_send_initial_metadata send_initial_metadata
-    grpc_byte_buffer *send_message
+    grpc_op_data_send_message send_message
     grpc_op_data_send_status_from_server send_status_from_server
-    grpc_metadata_array *receive_initial_metadata "recv_initial_metadata"
-    grpc_byte_buffer **receive_message "recv_message"
+    grpc_op_data_receive_initial_metadata receive_initial_metadata "recv_initial_metadata"
+    grpc_op_data_receive_message receive_message "recv_message"
     grpc_op_data_recv_status_on_client receive_status_on_client "recv_status_on_client"
     grpc_op_data_recv_close_on_server receive_close_on_server "recv_close_on_server"
 
diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi
index aee5d3c188f..07385129ef4 100644
--- a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi
@@ -639,7 +639,7 @@ def operation_receive_initial_metadata(int flags):
   op.c_op.type = GRPC_OP_RECV_INITIAL_METADATA
   op.c_op.flags = flags
   op._received_metadata = Metadata([])
-  op.c_op.data.recv_initial_metadata.receive_initial_metadata = (
+  op.c_op.data.receive_initial_metadata.receive_initial_metadata = (
       &op._received_metadata.c_metadata_array)
   op.is_valid = True
   return op
@@ -652,7 +652,7 @@ def operation_receive_message(int flags):
   # n.b. the c_op.data.receive_message field needs to be deleted by us,
   # anyway, so we just let that be handled by the ByteBuffer() we allocated
   # the line before.
-  op.c_op.data.recv_message.receive_message = (
+  op.c_op.data.receive_message.receive_message = (
       &op._received_message.c_byte_buffer)
   op.is_valid = True
   return op

From 630706e5fed5e5d74f10dd19881fa5448a521c84 Mon Sep 17 00:00:00 2001
From: Muxi Yan <mxyan@google.com>
Date: Sat, 28 Jan 2017 20:34:05 -0800
Subject: [PATCH 14/52] Advance protoc dependency version as well

---
 src/objective-c/!ProtoCompiler-gRPCPlugin.podspec | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
index 51bc044ec66..c6917aa5b6a 100644
--- a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
+++ b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
@@ -95,7 +95,7 @@ Pod::Spec.new do |s|
   s.preserve_paths = plugin
 
   # Restrict the protoc version to the one supported by this plugin.
-  s.dependency '!ProtoCompiler', '3.0.2'
+  s.dependency '!ProtoCompiler', '3.1.0'
   # For the Protobuf dependency not to complain:
   s.ios.deployment_target = '7.1'
   s.osx.deployment_target = '10.9'

From 562ec45bab47beaab02ecbee182b6ab211457e8e Mon Sep 17 00:00:00 2001
From: Muxi Yan <mxyan@google.com>
Date: Mon, 30 Jan 2017 00:23:00 -0800
Subject: [PATCH 15/52] Update gRPC-Core.podspec

---
 gRPC-Core.podspec                    | 13 ++++++++++---
 templates/gRPC-Core.podspec.template | 13 ++++++++++---
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
index 1bbd5612e3d..89dc45ac1cf 100644
--- a/gRPC-Core.podspec
+++ b/gRPC-Core.podspec
@@ -851,13 +851,22 @@ Pod::Spec.new do |s|
 
   s.subspec 'Cronet-Implementation' do |ss|
     ss.header_mappings_dir = '.'
+
+    ss.dependency "#{s.name}/Interface", version
+    ss.dependency "#{s.name}/Implementation", version
+    ss.dependency "#{s.name}/Cronet-Interface", version
+
     ss.source_files = 'src/core/ext/transport/cronet/client/secure/cronet_channel_create.c',
-                      'src/core/ext/transport/cronet/transport/cronet_transport.c'
+                      'src/core/ext/transport/cronet/transport/cronet_transport.c',
+                      'third_party/Cronet/bidirectional_stream_c.h'
   end
 
   s.subspec 'Tests' do |ss|
     ss.header_mappings_dir = '.'
 
+    ss.dependency "#{s.name}/Interface", version
+    ss.dependency "#{s.name}/Implementation", version
+
     ss.source_files = 'test/core/end2end/cq_verifier.{c,h}',
                       'test/core/end2end/end2end_tests.{c,h}',
                       'test/core/end2end/end2end_test_utils.c',
@@ -867,7 +876,5 @@ Pod::Spec.new do |s|
                       'test/core/util/port.h',
                       'test/core/util/port_posix.c',
                       'test/core/util/port_server_client.{c,h}'
-
-    ss.dependency 'CronetFramework'
   end
 end
diff --git a/templates/gRPC-Core.podspec.template b/templates/gRPC-Core.podspec.template
index f15d0efc17d..7e02a7f7929 100644
--- a/templates/gRPC-Core.podspec.template
+++ b/templates/gRPC-Core.podspec.template
@@ -164,13 +164,22 @@
 
     s.subspec 'Cronet-Implementation' do |ss|
       ss.header_mappings_dir = '.'
+
+      ss.dependency "#{s.name}/Interface", version
+      ss.dependency "#{s.name}/Implementation", version
+      ss.dependency "#{s.name}/Cronet-Interface", version
+
       ss.source_files = 'src/core/ext/transport/cronet/client/secure/cronet_channel_create.c',
-                        'src/core/ext/transport/cronet/transport/cronet_transport.c'
+                        'src/core/ext/transport/cronet/transport/cronet_transport.c',
+                        'third_party/Cronet/bidirectional_stream_c.h'
     end
 
     s.subspec 'Tests' do |ss|
       ss.header_mappings_dir = '.'
 
+      ss.dependency "#{s.name}/Interface", version
+      ss.dependency "#{s.name}/Implementation", version
+
       ss.source_files = 'test/core/end2end/cq_verifier.{c,h}',
                         'test/core/end2end/end2end_tests.{c,h}',
                         'test/core/end2end/end2end_test_utils.c',
@@ -180,7 +189,5 @@
                         'test/core/util/port.h',
                         'test/core/util/port_posix.c',
                         'test/core/util/port_server_client.{c,h}'
-
-      ss.dependency 'CronetFramework'
     end
   end

From c933d020902b4fc1c778179d49d6360b81d954f4 Mon Sep 17 00:00:00 2001
From: Muxi Yan <mxyan@google.com>
Date: Mon, 30 Jan 2017 01:32:27 -0800
Subject: [PATCH 16/52] Disable wireless check on OS X

---
 src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m
index 40afca2d3d6..0e2fa13f2c7 100644
--- a/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m
+++ b/src/objective-c/GRPCClient/private/GRPCConnectivityMonitor.m
@@ -159,11 +159,13 @@ static void PassFlagsToContextInfoBlock(SCNetworkReachabilityRef target,
     if (strongSelf) {
       if (lossHandler && !flags.reachable) {
         lossHandler();
+#if TARGET_OS_IPHONE
       } else if (wifiStatusChangeHandler &&
                  strongSelf->_previousReachabilityFlags &&
                  (flags.isWWAN ^
                   strongSelf->_previousReachabilityFlags.isWWAN)) {
         wifiStatusChangeHandler();
+#endif
       }
       strongSelf->_previousReachabilityFlags = flags;
     }

From 57f9bc481956efa649a0bdc546965d348e6fdc8a Mon Sep 17 00:00:00 2001
From: Muxi Yan <mxyan@google.com>
Date: Mon, 30 Jan 2017 09:32:11 -0800
Subject: [PATCH 17/52] Add modification warning to templated files

---
 gRPC-Core.podspec                                      | 10 ++++++----
 gRPC-ProtoRPC.podspec                                  |  6 ++++++
 gRPC-RxLibrary.podspec                                 |  6 ++++++
 gRPC.podspec                                           |  5 +++++
 src/objective-c/!ProtoCompiler-gRPCPlugin.podspec      |  8 +++++++-
 src/objective-c/GRPCClient/private/version.h           |  3 +++
 templates/gRPC-Core.podspec.template                   | 10 ++++++----
 templates/gRPC-ProtoRPC.podspec.template               |  6 ++++++
 templates/gRPC-RxLibrary.podspec.template              |  6 ++++++
 templates/gRPC.podspec.template                        |  5 +++++
 .../!ProtoCompiler-gRPCPlugin.podspec.template         |  8 +++++++-
 .../objective-c/GRPCClient/private/version.h.template  |  5 ++++-
 12 files changed, 67 insertions(+), 11 deletions(-)

diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
index 1bbd5612e3d..52346ec2561 100644
--- a/gRPC-Core.podspec
+++ b/gRPC-Core.podspec
@@ -1,8 +1,10 @@
-# GRPC CocoaPods podspec
-# This file has been automatically generated from a template file. Please make modifications to
-# `templates/gRPC-Core.podspec.template` instead. This file can be regenerated from the template by
-# running `tools/buildgen/generate_projects.sh`.
+# This file has been automatically generated from a template file.
+# Please make modifications to `templates/gRPC-Core.podspec.template`
+# instead. This file can be regenerated from the template by running
+# `tools/buildgen/generate_projects.sh`.
 
+# gRPC Core CocoaPods podspec
+#
 # Copyright 2015, Google Inc.
 # All rights reserved.
 #
diff --git a/gRPC-ProtoRPC.podspec b/gRPC-ProtoRPC.podspec
index 964d1840c23..04f60ecba61 100644
--- a/gRPC-ProtoRPC.podspec
+++ b/gRPC-ProtoRPC.podspec
@@ -1,3 +1,9 @@
+# This file has been automatically generated from a template file.
+# Please make modifications to
+# `templates/gRPC-ProtoRPC.podspec.template` instead. This file can be
+# regenerated from the template by running
+# `tools/buildgen/generate_projects.sh`.
+
 # Copyright 2015, Google Inc.
 # All rights reserved.
 #
diff --git a/gRPC-RxLibrary.podspec b/gRPC-RxLibrary.podspec
index eca3ab3d75e..af5c4654da5 100644
--- a/gRPC-RxLibrary.podspec
+++ b/gRPC-RxLibrary.podspec
@@ -1,3 +1,9 @@
+# This file has been automatically generated from a template file.
+# Please make modifications to
+# `templates/gRPC-RxLibrary.podspec.template` instead. This file can be
+# regenerated from the template by running
+# `tools/buildgen/generate_projects.sh`.
+
 # Copyright 2015, Google Inc.
 # All rights reserved.
 #
diff --git a/gRPC.podspec b/gRPC.podspec
index 77efd0fc6ae..fde91a013aa 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -1,3 +1,8 @@
+# This file has been automatically generated from a template file.
+# Please make modifications to `templates/gRPC.podspec.template`
+# instead. This file can be regenerated from the template by running
+# `tools/buildgen/generate_projects.sh`.
+
 # Copyright 2015, Google Inc.
 # All rights reserved.
 #
diff --git a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
index 51bc044ec66..b1fa8545db0 100644
--- a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
+++ b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
@@ -1,5 +1,11 @@
-# CocoaPods podspec for the gRPC Proto Compiler Plugin
+# This file has been automatically generated from a template file.
+# Please make modifications to
+# `templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template`
+# instead. This file can be regenerated from the template by running
+# `tools/buildgen/generate_projects.sh`.
 
+# CocoaPods podspec for the gRPC Proto Compiler Plugin
+#
 # Copyright 2016, Google Inc.
 # All rights reserved.
 #
diff --git a/src/objective-c/GRPCClient/private/version.h b/src/objective-c/GRPCClient/private/version.h
index 973c206f9cb..c848f10aaa1 100644
--- a/src/objective-c/GRPCClient/private/version.h
+++ b/src/objective-c/GRPCClient/private/version.h
@@ -31,4 +31,7 @@
  *
  */
 
+/* This file is autogenerated from template:
+ * templates/src/objective-c/GRPCClient/private/version.h.template */
+
 #define GRPC_OBJC_VERSION_STRING @"1.1.0-pre1"
diff --git a/templates/gRPC-Core.podspec.template b/templates/gRPC-Core.podspec.template
index baa9f5497da..18dabb9603b 100644
--- a/templates/gRPC-Core.podspec.template
+++ b/templates/gRPC-Core.podspec.template
@@ -1,10 +1,12 @@
 %YAML 1.2
 --- |
-  # GRPC CocoaPods podspec
-  # This file has been automatically generated from a template file. Please make modifications to
-  # `templates/gRPC-Core.podspec.template` instead. This file can be regenerated from the template by
-  # running `tools/buildgen/generate_projects.sh`.
+  # This file has been automatically generated from a template file.
+  # Please make modifications to `templates/gRPC-Core.podspec.template`
+  # instead. This file can be regenerated from the template by running
+  # `tools/buildgen/generate_projects.sh`.
 
+  # gRPC Core CocoaPods podspec
+  #
   # Copyright 2015, Google Inc.
   # All rights reserved.
   #
diff --git a/templates/gRPC-ProtoRPC.podspec.template b/templates/gRPC-ProtoRPC.podspec.template
index 4b507d217c0..5d7d90d2318 100644
--- a/templates/gRPC-ProtoRPC.podspec.template
+++ b/templates/gRPC-ProtoRPC.podspec.template
@@ -1,5 +1,11 @@
 %YAML 1.2
 --- |
+  # This file has been automatically generated from a template file.
+  # Please make modifications to
+  # `templates/gRPC-ProtoRPC.podspec.template` instead. This file can be
+  # regenerated from the template by running
+  # `tools/buildgen/generate_projects.sh`.
+
   # Copyright 2015, Google Inc.
   # All rights reserved.
   #
diff --git a/templates/gRPC-RxLibrary.podspec.template b/templates/gRPC-RxLibrary.podspec.template
index 99a40730fa2..35a06c8a856 100644
--- a/templates/gRPC-RxLibrary.podspec.template
+++ b/templates/gRPC-RxLibrary.podspec.template
@@ -1,5 +1,11 @@
 %YAML 1.2
 --- |
+  # This file has been automatically generated from a template file.
+  # Please make modifications to
+  # `templates/gRPC-RxLibrary.podspec.template` instead. This file can be
+  # regenerated from the template by running
+  # `tools/buildgen/generate_projects.sh`.
+
   # Copyright 2015, Google Inc.
   # All rights reserved.
   #
diff --git a/templates/gRPC.podspec.template b/templates/gRPC.podspec.template
index 8ccd1867dd0..d33ce277dc3 100644
--- a/templates/gRPC.podspec.template
+++ b/templates/gRPC.podspec.template
@@ -1,5 +1,10 @@
 %YAML 1.2
 --- |
+  # This file has been automatically generated from a template file.
+  # Please make modifications to `templates/gRPC.podspec.template`
+  # instead. This file can be regenerated from the template by running
+  # `tools/buildgen/generate_projects.sh`.
+
   # Copyright 2015, Google Inc.
   # All rights reserved.
   #
diff --git a/templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template b/templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template
index 6c45fb45c04..80420af7db2 100644
--- a/templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template
+++ b/templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template
@@ -1,7 +1,13 @@
 %YAML 1.2
 --- |
-  # CocoaPods podspec for the gRPC Proto Compiler Plugin
+  # This file has been automatically generated from a template file.
+  # Please make modifications to
+  # `templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template`
+  # instead. This file can be regenerated from the template by running
+  # `tools/buildgen/generate_projects.sh`.
 
+  # CocoaPods podspec for the gRPC Proto Compiler Plugin
+  #
   # Copyright 2016, Google Inc.
   # All rights reserved.
   #
diff --git a/templates/src/objective-c/GRPCClient/private/version.h.template b/templates/src/objective-c/GRPCClient/private/version.h.template
index 07df286c8b4..453604bdaac 100644
--- a/templates/src/objective-c/GRPCClient/private/version.h.template
+++ b/templates/src/objective-c/GRPCClient/private/version.h.template
@@ -32,5 +32,8 @@
    * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    *
    */
-  
+
+  /* This file is autogenerated from template:
+   * templates/src/objective-c/GRPCClient/private/version.h.template */
+
   #define GRPC_OBJC_VERSION_STRING @"${settings.version}"

From 4c04cf9da94fd8ebfa5f939ce83b04ff2cd4dee9 Mon Sep 17 00:00:00 2001
From: murgatroid99 <mlumish@google.com>
Date: Fri, 13 Jan 2017 11:30:53 -0800
Subject: [PATCH 18/52] Add missing header include in tcp_uv.c

---
 src/core/lib/iomgr/tcp_uv.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/core/lib/iomgr/tcp_uv.c b/src/core/lib/iomgr/tcp_uv.c
index 3ddc79706be..a1ee597d094 100644
--- a/src/core/lib/iomgr/tcp_uv.c
+++ b/src/core/lib/iomgr/tcp_uv.c
@@ -48,6 +48,7 @@
 #include "src/core/lib/iomgr/network_status_tracker.h"
 #include "src/core/lib/iomgr/resource_quota.h"
 #include "src/core/lib/iomgr/tcp_uv.h"
+#include "src/core/lib/slice/slice_internal.h"
 #include "src/core/lib/slice/slice_string_helpers.h"
 #include "src/core/lib/support/string.h"
 

From 1b587f1705eae40b2be1eab9d44aebb0d99d4d03 Mon Sep 17 00:00:00 2001
From: Alexander Polcyn <apolcyn@google.com>
Date: Fri, 6 Jan 2017 14:09:42 -0800
Subject: [PATCH 19/52] update rake-compiler Dockerfile to build for ruby 2.4.0

---
 third_party/rake-compiler-dock/Dockerfile     | 164 +++++++++---------
 .../patches/ruby-2.4.0/no_sendfile.patch      |  12 ++
 2 files changed, 98 insertions(+), 78 deletions(-)
 create mode 100644 third_party/rake-compiler-dock/build/patches/ruby-2.4.0/no_sendfile.patch

diff --git a/third_party/rake-compiler-dock/Dockerfile b/third_party/rake-compiler-dock/Dockerfile
index c7a6657246c..2cc4d410dfc 100644
--- a/third_party/rake-compiler-dock/Dockerfile
+++ b/third_party/rake-compiler-dock/Dockerfile
@@ -26,76 +26,77 @@ RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3 && \
         rvmsudo rvm cleanup all "
 
 # Regenerate the following using build.sh if the build folder changes.
-RUN echo \
-H4sIAJSZulYAA+07a1fbSLL5evUragxnbAdLtvwEApnJAMmwN68DJHPvGbLattSyNZYlbXfLhpuw\
-v/1WtSS/gBB2EnZn1n3AbvWjqrqqurqq1O6nQejVH33T0sDS63Xo2+51GovfRXlkN7uddrPd67a7\
-jxq23Wy2HkHn25KVlVQqJgAeJcEFDz8z7q7+P2jpa/nLYOBPLfcb4SABd7vt2+Rvd5ur8m92Gp1H\
-0PhG9CyV/3D51x8b8BjOhoGERMQDwcYwZJEXcgmnxy+OX58BPoEfiykTnoRAgYqxKVZDLmiGy6W0\
-CMSxAoQRRIpHHvdoVJ+DSCNgEt4eH4JNo2jgYeyOcC6xXckCBKKbBmoIJS/rxYmlpZnwJoKXQZRe\
-1ABRg8d9loYKUHEjFuYkC6IzmwLYHguEyqLLfFBG5hnSzXEYhwMlQvMA2IgVKyX69TQPEgSW46Bp\
-dcPYCCI3TD0Oexk4a/h0se1S1tVlwuX15ikLFLUayBtIAg/2ofHEMCZx4BkZ3Q5CpM4KfRD0dFw1\
-PhoAgV/BCVWsAYyCMKSnWk5t9YlxlcEcsyDSU5kYuDVwh6jPj7E++fVDlaBIJVJXA2auCuIIIj51\
-suoTQkJIFVOpRMpMG0kDqD+GU64gTTSzMwAp8gylKhPuBv6l7kBAkAGyiEewANmSzCmksg9L6ySk\
-WOPjRF1KxFL5fnnamMlR9ck1aH7IBjJnHiysppLxowYLYGpQIf4+rjaqenTGdhT7qKIh54z9qDlL\
-Aqp8n7FA9wIIjsuN4Jej/zk+Oz17dvbutLLQf8VDybO5M8bxC+5Okopmu/0BiclrOUDUJxGLSomG\
-lZaRZCA0XJToQ+//zP4nTLlDLr+RH3D/8x8fmuvz/yHKsvxF2r80bWvb6plJq9f+Svpwf/m3e73e\
-Wv4PUT4v/yhOLN33u3Dc4f817Ia9Iv9ut9Fe+38PUbzA98E0B+jYsbobR34woIO+P6+jj+HxC+h0\
-7E6P+ZbV7bYavM/Axk3d6Tz4gbUuX7XcsP+bVstqfE1X4J+w/82evbb/D1FulX8UOxJDOT8I+e89\
-Au6y/+1ua0X+vW6jubb/D1G+2P7zPm95265lsVar2++1CvtvmubiTGNra2tp9o8/YlC5vdNu1Xqw\
-lVW6gI1eDLsUBjHX8SPHdVD/3JHjp5ELpc2Xx6+PXr8pQalQQaziQHeiB8wUs2RgJAeKSwWli82b\
-BmBkdnHJ5RMKV6MMocsUPH1KBGKAj/E67O05zw6O3jw3zA1sCSIOPz97f+ScHr0+fH788ghsA/IB\
-YIAf/LlOvBv9vx2r9S+2/63G2v4/SLlV/g9n/+2m3b5u/9f53wcpX2z/t3e2e60G2n/X591m5372\
-v93d6Wj7n1ewkVK1ZPvJ4AcR+OPY0znOZKATcm39SXk7ytqBTNg0moC8lC4LQ3CcouYORRwrGHAD\
-/gt0kVxJnKZ4GHqBwEc+om/fHRIKN5ZDkEE0BMXwI4wHTRBxGnnniwBSBIBfA/zyGB/HET6F3FVO\
-yMSAO75HeUv850hTGmWVcwOWy3ikgjEH+hiMYTCmiiPADWM86AZc6d78O/Y9dglJjCtK6PPcMJeB\
-JYIzoinbkSCHqfLiaaTzoKFCHXZH4IVOoLhgijvJ0BPG1o0gvmTm/HSWDgppwsT+3zaxzt1hvHQS\
-b+YiLMEnoAFKOHL4N+OOU30+q7Q5w1D6cx2sf5DyGfv/NVI/uvwT+R+70V3b/4co6/zPf3ZZ2f9s\
-xE03Hid4xgizgYag8xUCgS/1/7sd9A8aPdr/jfY6//8g5W7503v5OFUmv1DSInNxbxx32f9es7ls\
-/5t2q7fO/zxIWbL/ismRrPeDqO6KWEqT3AGLdALPg1v78vOhy1x32+7i+cBYk7V36Hzottt5fHD7\
-7CxeuL1fxw+tTm0bo4dWETuQC1za+Pju9OjE+fnNq6OrutZjWd/4+Or49YtfsPH07AqfTt799L/O\
-wYHz/ujk9PjN66v6K4SZZ4aewq85jMxzL5mmhrKfT/vp3fHLw6tSLestmyaPWD/kphwywb3yvN0L\
-pO4IItSlMDS92MVeM+8t9o8a3dTohuXMT88baZvtlwn0B7q4ABvwPBYuh18QOMYNTR03nSB3wLa2\
-a/ixU9xTkXQ7I1D3PJDv3v/0yFRGXD/VNzruaQZu2P9YaT0qvL9Oq7ts/5vNnt37N9v/2cWkh6Do\
-QctzEY+hbfvbrXa7veO77Vaz1W/6Ozsdvt2zO4x1tttNb8f3dlqtNrzCSPiUJ2D3oNHY1X/QRBEa\
-BGYXXjIh4b9ZFEjYw0hZ/jgQPPg/Ez8i6cXCtzz+1DjEKHMXTpmqQasBf2ERQrC70Njepb8ebKFG\
-NIzTtP8bBty78OvbZ2cHP3+AgyGLBlxfO/LJIo0xFiVM4/yqWaamAe7D7CZZoaqGcYZTMPadBHEq\
-V+dOYzHiHuB2GsbxKIgGEEcID7EYJcH/ngboC5dFP3OGyyWgnINl6Oty2Y05xDdGtC6S4LJU8gKv\
-vgknIhx+CTkgCQWgGo5SGGNzGZWVQTQg+UJwhYODCJim0gMeTQIRR2MeKcs4VlkO22dBqLd6GGM0\
-P+BjfBgyuvzFgYUyhoQJBbGf39xikceEB2HQF0xc1rCCNvU3iXKke30CtTpfDtKnjQjiD6RMkVoa\
-CkOlErlbr+MBMUz7FnJ52UismAzaJfVsfn07Y/0KxxFVFE/plhqKU98TJM7P2A5zto9Hop+zvGZM\
-h4E7pMnqMglczdbFhaLVJNbqk6Gmlxbo+4hTuu43UxoPkpAptKBjY8JCWqPmmqtSDTDi3OMe8QP5\
-OWWXOQxiNE5lPgq0EG+dkkRJDWSccZ8w5DxGutRQQzYoS4THYiw80qx8gS/4WCdVKQ1UKxoj1KEJ\
-z2445oACLlFP9F1FY6b1CypBpNFttwlHHX8bcobKF8WK1+YUaeMOHnLTVTFShsxiMMAZESmOXq8s\
-tg8CwFOthqc5IL24Umwf6DuAHm5YL0NPhEsLTmNKEDGUFe6+cQLJaACm8EsWnfYG0a/Voo5S4ZEM\
-ULZ4vFuiD5+g1YGtpWLeVAyws0M+VxM86NqomZILut0nK1vVGjRtPPlCnjWYVcNYcmVup6F/e1/u\
-yjRaDebvoCvj79jtHXvFlbl9dubK3N6vXZnujnZl9Bc2/IVNGMxGgkSvAEXW1xbL52gTUB9nGbwN\
-vXWY5y3pvHRFkKj5KHfswd4esL508iGW4KFWMId00/HRWFeoG2WnW6oGzPONGzMzRdyaBmGYkyO1\
-0vkw5XrbaEcNsp2P6j0HQK/kLByvN7IMFGpMfiH2hwo6XAXSq/oCnlJVW7d5ynJDK9z9KNi6NwU5\
-jgL7QrI0TrRiWUkqh5XHGpOTUevkXRVtS6rV+SweechIknKr26m1dmBLfzfuKecNyF9DZitj+par\
-dpC185etujBk3xWzsjlObokdPb6CI5xiZA3IqXYmXCyIe4N2GKXfM0bUlmRPZnQ8GvtUR2tQuM5o\
-FiLKFSNZBctXwHzJzJzswpWfy+Sah35dXLXV7Pht5VZ1q60m678IQr6k0oclBsZJdhtaL4X2ln6a\
-xzF4gLjZms3b1rxIml520eDQ2A9kbT+pTwvcLnAW4z6Ll8Qxn0sywJOTz4RFSkW2E7cLbi89E5WE\
-1FQWs65TXIjiM9TOePicjrs44VFFWREb4wlVnparepj/aVGUvjUVuFsXfIAcTfk8Oo9Kiy80iqE0\
-wBH92zX9+hRNDr0LqawaCT8QUq1u6IXqfIdqAZA6ZIy/SdgF1musK7RIs44eltk244ebXLNimkA8\
-4DUblyxusWLYgxIGhSX4/vu8srcPOpzNQ+BFft8gGLGlbhQNkhPTbzsU3aPX3JtL4/Py3boJxJ0y\
-uD7Lkmn/u0r9r5WZclQLvauUq5t1xHp+bpM+nJ83y0sQ7sWfxTVfw5219pHyEVTPH1eK2HuGH3Fn\
-SyhX74aU/wLg9wLS/uS5VU0EBh0VKDL3Wg3PK1K4dMYEF+fVGfAkVTLj0pKISbBT9IFWW7N9kyNe\
-7VQijVDleQWrPAyXqOWLsBYedHVuQu9lkm41ojOTtLqR7m1/7jIqN9ihgjlLS1+sar+gvaMTWe3t\
-bs2+r1tAjCq5LEIfP4v9ZIoRkWYD+qUotlazji5SHE5KFPZEefSS7xYMARnFL3G0BPCUZ1Hj7k2B\
-nvpNusMUA7qVGI9PzH58UYR5nTm8ecSs6SjPGXU9lp5bU1TpkKFL80ZH/IvMFXwcT8iniaSC3ZP+\
-gZ66qGArI2gfv3357Oz5m5NXdwy7YbvfMOrw6PTg5PjtGY4kK5I5Wd4PldVO3EgmGE2rYzUs2kHx\
-VFq28Qd4OZb//jP1Ytxf3wjHXfn/ZqN77fc/rca/Wf7vT5r/PyySxzNbNXFGnCewtQ8lsglOIuKL\
-y8w85HV/1npycKhT7c7Szltpzneabj1+9ezFEaxk5dc3P/51Jd//SgSJMxUsSb5BjvuO97+2bfdW\
-7382Ouv3fw9SNr6rp1LoN290mY18HMNAv4AUInMu0C2hmCZEpyz0dGJbKrpIppOJ7wNByVN0ByB7\
-LZaPQhAY9+vMNtPX6zA2RWeknw7mnsZ0OrUms/lWLAZ1Fbgjrurb7W7LMGY+g+LjhEgpz5voMVVB\
-KMuGoZUXYwp0BrWn12eSk5tX2WxUryxcWckwdOISxzw7efEenVxyND6i8wf+/j/qfzXrcGWNWaI9\
-QiYGFLpSWnMfznLMFv3SuawRlbNOyw1jyY3MuXxHlFgYr+Hkmu4ljxQ7f8V6jVo/GOQEGnnqqCAk\
-u1S4TAhs5VlWJOjjJ1WLP1EUiODgyjDSCHskXYNEnlRAE1SDxwVY8r35Bfp9drOnEbqxxxHZ5g8W\
-NWe/NM6ZYXGG7qN2lYnGWAR63fPliLFuXF1isbpsSrYsjZNwrQ35H61k9h9DOPatvL+77/+026v3\
-/5qtxtr/e5CC9p9sP9rMoWEM0FQn9HrBHEBp88XxIV3QfXHy5t3bkjHWt6jNBOpoAerDeMyNVHKx\
-PNpMsfZO116AmIxrFFjQpBK29OdTwRzTwNOjE7TNdIFjf7NCJMDe3h6U9C3jf2TdVSOMwJSgTyl9\
-Di1HowiG5pfq1lIzngoac1qgwRhZcmVq5NlN7Z+enf7sHL1+v1/nytU3X4kC4ebdGM+VNn9cu6br\
-si7rsi7r8qcs/w8AInVFAFAAAA==\
+RUN echo \\
+H4sIANslcFgAA+08a3fbxo75uvwVqOxTSbFIidTDVhKnTW0n8d28ju2ku6fO5R2RQ4kVRXJnSMve\
+OPe3LzAk9fIrvk3UuylxUnk0DwADYDADzKiD1A/c5oNvCi2E7W7rgdlpdbe3Tfxumj2zpepzeGC2\
+W+1Oy7TaZvcBNpvYHbrflq0MUpkwAfCAxVHgXIQ39uPhcB3srBsGSv8ydSMu5DeiQQrudW7Wv9Xq\
+rejf6nZ7D6D1jfhZgr+4/ve5x9IgkZADD8/sMecxbO1CZZQksR2L6PwCqCjzsjerPdrbt1++PT6x\
+j97/8t/2u1fPTp6/PXq9Uv3h4Oj48O0bVXv4+tmLA1DVe3tFS0X7s6Xw14Vs/Ys0ZN9q9d/t/zsd\
+c3X9W1a3XP/rgI0fmgM/bA6YHGnaUERpzFwX9CFUNl8c7lfoz9Hb9+8q2mTs+gL0GJrJJG6OognX\
+UsnFcm89xdJ7VXoB4mzSoI2FBlWwZjAfCvqEOh4fHFU07eXb1we7mzViAZ48eQIV7owi+GfWXNeC\
+EHQJzVSKZhA5LGgKNua6E01iP+AC0dD4StNYqta0jHJakAFdlzzRFfFTjTzdL8+OX9oHbz7sNnni\
+4AoYXBAHwsmbdR2H/vzdu6Z8//eH3tRwvhGNO/Z/s2etnv+sTrtdrv91QPOhBg/hZORLwC19KNgE\
+Rix0Ay7h+PDF4ZsTwG/gRWLKhCvBTyCJsCpKRrj2cITDpTQIxWECiMMPEx663KVeAw64rwCT8O5w\
+H0zqRR33I2eMY0nsiSxQILmpn4yg4matOLCyNBLehvDKD9PzBiBpcLNjC6DhhizIWRbEZzYEsD4S\
+iJWFF3mnjM0T5JtjNw57iQj0PWBjVsyU+FfDXIgRWU6DhjU1bcMPnSB1OTzJ0Bmjp4t1F7KZXMRc\
+Xq2eMj+hWg1lA7Hvwi60HmvaWeS7Wsa3jRipsUYfhD2d1LVP6IV8r4YD6sofjf0goG+NnNv6Y+1z\
+hnPC/FANZWLoNMAZoT0/xPLZbx/rhEUmInUUYuYkfhRCyKd2VnxMRIhowpJUIme6iawBNB/CMU8g\
+jZWwMwQpygy1KmPu+N6FakBEkCEySEawgNmQzC60sgtL8ySiWOKTOLlAnwy1H5eHTZgc1x9fweYF\
+bChz4cHCbGqZPBqwgKYBNZLvw3qrrnpnYke1j2sKcy7YT0qypKDaj5kIVCuA4DjdEH49+K/Dk+OT\
+Zyfvj2sL7Z95IHk2diY4fs6ds7imxG5+RGbyUo4Q7UlEolahbpVlIhkKhRc1uu71n/n/mCXOiMtv\
+lAf48vjfsnpdk/x/r9Uu4/91wLL+6RSkm8aOsa3H7e3OV7KH++d/OttWp9T/OuB2/YdRbKi2P0Tj\
+rvyP2VqN/3rdtlWe/9YBru95GOsM8WDHmk4Uev6QNvrBvIxnDJefQ7drdreZZxi9XrvFBwxMWtTd\
+7z0++t5hZf0vxtB6y+gb3a+wB9zf//eoqvT/a4C79U9fWaJTeKYPUnWiN8hrfDmN2/2/2eq2V/L/\
+ltUt83/rgecimkDH9HbanU6n7zmdttUeWF6/3+U722aXse5Ox3L7nttvtzvwGuOtYx6DuQ2t1iP1\
+DyxUoUZoHsErJiT8JwsxkH4SYPnnoeD+/+r4EUo3Ep7h8qfaPkv4IzhmSQPaLfgbCxGD2YPWziP6\
+tw1baBEt7Tgd/M6d5BH89u7Zyd7Lj7CHMeSQq7DTQyuFCcdAFylN8lRDZqb+IOBZJqEwVU3DkB9i\
+wc/8CCO1lbFTDAkx3B9cwCiKxn44hChEfEhFqwj+P6mPe2FVDLLNsFoBhwWBoal0SZYxQXoTJOsg\
+Cw5LJS/oqkyICLH7BeSIJBSIGtgrATfiMqwmGvGA7AuMB7GzHwJTXLp0F+OLKJzwMDG0w4S4CrHJ\
+DyTNOYiYCxhF45cRo+CfAwtkBDETCUReHrlj4M2EC4E/EExcNLAw5trvEvVIeR3hRk4+HeRP3QMh\
+fV/KFLmlrtm9z6NmEw8Io3RgoJSXncSKy6D0TTMb39zJRL8icSQVRlPKUqA6VZ6IJD8TO8zFPhmL\
+QS7yhjYd+c6IBicXse8osS5OlJ8nJFrwkIuGmpqv8lFTSvfMjMaFOGCJF4mJdsYCmqOSmpOkCmHI\
+uctdkgfKc8ouchwkaBzKPFRood6mxOA9boCMMukThVzGyFcyUpg1ym4wB1XrkmXlE3zBJ8SlEaCo\
+GkVliDZ0xrMMV47I5xLtROWqtJnVL5gEsUbZjjOONv4u4AyNL4wS3phzpJw7uChNJ4mQMxQWgyGO\
+CMlw1HxlsXwQgeBuA097gPziTLF+qHJALi5YNyNPjEsDjiM0XkRVEbj6JjHE4yHowqsYmq7rGvGv\
+zKKJWuGh9FG3TI4NMYBLaHdhawn060ADU9EqzKQBZgctU3JB2R1Z26o3wDLB5QHPKvS6pi0dZW/m\
+YXBzW37UbbVbzOv3DMPrm52+2aejbq/TocndhlnD2dyK/eefQTd7/cYObGV/sOJv7IzBrCfIUZSi\
+ygbKY3kcfQLaY3E3Cxtq6dCVy6LNS0f4cTLv5UxcePIE2EDaeRdD8EAZmE22aXvorGvUjLpTNXUN\
+NH1OpHBTJK2pHwQ5O1IZnQdTrpaNIyIpIVv5aN5zBNglMbC/WsjST9Bi8oToT7XKxqeC6OfmAp1K\
+XXk3bWvOBRnc/TjYujcHOY2COswhipVhGXEqR7WHipKdcWvnTTXlS+r1+SgeuihI0nK71220+7Cl\
+/rbuqecNyjz7Ic9nxlSWk2xIqvx2NuvCkf1QjMrG2LkntlX/Gvawi54NoOjePuNiQd0btML8sBB2\
+Y0n35EYn44lHZfQGr7GPWpRDHnKh2CpEvoLmS0bmbKvqJZ0UnSuw+xR+u1Zdjbmx3Q43mltDu3vw\
+VQz5lCoflwQYxVk2XE2F1pb6ptSkk8iBri3VnPWb5rzImpp2UWFT34/kbS+TywVpFzSLfrfSJXXM\
+x5IOcOfkM2WRUZHvxOWCy0uNRCMhM5XFqKscF6q4hduZDJ/TdhfFPKwlRsgmuENVp9W66uZdLqrS\
+M6YCV+vCGSAnUz0NT8PKfIHPu1IHWwxutvSrQxQ7gjO3tuokPF/IZHVBLxTnK1QpgMwhE/x1yi6o\
+XhFdYUVKdPRlWWwzeTjxFS+mGMQNXolxyeMWM4YnUDGNfgV+/DEvPNmFxWc4i/K+RjFiK7lWNchO\
+RHd7Cd2jKOnNtXG7freuQ3GnDq6OMmQ6+KHW/HttZhz1wu5q1fpmE6menppkD6enVnUJw73kszjn\
+K7Sz2gFyPob66cNafkcoZ/SRdjaFav1uTPkN0B9FpM6Tp0Y9Fhh01KDI3CkzPK1J4dAe45+f1mfI\
+4zSRmZSWVEyKneIZaLU2Wzc54dXGRKQhmjyvYZEHwRK3fBHXwhdVnLvQe7mkG53ozCWtLqR7+5+7\
+nMo1fqgQztLUF4vqXNDpd+n019npNcz7HgtIUBWHhXjGz2I/mWJEpMSA51JUW9tq4hEpCs4qFPaE\
+efSSrxYMARnFL1G4hPCYZ1Hjo+sCveR36YxSDOhWYjx+pg+i8yLM687xzSNmxUd1LqirsfTcm6JJ\
+BwyPNG9VxL8oXMEn0RmdaUKZwKOjwZ4aumhgKz0WXyHe0e2a5X5Nr/2D472jw3cn9H4RvUh2yHJ/\
+qq024kLSQbOMrtEyaAVFU2mY2v+D5Pjd+T/KpkRpoqOVynsm/nK46/5n27JW8n9m22qV+b91wFLQ\
+rIIG9R5wfqBR7+owrL2xLQ+ae8xxdkwMmnuMWayzEjTfPDoLmm9uV0FzW7lN+rNNXrPw/fSyz6bn\
+f5+byo5lc+PT68M3L35Vr48/47eVl8bXRBeEI3MCFV1XWHbzYb+8P3y1/7kIFaq6zkM2CLguR5Qp\
+qc7rXV+qBh/9BgsCSoJV8xAFW4v1k4yvq3SC3EvmlbTMdquE+iM9XEEX/TwSDodfEXnkjC21NR7R\
+hmgaOw386BfvlFQmx0/u6XOuvf/tG+2v+RTkX7j/t6xeef+zDrhR/1/n6l/Bv3D/j19K/78OKO//\
+/9pwy/q3JQYu6qriD/qBu95/W2ZnZf1vd8v33+uBL17/O/2d7XbLMQzH4z2r2y7Wf3a+m/fOznPz\
+7+r81un16ei2VRToDIfnGObYXho6dOfoTSJXvXGOh+pBbkd90rtderULMmbT8AzkhaS7P7DtouSM\
+RIQB8ZBr8B9ZFCd5InEY5SLoFyuSc/XLFc8ZEQknkiOQfjiChOFHEA0tEFEauqeLCFJEgH+G+Mdl\
+GBViZM4DDE7tgIkhtz2XbvbwP448pWFWOF1NKU/GiT/hQB/DCQwnVLAFBrt4jrOHPFGt+d/Ic9kF\
+oAkGENPn6WqGO6ZkGRQrEuQoTTDIDNU7aDz7JcwZgxvYfkL5dW7HI1csRtILKL5kJOVGHtF8mLRR\
+SWdM7P5jE8vqlzkVrHHOlObszVyFFbgE6pAIW47+oSnNhjb2G3GcrFJyZfPV4ZuDN2/pN0WzUZXN\
+GYXv/qc2/5Zwjf+3jLbR+rPP/2Z5/l8L3Kj/9e3/rU6vfXX/L/M/a4Ev3v/5gLfdHdz/WbvdG2zf\
+b//f6Xfaav9XhR7t/7Md5tadojDBytKuM6vV1FU/lwlUzjev6wC7cH7B5ePs7ZQi6LAEnj4lBl3u\
+SYN+c2o/2zt4+1zTN/KL95fPPhzYxwdv9p8fvjoAU4O8A2jg+d/XNnXt+u/8Wf7fsjC4zPI/5fvf\
+tcCN+v9T/L9lYQfl/ztl/mctUPr/0v+7TZkIP7angsUxF1+dxh3+3zTN7ZXzX3sb3UC5/tcAGz+o\
+/7MG3bxRMoM2AE3bgGMyiOyeLQrVm6YAvChw1cN2mVAiQT0m/uALejw9iM4huxbLeyGKJFKv64Gp\
+9AouQF/CIB3OXxpMp1PjbDbeiMSwmfjOmCfNHdwRNG32ZiDhk5hYqc6r6Gua+IGsapoyXlzolY1P\
+6qXHgOHyZxNe22zVPxs4s4qmqYfL2OfZ0YsPhuD00ODTpXcJ3u4/m3/Xm/DZmLBYvQhhYkhP1+hZ\
+8y6c5JQN+qV7VRGqZo2GE0SSa9njkvfEieHE9Av8hmqlFynY+BuWG1T7UaNHIFr+dLRgJEsqLTMC\
+W/kra2To02XSiC7pFRiig8+alobYIikNhjKpgWKoAQ8LtPT2hp+jKzetbUXQiVyOxDZ/Mqg6+6V5\
+LgyDM2eUPZUhHiPhq3nPpyMmqnJ1isXssiHZtBRNovV9+cYSSiihhBJKKKGEEkoooYQSSiihhBJK\
+KKGEEkoooYQSSiihhBJKKKGEEkoooYQSSiihhH9H+D9i0BbqAHgAAA==\
 | base64 -d | tar xzC /tmp
 
 # Import patch files for ruby and gems
@@ -105,8 +106,10 @@ ENV BASH_ENV /etc/rubybashrc
 # install rubies and fix permissions on
 RUN bash -c " \
     export CFLAGS='-s -O3 -fno-fast-math -fPIC' && \
-    for v in 2.3.0 ; do \
-        rvm install \$v --patch \$(echo ~/patches/ruby-\$v/* | tr ' ' ','); \
+    echo 'about to install patches for ruby 2.4.0 from:' && \
+    ls -r ~/patches && \
+    for v in 2.4.0 ; do \
+	rvm install \$v --patch \$(echo ~/patches/ruby-\$v/* | tr ' ' ','); \
     done && \
     rvm cleanup all && \
     find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw "
@@ -116,7 +119,7 @@ RUN bash -c " \
 RUN echo "gem: --no-ri --no-rdoc" >> ~/.gemrc && \
     bash -c " \
         rvm all do gem install bundler rake-compiler hoe mini_portile rubygems-tasks && \
-        rvm 2.3.0 do gem install mini_portile2 && \
+        rvm 2.4.0 do gem install mini_portile2 && \
         find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw "
 
 # Install rake-compiler's cross rubies in global dir instead of /root
@@ -125,11 +128,14 @@ RUN sudo mkdir -p /usr/local/rake-compiler && \
     ln -s /usr/local/rake-compiler ~/.rake-compiler
 
 # Patch rake-compiler to avoid build of ruby extensions
-RUN cd /usr/local/rvm/gems/ruby-2.3.0/gems/rake-compiler-0.9.5 && git apply /home/rvm/patches/rake-compiler-0.9.5/*.diff ; \
+RUN cd /usr/local/rvm/gems/ruby-2.4.0/gems/rake-compiler-0.9.5 && git apply /home/rvm/patches/rake-compiler-0.9.5/*.diff ; \
     true
 
-RUN bash -c "rvm use 2.3.0 --default && \
+RUN bash -c "rvm use 2.4.0 --default && \
     export MAKE=\"make -j`nproc`\" CFLAGS='-s -O1 -fno-omit-frame-pointer -fno-fast-math' && \
+    rake-compiler cross-ruby VERSION=2.4.0 HOST=i686-w64-mingw32 && \
+    rake-compiler cross-ruby VERSION=2.4.0 HOST=x86_64-w64-mingw32 && \
+    rake-compiler cross-ruby VERSION=2.4.0 HOST=x86_64-linux-gnu && \
     rake-compiler cross-ruby VERSION=2.3.0 HOST=i686-w64-mingw32 && \
     rake-compiler cross-ruby VERSION=2.3.0 HOST=x86_64-w64-mingw32 && \
     rake-compiler cross-ruby VERSION=2.3.0 HOST=x86_64-linux-gnu && \
@@ -145,8 +151,9 @@ RUN bash -c "rvm use 2.3.0 --default && \
     rm -rf ~/.rake-compiler/tmp/builds ~/.rake-compiler/sources && \
     find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw "
 
-RUN bash -c "rvm use 2.3.0 --default && \
+RUN bash -c "rvm use 2.4.0 --default && \
     export MAKE=\"make -j`nproc`\" CFLAGS='-m32 -s -O1 -fno-omit-frame-pointer -fno-fast-math' LDFLAGS='-m32' && \
+    rake-compiler cross-ruby VERSION=2.4.0 HOST=i686-linux-gnu && \
     rake-compiler cross-ruby VERSION=2.3.0 HOST=i686-linux-gnu && \
     rake-compiler cross-ruby VERSION=2.2.2 HOST=i686-linux-gnu && \
     rake-compiler cross-ruby VERSION=2.1.5 HOST=i686-linux-gnu && \
@@ -155,7 +162,7 @@ RUN bash -c "rvm use 2.3.0 --default && \
     find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw "
 
 RUN bash -c " \
-    rvm alias create 2.3 2.3.0 "
+    rvm alias create 2.4 2.4.0 "
 
 USER root
 
@@ -167,6 +174,7 @@ RUN sed -i -- "s:/root/.rake-compiler:/usr/local/rake-compiler:g" /usr/local/rak
 
 # Install wrappers for strip commands as a workaround for "Protocol error" in boot2docker.
 RUN cp /tmp/build/strip_wrapper /root/
+RUN sudo chmod +rx /root/strip_wrapper
 RUN mv /opt/mingw/mingw32/bin/i686-w64-mingw32-strip /opt/mingw/mingw32/bin/i686-w64-mingw32-strip.bin && \
     mv /opt/mingw/mingw64/bin/x86_64-w64-mingw32-strip /opt/mingw/mingw64/bin/x86_64-w64-mingw32-strip.bin && \
     mv /usr/bin/i686-w64-mingw32-strip /usr/bin/i686-w64-mingw32-strip.bin && \
@@ -196,6 +204,6 @@ RUN cp /tmp/build/runas /usr/local/bin/
 # Install sudoers configuration
 RUN cp /tmp/build/sudoers /etc/sudoers.d/rake-compiler-dock
 
-ENV RUBY_CC_VERSION 2.3.0:2.2.2:2.1.5:2.0.0
+ENV RUBY_CC_VERSION 2.4.0:2.3.0:2.2.2:2.1.5:2.0.0
 
 CMD bash
diff --git a/third_party/rake-compiler-dock/build/patches/ruby-2.4.0/no_sendfile.patch b/third_party/rake-compiler-dock/build/patches/ruby-2.4.0/no_sendfile.patch
new file mode 100644
index 00000000000..915fc7b790f
--- /dev/null
+++ b/third_party/rake-compiler-dock/build/patches/ruby-2.4.0/no_sendfile.patch
@@ -0,0 +1,12 @@
+diff --git a/configure b/configure
+index ebe3d8c..a336b73 100755
+--- a/configure
++++ b/configure
+@@ -18943,7 +18943,6 @@ do :
+   ac_fn_c_check_func "$LINENO" "sendfile" "ac_cv_func_sendfile"
+ if test "x$ac_cv_func_sendfile" = xyes; then :
+   cat >>confdefs.h <<_ACEOF
+-#define HAVE_SENDFILE 1
+ _ACEOF
+ 
+ fi

From b230ba870e979699d21f5496990fe76bbc23bb1c Mon Sep 17 00:00:00 2001
From: "Nicolas \"Pixel\" Noble" <pixel@nobis-crew.org>
Date: Mon, 30 Jan 2017 19:27:19 +0100
Subject: [PATCH 20/52] Add ruby 2.4.0 targets to Rakefile.

---
 Rakefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Rakefile b/Rakefile
index c8bca20ad1d..f8028e596fd 100755
--- a/Rakefile
+++ b/Rakefile
@@ -107,10 +107,10 @@ task 'gem:native' do
   if RUBY_PLATFORM =~ /darwin/
     FileUtils.touch 'grpc_c.32.ruby'
     FileUtils.touch 'grpc_c.64.ruby'
-    system "rake cross native gem RUBY_CC_VERSION=2.3.0:2.2.2:2.1.5:2.0.0 V=#{verbose} GRPC_CONFIG=#{grpc_config}"
+    system "rake cross native gem RUBY_CC_VERSION=2.4.0:2.3.0:2.2.2:2.1.5:2.0.0 V=#{verbose} GRPC_CONFIG=#{grpc_config}"
   else
     Rake::Task['dlls'].execute
-    docker_for_windows "bundle && rake cross native gem RUBY_CC_VERSION=2.3.0:2.2.2:2.1.5:2.0.0 V=#{verbose} GRPC_CONFIG=#{grpc_config}"
+    docker_for_windows "bundle && rake cross native gem RUBY_CC_VERSION=2.4.0:2.3.0:2.2.2:2.1.5:2.0.0 V=#{verbose} GRPC_CONFIG=#{grpc_config}"
   end
 end
 

From a1fa5a3381d2d28e82261cb1efb634696debd501 Mon Sep 17 00:00:00 2001
From: Alexander Polcyn <apolcyn@google.com>
Date: Mon, 9 Jan 2017 17:34:36 -0800
Subject: [PATCH 21/52] fix missing static ruby lib on 2.4.0

---
 third_party/rake-compiler-dock/Dockerfile | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/third_party/rake-compiler-dock/Dockerfile b/third_party/rake-compiler-dock/Dockerfile
index 2cc4d410dfc..115cb1c3825 100644
--- a/third_party/rake-compiler-dock/Dockerfile
+++ b/third_party/rake-compiler-dock/Dockerfile
@@ -122,13 +122,16 @@ RUN echo "gem: --no-ri --no-rdoc" >> ~/.gemrc && \
         rvm 2.4.0 do gem install mini_portile2 && \
         find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw "
 
+RUN bash -c "gem env"
+RUN bash -c "gem list rake-compiler"
+
 # Install rake-compiler's cross rubies in global dir instead of /root
 RUN sudo mkdir -p /usr/local/rake-compiler && \
     sudo chown rvm.rvm /usr/local/rake-compiler && \
     ln -s /usr/local/rake-compiler ~/.rake-compiler
 
 # Patch rake-compiler to avoid build of ruby extensions
-RUN cd /usr/local/rvm/gems/ruby-2.4.0/gems/rake-compiler-0.9.5 && git apply /home/rvm/patches/rake-compiler-0.9.5/*.diff ; \
+RUN cd /usr/local/rvm/gems/ruby-2.4.0/gems/rake-compiler-1.0.3 && git apply /home/rvm/patches/rake-compiler-1.0.3/*.diff ; \
     true
 
 RUN bash -c "rvm use 2.4.0 --default && \
@@ -204,6 +207,10 @@ RUN cp /tmp/build/runas /usr/local/bin/
 # Install sudoers configuration
 RUN cp /tmp/build/sudoers /etc/sudoers.d/rake-compiler-dock
 
+# Fixup Ruby 2.4 'static' compilation issue.
+RUN echo '!<arch>' > /usr/local/rake-compiler/ruby/x86_64-linux-gnu/ruby-2.4.0/lib/libruby.a
+RUN echo '!<arch>' > /usr/local/rake-compiler/ruby/i686-linux-gnu/ruby-2.4.0/lib/libruby.a
+
 ENV RUBY_CC_VERSION 2.4.0:2.3.0:2.2.2:2.1.5:2.0.0
 
 CMD bash

From 299fa6ee02eafdf32075a71588795273e7b57c38 Mon Sep 17 00:00:00 2001
From: Alexander Polcyn <apolcyn@google.com>
Date: Mon, 9 Jan 2017 17:35:26 -0800
Subject: [PATCH 22/52] revert update of rake-compiler for lack of effect

---
 third_party/rake-compiler-dock/Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/third_party/rake-compiler-dock/Dockerfile b/third_party/rake-compiler-dock/Dockerfile
index 115cb1c3825..475c6a8d3db 100644
--- a/third_party/rake-compiler-dock/Dockerfile
+++ b/third_party/rake-compiler-dock/Dockerfile
@@ -131,7 +131,7 @@ RUN sudo mkdir -p /usr/local/rake-compiler && \
     ln -s /usr/local/rake-compiler ~/.rake-compiler
 
 # Patch rake-compiler to avoid build of ruby extensions
-RUN cd /usr/local/rvm/gems/ruby-2.4.0/gems/rake-compiler-1.0.3 && git apply /home/rvm/patches/rake-compiler-1.0.3/*.diff ; \
+RUN cd /usr/local/rvm/gems/ruby-2.4.0/gems/rake-compiler-0.9.5 && git apply /home/rvm/patches/rake-compiler-0.9.5/*.diff ; \
     true
 
 RUN bash -c "rvm use 2.4.0 --default && \

From 8c6d754a9672bdf6a2384e80e56d7c74e1d6b830 Mon Sep 17 00:00:00 2001
From: Muxi Yan <mxyan@google.com>
Date: Mon, 30 Jan 2017 11:57:07 -0800
Subject: [PATCH 23/52] Update protoc dependency version in template

---
 .../src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template b/templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template
index 80420af7db2..3a10cfab3cc 100644
--- a/templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template
+++ b/templates/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec.template
@@ -103,7 +103,7 @@
     s.preserve_paths = plugin
 
     # Restrict the protoc version to the one supported by this plugin.
-    s.dependency '!ProtoCompiler', '3.0.2'
+    s.dependency '!ProtoCompiler', '3.1.0'
     # For the Protobuf dependency not to complain:
     s.ios.deployment_target = '7.1'
     s.osx.deployment_target = '10.9'

From 0aace0778cfd137147639797e5e58071d4708e64 Mon Sep 17 00:00:00 2001
From: Muxi Yan <mxyan@google.com>
Date: Mon, 30 Jan 2017 13:28:31 -0800
Subject: [PATCH 24/52] Advance objc version to v1.1.0

---
 gRPC-Core.podspec                                 | 2 +-
 gRPC-ProtoRPC.podspec                             | 2 +-
 gRPC-RxLibrary.podspec                            | 2 +-
 gRPC.podspec                                      | 2 +-
 src/objective-c/!ProtoCompiler-gRPCPlugin.podspec | 2 +-
 src/objective-c/GRPCClient/private/GRPCHost.m     | 2 +-
 templates/gRPC-Core.podspec.template              | 2 +-
 7 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
index 1bbd5612e3d..ae708a64489 100644
--- a/gRPC-Core.podspec
+++ b/gRPC-Core.podspec
@@ -35,7 +35,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC-Core'
-  version = '1.1.0-pre1'
+  version = '1.1.0'
   s.version  = version
   s.summary  = 'Core cross-platform gRPC library, written in C'
   s.homepage = 'http://www.grpc.io'
diff --git a/gRPC-ProtoRPC.podspec b/gRPC-ProtoRPC.podspec
index 964d1840c23..496157c95f4 100644
--- a/gRPC-ProtoRPC.podspec
+++ b/gRPC-ProtoRPC.podspec
@@ -30,7 +30,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC-ProtoRPC'
-  version = '1.1.0-pre1'
+  version = '1.1.0'
   s.version  = version
   s.summary  = 'RPC library for Protocol Buffers, based on gRPC'
   s.homepage = 'http://www.grpc.io'
diff --git a/gRPC-RxLibrary.podspec b/gRPC-RxLibrary.podspec
index eca3ab3d75e..e88595823d6 100644
--- a/gRPC-RxLibrary.podspec
+++ b/gRPC-RxLibrary.podspec
@@ -30,7 +30,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC-RxLibrary'
-  version = '1.1.0-pre1'
+  version = '1.1.0'
   s.version  = version
   s.summary  = 'Reactive Extensions library for iOS/OSX.'
   s.homepage = 'http://www.grpc.io'
diff --git a/gRPC.podspec b/gRPC.podspec
index 77efd0fc6ae..61398a26515 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -30,7 +30,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC'
-  version = '1.1.0-pre1'
+  version = '1.1.0'
   s.version  = version
   s.summary  = 'gRPC client library for iOS/OSX'
   s.homepage = 'http://www.grpc.io'
diff --git a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
index c6917aa5b6a..c40e77e98ed 100644
--- a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
+++ b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
@@ -36,7 +36,7 @@ Pod::Spec.new do |s|
   # exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed
   # before them.
   s.name     = '!ProtoCompiler-gRPCPlugin'
-  v = '1.1.0-pre1'
+  v = '1.1.0'
   s.version  = v
   s.summary  = 'The gRPC ProtoC plugin generates Objective-C files from .proto services.'
   s.description = <<-DESC
diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m
index a57bd8fc2f9..c7efdf1f03c 100644
--- a/src/objective-c/GRPCClient/private/GRPCHost.m
+++ b/src/objective-c/GRPCClient/private/GRPCHost.m
@@ -50,7 +50,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 // TODO(jcanizales): Generate the version in a standalone header, from templates. Like
 // templates/src/core/surface/version.c.template .
-#define GRPC_OBJC_VERSION_STRING @"1.1.0-pre1"
+#define GRPC_OBJC_VERSION_STRING @"1.1.0"
 
 static NSMutableDictionary *kHostCache;
 
diff --git a/templates/gRPC-Core.podspec.template b/templates/gRPC-Core.podspec.template
index f15d0efc17d..5bfa1e8a184 100644
--- a/templates/gRPC-Core.podspec.template
+++ b/templates/gRPC-Core.podspec.template
@@ -62,7 +62,7 @@
   %>
   Pod::Spec.new do |s|
     s.name     = 'gRPC-Core'
-    version = '1.1.0-pre1'
+    version = '1.1.0'
     s.version  = version
     s.summary  = 'Core cross-platform gRPC library, written in C'
     s.homepage = 'http://www.grpc.io'

From 4dcb7862bf6dc2c8bb1cb5c74d3be14fc34022fa Mon Sep 17 00:00:00 2001
From: "Nicolas \"Pixel\" Noble" <pixel@nobis-crew.org>
Date: Mon, 30 Jan 2017 23:28:06 +0100
Subject: [PATCH 25/52] Flagging version 1.1.0.

---
 CMakeLists.txt                                    | 2 +-
 Makefile                                          | 6 +++---
 build.yaml                                        | 4 ++--
 package.json                                      | 2 +-
 package.xml                                       | 4 ++--
 src/core/lib/surface/version.c                    | 2 +-
 src/cpp/common/version_cc.cc                      | 2 +-
 src/csharp/Grpc.Auth/project.json                 | 4 ++--
 src/csharp/Grpc.Core/VersionInfo.cs               | 2 +-
 src/csharp/Grpc.Core/project.json                 | 2 +-
 src/csharp/Grpc.HealthCheck/project.json          | 4 ++--
 src/csharp/Grpc.Reflection/project.json           | 4 ++--
 src/csharp/build_packages_dotnetcli.bat           | 2 +-
 src/csharp/build_packages_dotnetcli.sh            | 4 ++--
 src/node/health_check/package.json                | 4 ++--
 src/node/tools/package.json                       | 2 +-
 src/python/grpcio/grpc_version.py                 | 2 +-
 src/python/grpcio_health_checking/grpc_version.py | 2 +-
 src/python/grpcio_reflection/grpc_version.py      | 2 +-
 src/python/grpcio_tests/grpc_version.py           | 2 +-
 src/ruby/lib/grpc/version.rb                      | 2 +-
 src/ruby/tools/version.rb                         | 2 +-
 tools/distrib/python/grpcio_tools/grpc_version.py | 2 +-
 tools/doxygen/Doxyfile.c++                        | 2 +-
 tools/doxygen/Doxyfile.c++.internal               | 2 +-
 tools/doxygen/Doxyfile.core                       | 2 +-
 tools/doxygen/Doxyfile.core.internal              | 2 +-
 27 files changed, 36 insertions(+), 36 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 01134502ad8..071cbd7768a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -42,7 +42,7 @@
 cmake_minimum_required(VERSION 2.8)
 
 set(PACKAGE_NAME      "grpc")
-set(PACKAGE_VERSION   "1.1.0-pre1")
+set(PACKAGE_VERSION   "1.1.0")
 set(PACKAGE_STRING    "${PACKAGE_NAME} ${PACKAGE_VERSION}")
 set(PACKAGE_TARNAME   "${PACKAGE_NAME}-${PACKAGE_VERSION}")
 set(PACKAGE_BUGREPORT "https://github.com/grpc/grpc/issues/")
diff --git a/Makefile b/Makefile
index fa5c58dce21..122bc302f53 100644
--- a/Makefile
+++ b/Makefile
@@ -441,9 +441,9 @@ E = @echo
 Q = @
 endif
 
-CORE_VERSION = 2.0.0-pre1
-CPP_VERSION = 1.1.0-pre1
-CSHARP_VERSION = 1.1.0-pre1
+CORE_VERSION = 2.0.0
+CPP_VERSION = 1.1.0
+CSHARP_VERSION = 1.1.0
 
 CPPFLAGS_NO_ARCH += $(addprefix -I, $(INCLUDES)) $(addprefix -D, $(DEFINES))
 CPPFLAGS += $(CPPFLAGS_NO_ARCH) $(ARCH_FLAGS)
diff --git a/build.yaml b/build.yaml
index 96f37918c00..edc53993658 100644
--- a/build.yaml
+++ b/build.yaml
@@ -12,9 +12,9 @@ settings:
   '#08': Use "-preN" suffixes to identify pre-release versions
   '#09': Per-language overrides are possible with (eg) ruby_version tag here
   '#10': See the expand_version.py for all the quirks here
-  core_version: 2.0.0-pre1
+  core_version: 2.0.0
   g_stands_for: good
-  version: 1.1.0-pre1
+  version: 1.1.0
 filegroups:
 - name: census
   public_headers:
diff --git a/package.json b/package.json
index c5cb6abdffa..c7cd67047ba 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "grpc",
-  "version": "1.1.0-pre1",
+  "version": "1.1.0",
   "author": "Google Inc.",
   "description": "gRPC Library for Node",
   "homepage": "http://www.grpc.io/",
diff --git a/package.xml b/package.xml
index 3e00de27921..75ff60ef90a 100644
--- a/package.xml
+++ b/package.xml
@@ -13,8 +13,8 @@
  <date>2017-01-13</date>
  <time>16:06:07</time>
  <version>
-  <release>1.1.0RC1</release>
-  <api>1.1.0RC1</api>
+  <release>1.1.0</release>
+  <api>1.1.0</api>
  </version>
  <stability>
   <release>beta</release>
diff --git a/src/core/lib/surface/version.c b/src/core/lib/surface/version.c
index 6ab1a84f35c..ed6fd96b4ad 100644
--- a/src/core/lib/surface/version.c
+++ b/src/core/lib/surface/version.c
@@ -36,6 +36,6 @@
 
 #include <grpc/grpc.h>
 
-const char *grpc_version_string(void) { return "2.0.0-pre1"; }
+const char *grpc_version_string(void) { return "2.0.0"; }
 
 const char *grpc_g_stands_for(void) { return "good"; }
diff --git a/src/cpp/common/version_cc.cc b/src/cpp/common/version_cc.cc
index 1a35e2c243b..481e6739098 100644
--- a/src/cpp/common/version_cc.cc
+++ b/src/cpp/common/version_cc.cc
@@ -37,5 +37,5 @@
 #include <grpc++/grpc++.h>
 
 namespace grpc {
-grpc::string Version() { return "1.1.0-pre1"; }
+grpc::string Version() { return "1.1.0"; }
 }
diff --git a/src/csharp/Grpc.Auth/project.json b/src/csharp/Grpc.Auth/project.json
index b83aa9ab7e3..af9ef05871b 100644
--- a/src/csharp/Grpc.Auth/project.json
+++ b/src/csharp/Grpc.Auth/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.0-pre1",
+  "version": "1.1.0",
   "title": "gRPC C# Auth",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2015, Google Inc.",
@@ -21,7 +21,7 @@
     }
   },
   "dependencies": {
-    "Grpc.Core": "1.1.0-pre1",
+    "Grpc.Core": "1.1.0",
     "Google.Apis.Auth": "1.16.0"
   },
   "frameworks": {
diff --git a/src/csharp/Grpc.Core/VersionInfo.cs b/src/csharp/Grpc.Core/VersionInfo.cs
index 46bbe9b4a88..ed805d87dcb 100644
--- a/src/csharp/Grpc.Core/VersionInfo.cs
+++ b/src/csharp/Grpc.Core/VersionInfo.cs
@@ -53,6 +53,6 @@ namespace Grpc.Core
         /// <summary>
         /// Current version of gRPC C#
         /// </summary>
-        public const string CurrentVersion = "1.1.0-pre1";
+        public const string CurrentVersion = "1.1.0";
     }
 }
diff --git a/src/csharp/Grpc.Core/project.json b/src/csharp/Grpc.Core/project.json
index 2cd678b3b1e..ca62c7d56dd 100644
--- a/src/csharp/Grpc.Core/project.json
+++ b/src/csharp/Grpc.Core/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.0-pre1",
+  "version": "1.1.0",
   "title": "gRPC C# Core",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2015, Google Inc.",
diff --git a/src/csharp/Grpc.HealthCheck/project.json b/src/csharp/Grpc.HealthCheck/project.json
index d34335e5963..7d7c8ab1dae 100644
--- a/src/csharp/Grpc.HealthCheck/project.json
+++ b/src/csharp/Grpc.HealthCheck/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.0-pre1",
+  "version": "1.1.0",
   "title": "gRPC C# Healthchecking",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2015, Google Inc.",
@@ -21,7 +21,7 @@
     }
   },
   "dependencies": {
-    "Grpc.Core": "1.1.0-pre1",
+    "Grpc.Core": "1.1.0",
     "Google.Protobuf": "3.0.0"
   },
   "frameworks": {
diff --git a/src/csharp/Grpc.Reflection/project.json b/src/csharp/Grpc.Reflection/project.json
index c10125457e6..bf63dcbf1ff 100644
--- a/src/csharp/Grpc.Reflection/project.json
+++ b/src/csharp/Grpc.Reflection/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.0-pre1",
+  "version": "1.1.0",
   "title": "gRPC C# Reflection",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2016, Google Inc.",
@@ -21,7 +21,7 @@
     }
   },
   "dependencies": {
-    "Grpc.Core": "1.1.0-pre1",
+    "Grpc.Core": "1.1.0",
     "Google.Protobuf": "3.0.0"
   },
   "frameworks": {
diff --git a/src/csharp/build_packages_dotnetcli.bat b/src/csharp/build_packages_dotnetcli.bat
index 9e4b0664435..37046da8339 100755
--- a/src/csharp/build_packages_dotnetcli.bat
+++ b/src/csharp/build_packages_dotnetcli.bat
@@ -28,7 +28,7 @@
 @rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 @rem Current package versions
-set VERSION=1.1.0-pre1
+set VERSION=1.1.0
 set PROTOBUF_VERSION=3.0.0
 
 @rem Adjust the location of nuget.exe
diff --git a/src/csharp/build_packages_dotnetcli.sh b/src/csharp/build_packages_dotnetcli.sh
index e9bb42bd5cf..e42e546ca35 100755
--- a/src/csharp/build_packages_dotnetcli.sh
+++ b/src/csharp/build_packages_dotnetcli.sh
@@ -65,7 +65,7 @@ dotnet pack --configuration Release Grpc.Auth/project.json --output ../../artifa
 dotnet pack --configuration Release Grpc.HealthCheck/project.json --output ../../artifacts
 dotnet pack --configuration Release Grpc.Reflection/project.json --output ../../artifacts
 
-nuget pack Grpc.nuspec -Version "1.1.0-pre1" -OutputDirectory ../../artifacts
-nuget pack Grpc.Tools.nuspec -Version "1.1.0-pre1" -OutputDirectory ../../artifacts
+nuget pack Grpc.nuspec -Version "1.1.0" -OutputDirectory ../../artifacts
+nuget pack Grpc.Tools.nuspec -Version "1.1.0" -OutputDirectory ../../artifacts
 
 (cd ../../artifacts && zip csharp_nugets_dotnetcli.zip *.nupkg)
diff --git a/src/node/health_check/package.json b/src/node/health_check/package.json
index c67f6d4c8b3..ad66b0f10c0 100644
--- a/src/node/health_check/package.json
+++ b/src/node/health_check/package.json
@@ -1,6 +1,6 @@
 {
   "name": "grpc-health-check",
-  "version": "1.1.0-pre1",
+  "version": "1.1.0",
   "author": "Google Inc.",
   "description": "Health check service for use with gRPC",
   "repository": {
@@ -15,7 +15,7 @@
     }
   ],
   "dependencies": {
-    "grpc": "^1.1.0-pre1",
+    "grpc": "^1.1.0",
     "lodash": "^3.9.3",
     "google-protobuf": "^3.0.0"
   },
diff --git a/src/node/tools/package.json b/src/node/tools/package.json
index b99628a52ad..c5121f76893 100644
--- a/src/node/tools/package.json
+++ b/src/node/tools/package.json
@@ -1,6 +1,6 @@
 {
   "name": "grpc-tools",
-  "version": "1.1.0-pre1",
+  "version": "1.1.0",
   "author": "Google Inc.",
   "description": "Tools for developing with gRPC on Node.js",
   "homepage": "http://www.grpc.io/",
diff --git a/src/python/grpcio/grpc_version.py b/src/python/grpcio/grpc_version.py
index 9642427ab52..d9c7c2da558 100644
--- a/src/python/grpcio/grpc_version.py
+++ b/src/python/grpcio/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc_version.py.template`!!!
 
-VERSION='1.1.0rc1'
+VERSION='1.1.0'
diff --git a/src/python/grpcio_health_checking/grpc_version.py b/src/python/grpcio_health_checking/grpc_version.py
index 24971c07723..a0c88c36669 100644
--- a/src/python/grpcio_health_checking/grpc_version.py
+++ b/src/python/grpcio_health_checking/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_health_checking/grpc_version.py.template`!!!
 
-VERSION='1.1.0rc1'
+VERSION='1.1.0'
diff --git a/src/python/grpcio_reflection/grpc_version.py b/src/python/grpcio_reflection/grpc_version.py
index b8145fcfaad..980b96312c9 100644
--- a/src/python/grpcio_reflection/grpc_version.py
+++ b/src/python/grpcio_reflection/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_reflection/grpc_version.py.template`!!!
 
-VERSION='1.1.0rc1'
+VERSION='1.1.0'
diff --git a/src/python/grpcio_tests/grpc_version.py b/src/python/grpcio_tests/grpc_version.py
index 24536b634e0..f0c766a2134 100644
--- a/src/python/grpcio_tests/grpc_version.py
+++ b/src/python/grpcio_tests/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_tests/grpc_version.py.template`!!!
 
-VERSION='1.1.0rc1'
+VERSION='1.1.0'
diff --git a/src/ruby/lib/grpc/version.rb b/src/ruby/lib/grpc/version.rb
index f6da257a783..a0230fb2758 100644
--- a/src/ruby/lib/grpc/version.rb
+++ b/src/ruby/lib/grpc/version.rb
@@ -29,5 +29,5 @@
 
 # GRPC contains the General RPC module.
 module GRPC
-  VERSION = '1.1.0.pre1'
+  VERSION = '1.1.0'
 end
diff --git a/src/ruby/tools/version.rb b/src/ruby/tools/version.rb
index 2331f9d7ebe..ad572e77b38 100644
--- a/src/ruby/tools/version.rb
+++ b/src/ruby/tools/version.rb
@@ -29,6 +29,6 @@
 
 module GRPC
   module Tools
-    VERSION = '1.1.0.pre1'
+    VERSION = '1.1.0'
   end
 end
diff --git a/tools/distrib/python/grpcio_tools/grpc_version.py b/tools/distrib/python/grpcio_tools/grpc_version.py
index 4ee3f5380f9..7e64b4989fc 100644
--- a/tools/distrib/python/grpcio_tools/grpc_version.py
+++ b/tools/distrib/python/grpcio_tools/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!!
 
-VERSION='1.1.0rc1'
+VERSION='1.1.0'
diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++
index e30a504319a..1a4af5f96ec 100644
--- a/tools/doxygen/Doxyfile.c++
+++ b/tools/doxygen/Doxyfile.c++
@@ -40,7 +40,7 @@ PROJECT_NAME           = "GRPC C++"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 1.1.0-pre1
+PROJECT_NUMBER         = 1.1.0
 
 # 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
diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal
index 1e112accfed..3101f1d4104 100644
--- a/tools/doxygen/Doxyfile.c++.internal
+++ b/tools/doxygen/Doxyfile.c++.internal
@@ -40,7 +40,7 @@ PROJECT_NAME           = "GRPC C++"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 1.1.0-pre1
+PROJECT_NUMBER         = 1.1.0
 
 # 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
diff --git a/tools/doxygen/Doxyfile.core b/tools/doxygen/Doxyfile.core
index e2dc9c75b97..7770f84eddc 100644
--- a/tools/doxygen/Doxyfile.core
+++ b/tools/doxygen/Doxyfile.core
@@ -40,7 +40,7 @@ PROJECT_NAME           = "GRPC Core"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 2.0.0-pre1
+PROJECT_NUMBER         = 2.0.0
 
 # 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
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index acb37074247..6e2eed83e65 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -40,7 +40,7 @@ PROJECT_NAME           = "GRPC Core"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 2.0.0-pre1
+PROJECT_NUMBER         = 2.0.0
 
 # 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

From a171538b92994ccabf55c353f2a136db5563455c Mon Sep 17 00:00:00 2001
From: murgatroid99 <mlumish@google.com>
Date: Mon, 30 Jan 2017 16:52:17 -0800
Subject: [PATCH 26/52] Node: Validate arguments to addService, fix a couple of
 minor issues

---
 src/node/src/client.js | 9 ++++-----
 src/node/src/server.js | 8 +++++++-
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/node/src/client.js b/src/node/src/client.js
index 134ef239c25..44081a3a6cd 100644
--- a/src/node/src/client.js
+++ b/src/node/src/client.js
@@ -108,7 +108,7 @@ function _write(chunk, encoding, callback) {
        but passing an object that causes a serialization failure is a misuse
        of the API anyway, so that's OK. The primary purpose here is to give the
        programmer a useful error and to stop the stream properly */
-    this.call.cancelWithStatus(grpc.status.INTERNAL, "Serialization failure");
+    this.call.cancelWithStatus(grpc.status.INTERNAL, 'Serialization failure');
     callback(e);
   }
   if (_.isFinite(encoding)) {
@@ -831,13 +831,12 @@ exports.waitForClientReady = function(client, deadline, callback) {
  */
 exports.makeProtobufClientConstructor =  function(service, options) {
   var method_attrs = common.getProtobufServiceAttrs(service, options);
-  var deprecatedArgumentOrder = false;
-  if (options) {
-    deprecatedArgumentOrder = options.deprecatedArgumentOrder;
+  if (!options) {
+    options = {deprecatedArgumentOrder: false};
   }
   var Client = exports.makeClientConstructor(
       method_attrs, common.fullyQualifiedName(service),
-      deprecatedArgumentOrder);
+      options);
   Client.service = service;
   Client.service.grpc_options = options;
   return Client;
diff --git a/src/node/src/server.js b/src/node/src/server.js
index da9c6b2d7ff..d501e76c67d 100644
--- a/src/node/src/server.js
+++ b/src/node/src/server.js
@@ -728,11 +728,17 @@ var defaultHandler = {
  *     method implementation for the provided service.
  */
 Server.prototype.addService = function(service, implementation) {
+  if (!_.isObjectLike(service) || !_.isObjectLike(implementation)) {
+    throw new Error('addService requires two objects as arguments');
+  }
+  if (_.keys(service).length === 0) {
+    throw new Error('Cannot add an empty service to a server');
+  }
   if (this.started) {
     throw new Error('Can\'t add a service to a started server.');
   }
   var self = this;
-  _.each(service, function(attrs, name) {
+  _.forOwn(service, function(attrs, name) {
     var method_type;
     if (attrs.requestStream) {
       if (attrs.responseStream) {

From c73089643ee496746dcf684611c07ea3f91eb845 Mon Sep 17 00:00:00 2001
From: murgatroid99 <mlumish@google.com>
Date: Tue, 31 Jan 2017 09:00:01 -0800
Subject: [PATCH 27/52] Add tcp_client_uv tracing

---
 src/core/lib/iomgr/tcp_client_uv.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/core/lib/iomgr/tcp_client_uv.c b/src/core/lib/iomgr/tcp_client_uv.c
index 5225a5402b2..3de0795187b 100644
--- a/src/core/lib/iomgr/tcp_client_uv.c
+++ b/src/core/lib/iomgr/tcp_client_uv.c
@@ -46,6 +46,8 @@
 #include "src/core/lib/iomgr/tcp_uv.h"
 #include "src/core/lib/iomgr/timer.h"
 
+extern int grpc_tcp_trace;
+
 typedef struct grpc_uv_tcp_connect {
   uv_connect_t connect_req;
   grpc_timer alarm;
@@ -70,6 +72,12 @@ static void uv_tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp,
                            grpc_error *error) {
   int done;
   grpc_uv_tcp_connect *connect = acp;
+  if (grpc_tcp_trace) {
+    const char *str = grpc_error_string(error);
+    gpr_log(GPR_DEBUG, "CLIENT_CONNECT: %s: on_alarm: error=%s",
+            connect->addr_name, str);
+    grpc_error_free_string(str);
+  }
   if (error == GRPC_ERROR_NONE) {
     /* error == NONE implies that the timer ran out, and wasn't cancelled. If
        it was cancelled, then the handler that cancelled it also should close
@@ -145,6 +153,12 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx,
   connect->resource_quota = resource_quota;
   uv_tcp_init(uv_default_loop(), connect->tcp_handle);
   connect->connect_req.data = connect;
+
+  if (grpc_tcp_trace) {
+    gpr_log(GPR_DEBUG, "CLIENT_CONNECT: %s: asynchronously connecting",
+            connect->addr_name);
+  }
+
   // TODO(murgatroid99): figure out what the return value here means
   uv_tcp_connect(&connect->connect_req, connect->tcp_handle,
                  (const struct sockaddr *)resolved_addr->addr,

From c4ed3b91daee0409734291fe87676358e49621e5 Mon Sep 17 00:00:00 2001
From: murgatroid99 <mlumish@google.com>
Date: Tue, 31 Jan 2017 10:51:06 -0800
Subject: [PATCH 28/52] Fix bugs in UV DNS resolver implementation

---
 src/core/lib/iomgr/resolve_address_uv.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/core/lib/iomgr/resolve_address_uv.c b/src/core/lib/iomgr/resolve_address_uv.c
index 9b5f3209f05..79ff9107389 100644
--- a/src/core/lib/iomgr/resolve_address_uv.c
+++ b/src/core/lib/iomgr/resolve_address_uv.c
@@ -113,14 +113,15 @@ static grpc_error *try_split_host_port(const char *name,
   /* parse name, splitting it into host and port parts */
   grpc_error *error;
   gpr_split_host_port(name, host, port);
-  if (host == NULL) {
+  if (*host == NULL) {
     char *msg;
     gpr_asprintf(&msg, "unparseable host:port: '%s'", name);
     error = GRPC_ERROR_CREATE(msg);
     gpr_free(msg);
     return error;
   }
-  if (port == NULL) {
+  if (*port == NULL) {
+    // TODO(murgatroid99): add tests for this case
     if (default_port == NULL) {
       char *msg;
       gpr_asprintf(&msg, "no port in name '%s'", name);

From ba7c059c64f02a96639bfa5a25b4d7127fb494a6 Mon Sep 17 00:00:00 2001
From: murgatroid99 <mlumish@google.com>
Date: Tue, 31 Jan 2017 13:42:33 -0800
Subject: [PATCH 29/52] Run yapf_code on v1.1.x

---
 src/python/grpcio/grpc/_channel.py             |  4 ++--
 .../grpcio/grpc/beta/_server_adaptations.py    |  3 +--
 .../grpc/framework/foundation/logging_pool.py  |  5 ++---
 .../grpcio_tests/tests/interop/methods.py      | 18 ++++++++----------
 .../tests/unit/_cython/_channel_test.py        |  3 +--
 5 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/src/python/grpcio/grpc/_channel.py b/src/python/grpcio/grpc/_channel.py
index 5a8a3d487ae..77412236cc6 100644
--- a/src/python/grpcio/grpc/_channel.py
+++ b/src/python/grpcio/grpc/_channel.py
@@ -842,8 +842,8 @@ def _poll_connectivity(state, channel, initial_try_to_connect):
     connectivity = channel.check_connectivity_state(try_to_connect)
     with state.lock:
         state.connectivity = (
-            _common.
-            CYGRPC_CONNECTIVITY_STATE_TO_CHANNEL_CONNECTIVITY[connectivity])
+            _common.CYGRPC_CONNECTIVITY_STATE_TO_CHANNEL_CONNECTIVITY[
+                connectivity])
         callbacks = tuple(callback
                           for callback, unused_but_known_to_be_none_connectivity
                           in state.callbacks_and_connectivities)
diff --git a/src/python/grpcio/grpc/beta/_server_adaptations.py b/src/python/grpcio/grpc/beta/_server_adaptations.py
index bb7c0960d5d..206bd7e4681 100644
--- a/src/python/grpcio/grpc/beta/_server_adaptations.py
+++ b/src/python/grpcio/grpc/beta/_server_adaptations.py
@@ -393,5 +393,4 @@ def server(service_implementations, multi_method_implementation,
     else:
         effective_thread_pool = thread_pool
     return _Server(
-        grpc.server(
-            effective_thread_pool, handlers=(generic_rpc_handler,)))
+        grpc.server(effective_thread_pool, handlers=(generic_rpc_handler,)))
diff --git a/src/python/grpcio/grpc/framework/foundation/logging_pool.py b/src/python/grpcio/grpc/framework/foundation/logging_pool.py
index 9164173d348..7ee37373fa1 100644
--- a/src/python/grpcio/grpc/framework/foundation/logging_pool.py
+++ b/src/python/grpcio/grpc/framework/foundation/logging_pool.py
@@ -64,9 +64,8 @@ class _LoggingPool(object):
         return self._backing_pool.submit(_wrap(fn), *args, **kwargs)
 
     def map(self, func, *iterables, **kwargs):
-        return self._backing_pool.map(_wrap(func),
-                                      *iterables,
-                                      timeout=kwargs.get('timeout', None))
+        return self._backing_pool.map(
+            _wrap(func), *iterables, timeout=kwargs.get('timeout', None))
 
     def shutdown(self, wait=True):
         self._backing_pool.shutdown(wait=wait)
diff --git a/src/python/grpcio_tests/tests/interop/methods.py b/src/python/grpcio_tests/tests/interop/methods.py
index bdb258591e7..1f9b356eb2d 100644
--- a/src/python/grpcio_tests/tests/interop/methods.py
+++ b/src/python/grpcio_tests/tests/interop/methods.py
@@ -351,8 +351,7 @@ def _status_code_and_message(stub):
         response_type=messages_pb2.COMPRESSABLE,
         response_size=1,
         payload=messages_pb2.Payload(body=b'\x00'),
-        response_status=messages_pb2.EchoStatus(
-            code=code, message=details))
+        response_status=messages_pb2.EchoStatus(code=code, message=details))
     response_future = stub.UnaryCall.future(request)
     _validate_status_code_and_details(response_future, status, details)
 
@@ -363,8 +362,7 @@ def _status_code_and_message(stub):
             response_type=messages_pb2.COMPRESSABLE,
             response_parameters=(messages_pb2.ResponseParameters(size=1),),
             payload=messages_pb2.Payload(body=b'\x00'),
-            response_status=messages_pb2.EchoStatus(
-                code=code, message=details))
+            response_status=messages_pb2.EchoStatus(code=code, message=details))
         pipe.add(request)  # sends the initial request.
     # Dropping out of with block closes the pipe
     _validate_status_code_and_details(response_iterator, status, details)
@@ -428,8 +426,8 @@ def _compute_engine_creds(stub, args):
 
 
 def _oauth2_auth_token(stub, args):
-    json_key_filename = os.environ[oauth2client_client.
-                                   GOOGLE_APPLICATION_CREDENTIALS]
+    json_key_filename = os.environ[
+        oauth2client_client.GOOGLE_APPLICATION_CREDENTIALS]
     wanted_email = json.load(open(json_key_filename, 'rb'))['client_email']
     response = _large_unary_common_behavior(stub, True, True, None)
     if wanted_email != response.username:
@@ -441,8 +439,8 @@ def _oauth2_auth_token(stub, args):
 
 
 def _jwt_token_creds(stub, args):
-    json_key_filename = os.environ[oauth2client_client.
-                                   GOOGLE_APPLICATION_CREDENTIALS]
+    json_key_filename = os.environ[
+        oauth2client_client.GOOGLE_APPLICATION_CREDENTIALS]
     wanted_email = json.load(open(json_key_filename, 'rb'))['client_email']
     response = _large_unary_common_behavior(stub, True, False, None)
     if wanted_email != response.username:
@@ -451,8 +449,8 @@ def _jwt_token_creds(stub, args):
 
 
 def _per_rpc_creds(stub, args):
-    json_key_filename = os.environ[oauth2client_client.
-                                   GOOGLE_APPLICATION_CREDENTIALS]
+    json_key_filename = os.environ[
+        oauth2client_client.GOOGLE_APPLICATION_CREDENTIALS]
     wanted_email = json.load(open(json_key_filename, 'rb'))['client_email']
     credentials = oauth2client_client.GoogleCredentials.get_application_default()
     scoped_credentials = credentials.create_scoped([args.oauth_scope])
diff --git a/src/python/grpcio_tests/tests/unit/_cython/_channel_test.py b/src/python/grpcio_tests/tests/unit/_cython/_channel_test.py
index 0ca06868b2d..5c7f9030151 100644
--- a/src/python/grpcio_tests/tests/unit/_cython/_channel_test.py
+++ b/src/python/grpcio_tests/tests/unit/_cython/_channel_test.py
@@ -59,8 +59,7 @@ def _create_loop_destroy():
 
 def _in_parallel(behavior, arguments):
     threads = tuple(
-        threading.Thread(
-            target=behavior, args=arguments)
+        threading.Thread(target=behavior, args=arguments)
         for _ in range(test_constants.THREAD_CONCURRENCY))
     for thread in threads:
         thread.start()

From e15b5a42af8b5f717a940f1419913b6dc0a561f1 Mon Sep 17 00:00:00 2001
From: murgatroid99 <mlumish@google.com>
Date: Tue, 31 Jan 2017 16:23:54 -0800
Subject: [PATCH 30/52] Bump version to 1.1.1

---
 CMakeLists.txt                                    | 2 +-
 Makefile                                          | 4 ++--
 build.yaml                                        | 2 +-
 package.json                                      | 2 +-
 package.xml                                       | 4 ++--
 src/cpp/common/version_cc.cc                      | 2 +-
 src/csharp/Grpc.Auth/project.json                 | 4 ++--
 src/csharp/Grpc.Core/VersionInfo.cs               | 4 ++--
 src/csharp/Grpc.Core/project.json                 | 2 +-
 src/csharp/Grpc.HealthCheck/project.json          | 4 ++--
 src/csharp/Grpc.Reflection/project.json           | 4 ++--
 src/csharp/build_packages_dotnetcli.bat           | 2 +-
 src/csharp/build_packages_dotnetcli.sh            | 4 ++--
 src/node/health_check/package.json                | 4 ++--
 src/node/tools/package.json                       | 2 +-
 src/php/composer.json                             | 2 +-
 src/python/grpcio/grpc_version.py                 | 2 +-
 src/python/grpcio_health_checking/grpc_version.py | 2 +-
 src/python/grpcio_reflection/grpc_version.py      | 2 +-
 src/python/grpcio_tests/grpc_version.py           | 2 +-
 src/ruby/lib/grpc/version.rb                      | 2 +-
 src/ruby/tools/version.rb                         | 2 +-
 tools/distrib/python/grpcio_tools/grpc_version.py | 2 +-
 tools/doxygen/Doxyfile.c++                        | 2 +-
 tools/doxygen/Doxyfile.c++.internal               | 2 +-
 25 files changed, 33 insertions(+), 33 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 071cbd7768a..7316f85f88f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -42,7 +42,7 @@
 cmake_minimum_required(VERSION 2.8)
 
 set(PACKAGE_NAME      "grpc")
-set(PACKAGE_VERSION   "1.1.0")
+set(PACKAGE_VERSION   "1.1.1")
 set(PACKAGE_STRING    "${PACKAGE_NAME} ${PACKAGE_VERSION}")
 set(PACKAGE_TARNAME   "${PACKAGE_NAME}-${PACKAGE_VERSION}")
 set(PACKAGE_BUGREPORT "https://github.com/grpc/grpc/issues/")
diff --git a/Makefile b/Makefile
index 122bc302f53..ceb9f9a5a0b 100644
--- a/Makefile
+++ b/Makefile
@@ -442,8 +442,8 @@ Q = @
 endif
 
 CORE_VERSION = 2.0.0
-CPP_VERSION = 1.1.0
-CSHARP_VERSION = 1.1.0
+CPP_VERSION = 1.1.1
+CSHARP_VERSION = 1.1.1
 
 CPPFLAGS_NO_ARCH += $(addprefix -I, $(INCLUDES)) $(addprefix -D, $(DEFINES))
 CPPFLAGS += $(CPPFLAGS_NO_ARCH) $(ARCH_FLAGS)
diff --git a/build.yaml b/build.yaml
index edc53993658..3c35b8fb7ee 100644
--- a/build.yaml
+++ b/build.yaml
@@ -14,7 +14,7 @@ settings:
   '#10': See the expand_version.py for all the quirks here
   core_version: 2.0.0
   g_stands_for: good
-  version: 1.1.0
+  version: 1.1.1
 filegroups:
 - name: census
   public_headers:
diff --git a/package.json b/package.json
index c7cd67047ba..ef33b170f20 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "grpc",
-  "version": "1.1.0",
+  "version": "1.1.1",
   "author": "Google Inc.",
   "description": "gRPC Library for Node",
   "homepage": "http://www.grpc.io/",
diff --git a/package.xml b/package.xml
index 75ff60ef90a..89bcaec37a3 100644
--- a/package.xml
+++ b/package.xml
@@ -13,8 +13,8 @@
  <date>2017-01-13</date>
  <time>16:06:07</time>
  <version>
-  <release>1.1.0</release>
-  <api>1.1.0</api>
+  <release>1.1.1</release>
+  <api>1.1.1</api>
  </version>
  <stability>
   <release>beta</release>
diff --git a/src/cpp/common/version_cc.cc b/src/cpp/common/version_cc.cc
index 481e6739098..446e94379d0 100644
--- a/src/cpp/common/version_cc.cc
+++ b/src/cpp/common/version_cc.cc
@@ -37,5 +37,5 @@
 #include <grpc++/grpc++.h>
 
 namespace grpc {
-grpc::string Version() { return "1.1.0"; }
+grpc::string Version() { return "1.1.1"; }
 }
diff --git a/src/csharp/Grpc.Auth/project.json b/src/csharp/Grpc.Auth/project.json
index af9ef05871b..c830ec49fd7 100644
--- a/src/csharp/Grpc.Auth/project.json
+++ b/src/csharp/Grpc.Auth/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.0",
+  "version": "1.1.1",
   "title": "gRPC C# Auth",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2015, Google Inc.",
@@ -21,7 +21,7 @@
     }
   },
   "dependencies": {
-    "Grpc.Core": "1.1.0",
+    "Grpc.Core": "1.1.1",
     "Google.Apis.Auth": "1.16.0"
   },
   "frameworks": {
diff --git a/src/csharp/Grpc.Core/VersionInfo.cs b/src/csharp/Grpc.Core/VersionInfo.cs
index ed805d87dcb..5fb976fc88d 100644
--- a/src/csharp/Grpc.Core/VersionInfo.cs
+++ b/src/csharp/Grpc.Core/VersionInfo.cs
@@ -48,11 +48,11 @@ namespace Grpc.Core
         /// <summary>
         /// Current <c>AssemblyFileVersion</c> of gRPC C# assemblies
         /// </summary>
-        public const string CurrentAssemblyFileVersion = "1.1.0.0";
+        public const string CurrentAssemblyFileVersion = "1.1.1.0";
 
         /// <summary>
         /// Current version of gRPC C#
         /// </summary>
-        public const string CurrentVersion = "1.1.0";
+        public const string CurrentVersion = "1.1.1";
     }
 }
diff --git a/src/csharp/Grpc.Core/project.json b/src/csharp/Grpc.Core/project.json
index ca62c7d56dd..228b227a3be 100644
--- a/src/csharp/Grpc.Core/project.json
+++ b/src/csharp/Grpc.Core/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.0",
+  "version": "1.1.1",
   "title": "gRPC C# Core",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2015, Google Inc.",
diff --git a/src/csharp/Grpc.HealthCheck/project.json b/src/csharp/Grpc.HealthCheck/project.json
index 7d7c8ab1dae..859ff5ea03b 100644
--- a/src/csharp/Grpc.HealthCheck/project.json
+++ b/src/csharp/Grpc.HealthCheck/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.0",
+  "version": "1.1.1",
   "title": "gRPC C# Healthchecking",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2015, Google Inc.",
@@ -21,7 +21,7 @@
     }
   },
   "dependencies": {
-    "Grpc.Core": "1.1.0",
+    "Grpc.Core": "1.1.1",
     "Google.Protobuf": "3.0.0"
   },
   "frameworks": {
diff --git a/src/csharp/Grpc.Reflection/project.json b/src/csharp/Grpc.Reflection/project.json
index bf63dcbf1ff..8b83d48adba 100644
--- a/src/csharp/Grpc.Reflection/project.json
+++ b/src/csharp/Grpc.Reflection/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.0",
+  "version": "1.1.1",
   "title": "gRPC C# Reflection",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2016, Google Inc.",
@@ -21,7 +21,7 @@
     }
   },
   "dependencies": {
-    "Grpc.Core": "1.1.0",
+    "Grpc.Core": "1.1.1",
     "Google.Protobuf": "3.0.0"
   },
   "frameworks": {
diff --git a/src/csharp/build_packages_dotnetcli.bat b/src/csharp/build_packages_dotnetcli.bat
index 37046da8339..d3da8cf2116 100755
--- a/src/csharp/build_packages_dotnetcli.bat
+++ b/src/csharp/build_packages_dotnetcli.bat
@@ -28,7 +28,7 @@
 @rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 @rem Current package versions
-set VERSION=1.1.0
+set VERSION=1.1.1
 set PROTOBUF_VERSION=3.0.0
 
 @rem Adjust the location of nuget.exe
diff --git a/src/csharp/build_packages_dotnetcli.sh b/src/csharp/build_packages_dotnetcli.sh
index e42e546ca35..5fa0b54ad00 100755
--- a/src/csharp/build_packages_dotnetcli.sh
+++ b/src/csharp/build_packages_dotnetcli.sh
@@ -65,7 +65,7 @@ dotnet pack --configuration Release Grpc.Auth/project.json --output ../../artifa
 dotnet pack --configuration Release Grpc.HealthCheck/project.json --output ../../artifacts
 dotnet pack --configuration Release Grpc.Reflection/project.json --output ../../artifacts
 
-nuget pack Grpc.nuspec -Version "1.1.0" -OutputDirectory ../../artifacts
-nuget pack Grpc.Tools.nuspec -Version "1.1.0" -OutputDirectory ../../artifacts
+nuget pack Grpc.nuspec -Version "1.1.1" -OutputDirectory ../../artifacts
+nuget pack Grpc.Tools.nuspec -Version "1.1.1" -OutputDirectory ../../artifacts
 
 (cd ../../artifacts && zip csharp_nugets_dotnetcli.zip *.nupkg)
diff --git a/src/node/health_check/package.json b/src/node/health_check/package.json
index ad66b0f10c0..1a59c101dd6 100644
--- a/src/node/health_check/package.json
+++ b/src/node/health_check/package.json
@@ -1,6 +1,6 @@
 {
   "name": "grpc-health-check",
-  "version": "1.1.0",
+  "version": "1.1.1",
   "author": "Google Inc.",
   "description": "Health check service for use with gRPC",
   "repository": {
@@ -15,7 +15,7 @@
     }
   ],
   "dependencies": {
-    "grpc": "^1.1.0",
+    "grpc": "^1.1.1",
     "lodash": "^3.9.3",
     "google-protobuf": "^3.0.0"
   },
diff --git a/src/node/tools/package.json b/src/node/tools/package.json
index c5121f76893..c2c39aeef04 100644
--- a/src/node/tools/package.json
+++ b/src/node/tools/package.json
@@ -1,6 +1,6 @@
 {
   "name": "grpc-tools",
-  "version": "1.1.0",
+  "version": "1.1.1",
   "author": "Google Inc.",
   "description": "Tools for developing with gRPC on Node.js",
   "homepage": "http://www.grpc.io/",
diff --git a/src/php/composer.json b/src/php/composer.json
index 2d5d555bc29..02731396848 100644
--- a/src/php/composer.json
+++ b/src/php/composer.json
@@ -5,7 +5,7 @@
   "keywords": ["rpc"],
   "homepage": "http://grpc.io",
   "license": "BSD-3-Clause",
-  "version": "1.1.0",
+  "version": "1.1.1",
   "require": {
     "php": ">=5.5.0",
     "ext-grpc": "*",
diff --git a/src/python/grpcio/grpc_version.py b/src/python/grpcio/grpc_version.py
index d9c7c2da558..e3d8d927f7f 100644
--- a/src/python/grpcio/grpc_version.py
+++ b/src/python/grpcio/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc_version.py.template`!!!
 
-VERSION='1.1.0'
+VERSION='1.1.1'
diff --git a/src/python/grpcio_health_checking/grpc_version.py b/src/python/grpcio_health_checking/grpc_version.py
index a0c88c36669..0a9fd1c251d 100644
--- a/src/python/grpcio_health_checking/grpc_version.py
+++ b/src/python/grpcio_health_checking/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_health_checking/grpc_version.py.template`!!!
 
-VERSION='1.1.0'
+VERSION='1.1.1'
diff --git a/src/python/grpcio_reflection/grpc_version.py b/src/python/grpcio_reflection/grpc_version.py
index 980b96312c9..4d01b4b2b03 100644
--- a/src/python/grpcio_reflection/grpc_version.py
+++ b/src/python/grpcio_reflection/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_reflection/grpc_version.py.template`!!!
 
-VERSION='1.1.0'
+VERSION='1.1.1'
diff --git a/src/python/grpcio_tests/grpc_version.py b/src/python/grpcio_tests/grpc_version.py
index f0c766a2134..22c7f9accb7 100644
--- a/src/python/grpcio_tests/grpc_version.py
+++ b/src/python/grpcio_tests/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_tests/grpc_version.py.template`!!!
 
-VERSION='1.1.0'
+VERSION='1.1.1'
diff --git a/src/ruby/lib/grpc/version.rb b/src/ruby/lib/grpc/version.rb
index a0230fb2758..b1c189033d2 100644
--- a/src/ruby/lib/grpc/version.rb
+++ b/src/ruby/lib/grpc/version.rb
@@ -29,5 +29,5 @@
 
 # GRPC contains the General RPC module.
 module GRPC
-  VERSION = '1.1.0'
+  VERSION = '1.1.1'
 end
diff --git a/src/ruby/tools/version.rb b/src/ruby/tools/version.rb
index ad572e77b38..0a23edab170 100644
--- a/src/ruby/tools/version.rb
+++ b/src/ruby/tools/version.rb
@@ -29,6 +29,6 @@
 
 module GRPC
   module Tools
-    VERSION = '1.1.0'
+    VERSION = '1.1.1'
   end
 end
diff --git a/tools/distrib/python/grpcio_tools/grpc_version.py b/tools/distrib/python/grpcio_tools/grpc_version.py
index 7e64b4989fc..ad3d3cb7dec 100644
--- a/tools/distrib/python/grpcio_tools/grpc_version.py
+++ b/tools/distrib/python/grpcio_tools/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!!
 
-VERSION='1.1.0'
+VERSION='1.1.1'
diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++
index 1a4af5f96ec..72c0e589cca 100644
--- a/tools/doxygen/Doxyfile.c++
+++ b/tools/doxygen/Doxyfile.c++
@@ -40,7 +40,7 @@ PROJECT_NAME           = "GRPC C++"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 1.1.0
+PROJECT_NUMBER         = 1.1.1
 
 # 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
diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal
index 3101f1d4104..3fa409184ca 100644
--- a/tools/doxygen/Doxyfile.c++.internal
+++ b/tools/doxygen/Doxyfile.c++.internal
@@ -40,7 +40,7 @@ PROJECT_NAME           = "GRPC C++"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 1.1.0
+PROJECT_NUMBER         = 1.1.1
 
 # 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

From 8087d70c4ee47b426a56177ef6b50d92e2e58998 Mon Sep 17 00:00:00 2001
From: "Nicolas \"Pixel\" Noble" <pixel@nobis-crew.org>
Date: Wed, 1 Feb 2017 02:23:50 +0100
Subject: [PATCH 31/52] Ruby windows fix - LDLIBS always belongs last, for link
 order reasons.

---
 Makefile                    | 54 ++++++++++++++++++-------------------
 templates/Makefile.template |  4 ++-
 2 files changed, 30 insertions(+), 28 deletions(-)

diff --git a/Makefile b/Makefile
index 122bc302f53..cd621e16845 100644
--- a/Makefile
+++ b/Makefile
@@ -2612,15 +2612,15 @@ ifeq ($(SYSTEM),MINGW32)
 $(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGPR_OBJS)  $(ZLIB_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
-	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE)-dll.a -o $(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGPR_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS)
+	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE)-dll.a -o $(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGPR_OBJS) $(ZLIB_MERGE_LIBS) $(LDLIBS)
 else
 $(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGPR_OBJS)  $(ZLIB_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
 ifeq ($(SYSTEM),Darwin)
-	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGPR_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS)
+	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGPR_OBJS) $(ZLIB_MERGE_LIBS) $(LDLIBS)
 else
-	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgpr.so.2 -o $(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGPR_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS)
+	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgpr.so.2 -o $(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGPR_OBJS) $(ZLIB_MERGE_LIBS) $(LDLIBS)
 	$(Q) ln -sf $(SHARED_PREFIX)gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE).so.2
 	$(Q) ln -sf $(SHARED_PREFIX)gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgpr$(SHARED_VERSION_CORE).so
 endif
@@ -2936,15 +2936,15 @@ ifeq ($(SYSTEM),MINGW32)
 $(LIBDIR)/$(CONFIG)/grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGRPC_OBJS)  $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
-	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc$(SHARED_VERSION_CORE).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_OBJS) $(LDLIBS) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS)
+	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc$(SHARED_VERSION_CORE).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(LDLIBS)
 else
 $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGRPC_OBJS)  $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
 ifeq ($(SYSTEM),Darwin)
-	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_OBJS) $(LDLIBS) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS)
+	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(LDLIBS)
 else
-	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_OBJS) $(LDLIBS) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS)
+	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(LDLIBS)
 	$(Q) ln -sf $(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).so.2
 	$(Q) ln -sf $(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).so
 endif
@@ -3210,15 +3210,15 @@ ifeq ($(SYSTEM),MINGW32)
 $(LIBDIR)/$(CONFIG)/grpc_cronet$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGRPC_CRONET_OBJS)  $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
-	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc_cronet$(SHARED_VERSION_CORE).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc_cronet$(SHARED_VERSION_CORE)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc_cronet$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_CRONET_OBJS) $(LDLIBS) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS)
+	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc_cronet$(SHARED_VERSION_CORE).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc_cronet$(SHARED_VERSION_CORE)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc_cronet$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_CRONET_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(LDLIBS)
 else
 $(LIBDIR)/$(CONFIG)/libgrpc_cronet$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGRPC_CRONET_OBJS)  $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
 ifeq ($(SYSTEM),Darwin)
-	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc_cronet$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc_cronet$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_CRONET_OBJS) $(LDLIBS) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS)
+	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc_cronet$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc_cronet$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_CRONET_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(LDLIBS)
 else
-	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc_cronet.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc_cronet$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_CRONET_OBJS) $(LDLIBS) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS)
+	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc_cronet.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc_cronet$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_CRONET_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(LDLIBS)
 	$(Q) ln -sf $(SHARED_PREFIX)grpc_cronet$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc_cronet$(SHARED_VERSION_CORE).so.2
 	$(Q) ln -sf $(SHARED_PREFIX)grpc_cronet$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc_cronet$(SHARED_VERSION_CORE).so
 endif
@@ -3712,15 +3712,15 @@ ifeq ($(SYSTEM),MINGW32)
 $(LIBDIR)/$(CONFIG)/grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGRPC_UNSECURE_OBJS)  $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgpr.a
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
-	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc_unsecure$(SHARED_VERSION_CORE).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_UNSECURE_OBJS) $(LDLIBS) $(LIBDIR)/$(CONFIG)/libgpr.a $(ZLIB_MERGE_LIBS)
+	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc_unsecure$(SHARED_VERSION_CORE).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_UNSECURE_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(ZLIB_MERGE_LIBS) $(LDLIBS)
 else
 $(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGRPC_UNSECURE_OBJS)  $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgpr.a
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
 ifeq ($(SYSTEM),Darwin)
-	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_UNSECURE_OBJS) $(LDLIBS) $(LIBDIR)/$(CONFIG)/libgpr.a $(ZLIB_MERGE_LIBS)
+	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_UNSECURE_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(ZLIB_MERGE_LIBS) $(LDLIBS)
 else
-	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc_unsecure.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_UNSECURE_OBJS) $(LDLIBS) $(LIBDIR)/$(CONFIG)/libgpr.a $(ZLIB_MERGE_LIBS)
+	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc_unsecure.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_UNSECURE_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(ZLIB_MERGE_LIBS) $(LDLIBS)
 	$(Q) ln -sf $(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE).so.2
 	$(Q) ln -sf $(SHARED_PREFIX)grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure$(SHARED_VERSION_CORE).so
 endif
@@ -3977,15 +3977,15 @@ ifeq ($(SYSTEM),MINGW32)
 $(LIBDIR)/$(CONFIG)/grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_OBJS)  $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(OPENSSL_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
-	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++$(SHARED_VERSION_CPP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgrpc$(SHARED_VERSION_CORE)-dll
+	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++$(SHARED_VERSION_CPP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_OBJS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc$(SHARED_VERSION_CORE)-dll
 else
 $(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_OBJS)  $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/libgrpc.$(SHARED_EXT_CORE) $(OPENSSL_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
 ifeq ($(SYSTEM),Darwin)
-	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgrpc
+	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_OBJS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc
 else
-	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgrpc
+	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_OBJS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc
 	$(Q) ln -sf $(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP).so.1
 	$(Q) ln -sf $(SHARED_PREFIX)grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++$(SHARED_VERSION_CPP).so
 endif
@@ -4353,15 +4353,15 @@ ifeq ($(SYSTEM),MINGW32)
 $(LIBDIR)/$(CONFIG)/grpc++_cronet$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_CRONET_OBJS)  $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/grpc_cronet$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(OPENSSL_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
-	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++_cronet$(SHARED_VERSION_CPP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++_cronet$(SHARED_VERSION_CPP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc++_cronet$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_CRONET_OBJS) $(LDLIBS) $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgpr$(SHARED_VERSION_CORE)-dll -lgrpc_cronet$(SHARED_VERSION_CORE)-dll
+	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++_cronet$(SHARED_VERSION_CPP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++_cronet$(SHARED_VERSION_CPP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc++_cronet$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_CRONET_OBJS) $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgpr$(SHARED_VERSION_CORE)-dll -lgrpc_cronet$(SHARED_VERSION_CORE)-dll
 else
 $(LIBDIR)/$(CONFIG)/libgrpc++_cronet$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_CRONET_OBJS)  $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/libgpr.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc_cronet.$(SHARED_EXT_CORE) $(OPENSSL_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
 ifeq ($(SYSTEM),Darwin)
-	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++_cronet$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_CRONET_OBJS) $(LDLIBS) $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgpr -lgrpc_cronet
+	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++_cronet$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_CRONET_OBJS) $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgpr -lgrpc_cronet
 else
-	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++_cronet.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc++_cronet$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_CRONET_OBJS) $(LDLIBS) $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgpr -lgrpc_cronet
+	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++_cronet.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc++_cronet$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_CRONET_OBJS) $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgpr -lgrpc_cronet
 	$(Q) ln -sf $(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++_cronet$(SHARED_VERSION_CPP).so.1
 	$(Q) ln -sf $(SHARED_PREFIX)grpc++_cronet$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++_cronet$(SHARED_VERSION_CPP).so
 endif
@@ -4476,15 +4476,15 @@ ifeq ($(SYSTEM),MINGW32)
 $(LIBDIR)/$(CONFIG)/grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_REFLECTION_OBJS)  $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/grpc++$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(OPENSSL_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
-	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++_reflection$(SHARED_VERSION_CPP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_REFLECTION_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgrpc++$(SHARED_VERSION_CPP)-dll
+	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++_reflection$(SHARED_VERSION_CPP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_REFLECTION_OBJS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc++$(SHARED_VERSION_CPP)-dll
 else
 $(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_REFLECTION_OBJS)  $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/libgrpc++.$(SHARED_EXT_CPP) $(OPENSSL_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
 ifeq ($(SYSTEM),Darwin)
-	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_REFLECTION_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgrpc++
+	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_REFLECTION_OBJS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc++
 else
-	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++_reflection.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_REFLECTION_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgrpc++
+	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++_reflection.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_REFLECTION_OBJS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgrpc++
 	$(Q) ln -sf $(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP).so.1
 	$(Q) ln -sf $(SHARED_PREFIX)grpc++_reflection$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++_reflection$(SHARED_VERSION_CPP).so
 endif
@@ -4870,15 +4870,15 @@ ifeq ($(SYSTEM),MINGW32)
 $(LIBDIR)/$(CONFIG)/grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_UNSECURE_OBJS)  $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/gpr$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/grpc_unsecure$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
-	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++_unsecure$(SHARED_VERSION_CPP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_UNSECURE_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgpr$(SHARED_VERSION_CORE)-dll -lgrpc_unsecure$(SHARED_VERSION_CORE)-dll
+	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc++_unsecure$(SHARED_VERSION_CPP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_UNSECURE_OBJS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgpr$(SHARED_VERSION_CORE)-dll -lgrpc_unsecure$(SHARED_VERSION_CORE)-dll
 else
 $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP): $(LIBGRPC++_UNSECURE_OBJS)  $(ZLIB_DEP) $(PROTOBUF_DEP) $(LIBDIR)/$(CONFIG)/libgpr.$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.$(SHARED_EXT_CORE)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
 ifeq ($(SYSTEM),Darwin)
-	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_UNSECURE_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgpr -lgrpc_unsecure
+	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_UNSECURE_OBJS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgpr -lgrpc_unsecure
 else
-	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++_unsecure.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_UNSECURE_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) -lgpr -lgrpc_unsecure
+	$(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc++_unsecure.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBGRPC++_UNSECURE_OBJS) $(ZLIB_MERGE_LIBS) $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) -lgpr -lgrpc_unsecure
 	$(Q) ln -sf $(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP).so.1
 	$(Q) ln -sf $(SHARED_PREFIX)grpc++_unsecure$(SHARED_VERSION_CPP).$(SHARED_EXT_CPP) $(LIBDIR)/$(CONFIG)/libgrpc++_unsecure$(SHARED_VERSION_CPP).so
 endif
@@ -5411,15 +5411,15 @@ ifeq ($(SYSTEM),MINGW32)
 $(LIBDIR)/$(CONFIG)/grpc_csharp_ext$(SHARED_VERSION_CSHARP).$(SHARED_EXT_CSHARP): $(LIBGRPC_CSHARP_EXT_OBJS)  $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
-	$(Q) $(LD) $(LDFLAGS) $(if $(subst Linux,,$(SYSTEM)),,-Wl$(comma)-wrap$(comma)memcpy) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc_csharp_ext$(SHARED_VERSION_CSHARP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CSHARP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc_csharp_ext$(SHARED_VERSION_CSHARP).$(SHARED_EXT_CSHARP) $(LIBGRPC_CSHARP_EXT_OBJS) $(LDLIBS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(ZLIB_MERGE_LIBS)
+	$(Q) $(LD) $(LDFLAGS) $(if $(subst Linux,,$(SYSTEM)),,-Wl$(comma)-wrap$(comma)memcpy) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc_csharp_ext$(SHARED_VERSION_CSHARP).def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CSHARP)-dll.a -o $(LIBDIR)/$(CONFIG)/grpc_csharp_ext$(SHARED_VERSION_CSHARP).$(SHARED_EXT_CSHARP) $(LIBGRPC_CSHARP_EXT_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(ZLIB_MERGE_LIBS) $(LDLIBS)
 else
 $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CSHARP).$(SHARED_EXT_CSHARP): $(LIBGRPC_CSHARP_EXT_OBJS)  $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
 ifeq ($(SYSTEM),Darwin)
-	$(Q) $(LD) $(LDFLAGS) $(if $(subst Linux,,$(SYSTEM)),,-Wl$(comma)-wrap$(comma)memcpy) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CSHARP).$(SHARED_EXT_CSHARP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CSHARP).$(SHARED_EXT_CSHARP) $(LIBGRPC_CSHARP_EXT_OBJS) $(LDLIBS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(ZLIB_MERGE_LIBS)
+	$(Q) $(LD) $(LDFLAGS) $(if $(subst Linux,,$(SYSTEM)),,-Wl$(comma)-wrap$(comma)memcpy) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CSHARP).$(SHARED_EXT_CSHARP) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CSHARP).$(SHARED_EXT_CSHARP) $(LIBGRPC_CSHARP_EXT_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(ZLIB_MERGE_LIBS) $(LDLIBS)
 else
-	$(Q) $(LD) $(LDFLAGS) $(if $(subst Linux,,$(SYSTEM)),,-Wl$(comma)-wrap$(comma)memcpy) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc_csharp_ext.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CSHARP).$(SHARED_EXT_CSHARP) $(LIBGRPC_CSHARP_EXT_OBJS) $(LDLIBS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(ZLIB_MERGE_LIBS)
+	$(Q) $(LD) $(LDFLAGS) $(if $(subst Linux,,$(SYSTEM)),,-Wl$(comma)-wrap$(comma)memcpy) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc_csharp_ext.so.2 -o $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CSHARP).$(SHARED_EXT_CSHARP) $(LIBGRPC_CSHARP_EXT_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(ZLIB_MERGE_LIBS) $(LDLIBS)
 	$(Q) ln -sf $(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CSHARP).$(SHARED_EXT_CSHARP) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CSHARP).so.1
 	$(Q) ln -sf $(SHARED_PREFIX)grpc_csharp_ext$(SHARED_VERSION_CSHARP).$(SHARED_EXT_CSHARP) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext$(SHARED_VERSION_CSHARP).so
 endif
diff --git a/templates/Makefile.template b/templates/Makefile.template
index 6f4db26f2bf..3bab79b577d 100644
--- a/templates/Makefile.template
+++ b/templates/Makefile.template
@@ -1495,7 +1495,7 @@
     out_mingbase = '$(LIBDIR)/$(CONFIG)/' + lib.name + '$(SHARED_VERSION_' + lang_to_var[lib.language] + ')'
     out_libbase = '$(LIBDIR)/$(CONFIG)/lib' + lib.name + '$(SHARED_VERSION_' + lang_to_var[lib.language] + ')'
 
-    common = '$(LIB' + lib.name.upper() + '_OBJS) $(LDLIBS)'
+    common = '$(LIB' + lib.name.upper() + '_OBJS)'
 
     link_libs = ''
     lib_deps = ' $(ZLIB_DEP)'
@@ -1545,6 +1545,8 @@
     ldflags = '$(LDFLAGS)'
     if lib.get('LDFLAGS', None):
       ldflags += ' ' + lib['LDFLAGS']
+
+    common = common + ' $(LDLIBS)'
   %>
 
   % if lib.build == "all":

From a9fb1113235afcd2646f3026a7e25f6dcd253afd Mon Sep 17 00:00:00 2001
From: "Nicolas \"Pixel\" Noble" <pixel@nobis-crew.org>
Date: Wed, 1 Feb 2017 19:38:58 +0100
Subject: [PATCH 32/52] Ruby sucks.

---
 Rakefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Rakefile b/Rakefile
index f8028e596fd..12ac12710fb 100755
--- a/Rakefile
+++ b/Rakefile
@@ -93,7 +93,7 @@ task 'dlls' do
   [ w64, w32 ].each do |opt|
     env_comp = "CC=#{opt[:cross]}-gcc "
     env_comp += "LD=#{opt[:cross]}-gcc "
-    docker_for_windows "#{env} #{env_comp} make -j #{out} && #{opt[:cross]}-strip -x -S #{out} && cp #{out} #{opt[:out]}"
+    docker_for_windows "gem update --system && #{env} #{env_comp} make -j #{out} && #{opt[:cross]}-strip -x -S #{out} && cp #{out} #{opt[:out]}"
   end
 
 end
@@ -110,7 +110,7 @@ task 'gem:native' do
     system "rake cross native gem RUBY_CC_VERSION=2.4.0:2.3.0:2.2.2:2.1.5:2.0.0 V=#{verbose} GRPC_CONFIG=#{grpc_config}"
   else
     Rake::Task['dlls'].execute
-    docker_for_windows "bundle && rake cross native gem RUBY_CC_VERSION=2.4.0:2.3.0:2.2.2:2.1.5:2.0.0 V=#{verbose} GRPC_CONFIG=#{grpc_config}"
+    docker_for_windows "gem update --system && bundle && rake cross native gem RUBY_CC_VERSION=2.4.0:2.3.0:2.2.2:2.1.5:2.0.0 V=#{verbose} GRPC_CONFIG=#{grpc_config}"
   end
 end
 

From 513e6b85992e4169e7eaa9e174bfc3af6665824d Mon Sep 17 00:00:00 2001
From: Alexander Polcyn <apolcyn@google.com>
Date: Wed, 1 Feb 2017 17:10:34 -0800
Subject: [PATCH 33/52] ruby bundle install work around to build packages on
 mac

---
 tools/run_tests/artifacts/build_artifact_ruby.sh | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/tools/run_tests/artifacts/build_artifact_ruby.sh b/tools/run_tests/artifacts/build_artifact_ruby.sh
index 019efb01fdd..16266a9230a 100755
--- a/tools/run_tests/artifacts/build_artifact_ruby.sh
+++ b/tools/run_tests/artifacts/build_artifact_ruby.sh
@@ -52,7 +52,15 @@ fi
 set +ex
 rvm use default
 gem install bundler --update
-bundle install
+
+if [ "$SYSTEM" == "Darwin" ] ; then
+  # Workaround for crash during bundle install
+  # See suggestion in https://github.com/bundler/bundler/issues/3692
+  BUNDLE_SPECIFIC_PLATFORM=true bundle install
+else
+  bundle install
+fi
+
 set -ex
 
 rake gem:native

From b39eb5302d17e25532e7de5a01b3148a1820f009 Mon Sep 17 00:00:00 2001
From: Alexander Polcyn <apolcyn@google.com>
Date: Thu, 2 Feb 2017 09:45:58 -0800
Subject: [PATCH 34/52] also pick up latest version of google-protobuf

---
 grpc.gemspec | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/grpc.gemspec b/grpc.gemspec
index 356851521d2..48f7ed6defb 100755
--- a/grpc.gemspec
+++ b/grpc.gemspec
@@ -27,7 +27,7 @@ Gem::Specification.new do |s|
   s.require_paths = %w( src/ruby/bin src/ruby/lib src/ruby/pb )
   s.platform      = Gem::Platform::RUBY
 
-  s.add_dependency 'google-protobuf', '~> 3.1.0'
+  s.add_dependency 'google-protobuf', '~> 3.1'
   s.add_dependency 'googleauth',      '~> 0.5.1'
 
   s.add_development_dependency 'bundler',            '~> 1.9'

From b7dce2dbc9845cd0009855c905d86219242df637 Mon Sep 17 00:00:00 2001
From: Alexander Polcyn <apolcyn@google.com>
Date: Thu, 2 Feb 2017 09:59:26 -0800
Subject: [PATCH 35/52] wrap all bundle install commands outside docker with
 check for mac workaround

---
 .../artifacts/build_artifact_ruby.sh          |  8 +---
 .../helper_scripts/bundle_install_wrapper.sh  | 46 +++++++++++++++++++
 .../helper_scripts/pre_build_ruby.sh          |  2 +-
 3 files changed, 48 insertions(+), 8 deletions(-)
 create mode 100755 tools/run_tests/helper_scripts/bundle_install_wrapper.sh

diff --git a/tools/run_tests/artifacts/build_artifact_ruby.sh b/tools/run_tests/artifacts/build_artifact_ruby.sh
index 16266a9230a..ca461ba561e 100755
--- a/tools/run_tests/artifacts/build_artifact_ruby.sh
+++ b/tools/run_tests/artifacts/build_artifact_ruby.sh
@@ -53,13 +53,7 @@ set +ex
 rvm use default
 gem install bundler --update
 
-if [ "$SYSTEM" == "Darwin" ] ; then
-  # Workaround for crash during bundle install
-  # See suggestion in https://github.com/bundler/bundler/issues/3692
-  BUNDLE_SPECIFIC_PLATFORM=true bundle install
-else
-  bundle install
-fi
+tools/run_tests/helper_scripts/bundle_install_wrapper.sh
 
 set -ex
 
diff --git a/tools/run_tests/helper_scripts/bundle_install_wrapper.sh b/tools/run_tests/helper_scripts/bundle_install_wrapper.sh
new file mode 100755
index 00000000000..8a66bc6090b
--- /dev/null
+++ b/tools/run_tests/helper_scripts/bundle_install_wrapper.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+# 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.
+
+set -ex
+
+export GRPC_CONFIG=${CONFIG:-opt}
+
+# change to grpc repo root
+cd $(dirname $0)/../../..
+
+if [ "$SYSTEM" == "Darwin" ] ; then
+  # Workaround for crash during bundle install
+  # See suggestion in https://github.com/bundler/bundler/issues/3692
+  BUNDLE_SPECIFIC_PLATFORM=true bundle install
+else
+  bundle install
+fi
+
diff --git a/tools/run_tests/helper_scripts/pre_build_ruby.sh b/tools/run_tests/helper_scripts/pre_build_ruby.sh
index 56b58df5441..83647b5ea79 100755
--- a/tools/run_tests/helper_scripts/pre_build_ruby.sh
+++ b/tools/run_tests/helper_scripts/pre_build_ruby.sh
@@ -36,4 +36,4 @@ export GRPC_CONFIG=${CONFIG:-opt}
 # change to grpc repo root
 cd $(dirname $0)/../../..
 
-bundle install
+tools/run_tests/helper_scripts/bundle_install_wrapper.sh

From 370e57a228abb542a51967cb330e4591b6393a64 Mon Sep 17 00:00:00 2001
From: Alexander Polcyn <apolcyn@google.com>
Date: Thu, 2 Feb 2017 11:13:32 -0800
Subject: [PATCH 36/52] update dependency in template

---
 templates/grpc.gemspec.template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/templates/grpc.gemspec.template b/templates/grpc.gemspec.template
index 82fbb690088..24446a37d60 100644
--- a/templates/grpc.gemspec.template
+++ b/templates/grpc.gemspec.template
@@ -29,7 +29,7 @@
     s.require_paths = %w( src/ruby/bin src/ruby/lib src/ruby/pb )
     s.platform      = Gem::Platform::RUBY
 
-    s.add_dependency 'google-protobuf', '~> 3.1.0'
+    s.add_dependency 'google-protobuf', '~> 3.1'
     s.add_dependency 'googleauth',      '~> 0.5.1'
 
     s.add_development_dependency 'bundler',            '~> 1.9'

From 98673fa34981fd1ae1b532fb3e27f1596c223090 Mon Sep 17 00:00:00 2001
From: murgatroid99 <mlumish@google.com>
Date: Thu, 2 Feb 2017 13:37:36 -0800
Subject: [PATCH 37/52] Node: fix handling/propagation of server-side
 serialization errors

---
 src/node/src/server.js        |  24 ++++----
 src/node/test/surface_test.js | 107 ++++++++++++++++++++++++++++++++++
 2 files changed, 119 insertions(+), 12 deletions(-)

diff --git a/src/node/src/server.js b/src/node/src/server.js
index d501e76c67d..8a7eff507d0 100644
--- a/src/node/src/server.js
+++ b/src/node/src/server.js
@@ -121,20 +121,20 @@ function sendUnaryResponse(call, value, serialize, metadata, flags) {
   if (metadata) {
     statusMetadata = metadata;
   }
-  status.metadata = statusMetadata._getCoreRepresentation();
-  if (!call.metadataSent) {
-    end_batch[grpc.opType.SEND_INITIAL_METADATA] =
-        (new Metadata())._getCoreRepresentation();
-    call.metadataSent = true;
-  }
   var message;
   try {
     message = serialize(value);
   } catch (e) {
     e.code = grpc.status.INTERNAL;
-    handleError(e);
+    handleError(call, e);
     return;
   }
+  status.metadata = statusMetadata._getCoreRepresentation();
+  if (!call.metadataSent) {
+    end_batch[grpc.opType.SEND_INITIAL_METADATA] =
+        (new Metadata())._getCoreRepresentation();
+    call.metadataSent = true;
+  }
   message.grpcWriteFlags = flags;
   end_batch[grpc.opType.SEND_MESSAGE] = message;
   end_batch[grpc.opType.SEND_STATUS_FROM_SERVER] = status;
@@ -280,11 +280,6 @@ function _write(chunk, encoding, callback) {
   /* jshint validthis: true */
   var batch = {};
   var self = this;
-  if (!this.call.metadataSent) {
-    batch[grpc.opType.SEND_INITIAL_METADATA] =
-        (new Metadata())._getCoreRepresentation();
-    this.call.metadataSent = true;
-  }
   var message;
   try {
     message = this.serialize(chunk);
@@ -293,6 +288,11 @@ function _write(chunk, encoding, callback) {
     callback(e);
     return;
   }
+  if (!this.call.metadataSent) {
+    batch[grpc.opType.SEND_INITIAL_METADATA] =
+        (new Metadata())._getCoreRepresentation();
+    this.call.metadataSent = true;
+  }
   if (_.isFinite(encoding)) {
     /* Attach the encoding if it is a finite number. This is the closest we
      * can get to checking that it is valid flags */
diff --git a/src/node/test/surface_test.js b/src/node/test/surface_test.js
index e429a3648ba..2636ea85ac8 100644
--- a/src/node/test/surface_test.js
+++ b/src/node/test/surface_test.js
@@ -607,6 +607,113 @@ describe('Client malformed response handling', function() {
     call.end();
   });
 });
+describe('Server serialization failure handling', function() {
+  function serializeFail(obj) {
+    throw new Error('Serialization failed');
+  }
+  var client;
+  var server;
+  before(function() {
+    var test_proto = ProtoBuf.loadProtoFile(__dirname + '/test_service.proto');
+    var test_service = test_proto.lookup('TestService');
+    var malformed_test_service = {
+      unary: {
+        path: '/TestService/Unary',
+        requestStream: false,
+        responseStream: false,
+        requestDeserialize: _.identity,
+        responseSerialize: serializeFail
+      },
+      clientStream: {
+        path: '/TestService/ClientStream',
+        requestStream: true,
+        responseStream: false,
+        requestDeserialize: _.identity,
+        responseSerialize: serializeFail
+      },
+      serverStream: {
+        path: '/TestService/ServerStream',
+        requestStream: false,
+        responseStream: true,
+        requestDeserialize: _.identity,
+        responseSerialize: serializeFail
+      },
+      bidiStream: {
+        path: '/TestService/BidiStream',
+        requestStream: true,
+        responseStream: true,
+        requestDeserialize: _.identity,
+        responseSerialize: serializeFail
+      }
+    };
+    server = new grpc.Server();
+    server.addService(malformed_test_service, {
+      unary: function(call, cb) {
+        cb(null, {});
+      },
+      clientStream: function(stream, cb) {
+        stream.on('data', function() {/* Ignore requests */});
+        stream.on('end', function() {
+          cb(null, {});
+        });
+      },
+      serverStream: function(stream) {
+        stream.write({});
+        stream.end();
+      },
+      bidiStream: function(stream) {
+        stream.on('data', function() {
+          // Ignore requests
+          stream.write({});
+        });
+        stream.on('end', function() {
+          stream.end();
+        });
+      }
+    });
+    var port = server.bind('localhost:0', server_insecure_creds);
+    var Client = surface_client.makeProtobufClientConstructor(test_service);
+    client = new Client('localhost:' + port, grpc.credentials.createInsecure());
+    server.start();
+  });
+  after(function() {
+    server.forceShutdown();
+  });
+  it('should get an INTERNAL status with a unary call', function(done) {
+    client.unary({}, function(err, data) {
+      assert(err);
+      assert.strictEqual(err.code, grpc.status.INTERNAL);
+      done();
+    });
+  });
+  it('should get an INTERNAL status with a client stream call', function(done) {
+    var call = client.clientStream(function(err, data) {
+      assert(err);
+      assert.strictEqual(err.code, grpc.status.INTERNAL);
+      done();
+    });
+    call.write({});
+    call.end();
+  });
+  it('should get an INTERNAL status with a server stream call', function(done) {
+    var call = client.serverStream({});
+    call.on('data', function(){});
+    call.on('error', function(err) {
+      assert.strictEqual(err.code, grpc.status.INTERNAL);
+      done();
+    });
+  });
+  it('should get an INTERNAL status with a bidi stream call', function(done) {
+    var call = client.bidiStream();
+    call.on('data', function(){});
+    call.on('error', function(err) {
+      assert.strictEqual(err.code, grpc.status.INTERNAL);
+      done();
+    });
+    call.write({});
+    call.end();
+  });
+});
 describe('Other conditions', function() {
   var test_service;
   var Client;

From 7f43bb25deb3a12b4adcf3b8c7079bcca440cf7b Mon Sep 17 00:00:00 2001
From: Alexander Polcyn <apolcyn@google.com>
Date: Thu, 2 Feb 2017 13:59:05 -0800
Subject: [PATCH 38/52] clean up bundle install wrapper and set SYSTEM within
 it

---
 tools/run_tests/helper_scripts/bundle_install_wrapper.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/run_tests/helper_scripts/bundle_install_wrapper.sh b/tools/run_tests/helper_scripts/bundle_install_wrapper.sh
index 8a66bc6090b..d56afad8931 100755
--- a/tools/run_tests/helper_scripts/bundle_install_wrapper.sh
+++ b/tools/run_tests/helper_scripts/bundle_install_wrapper.sh
@@ -31,11 +31,11 @@
 
 set -ex
 
-export GRPC_CONFIG=${CONFIG:-opt}
-
 # change to grpc repo root
 cd $(dirname $0)/../../..
 
+SYSTEM=`uname | cut -f 1 -d_`
+
 if [ "$SYSTEM" == "Darwin" ] ; then
   # Workaround for crash during bundle install
   # See suggestion in https://github.com/bundler/bundler/issues/3692

From 6af442750a528a2427b0d552b4f93fa3a03b64e9 Mon Sep 17 00:00:00 2001
From: Alexander Polcyn <apolcyn@google.com>
Date: Thu, 2 Feb 2017 16:47:44 -0800
Subject: [PATCH 39/52] remove -Werror compiler option in ruby Makefile to
 build on mac in opt configuration

---
 src/ruby/ext/grpc/extconf.rb | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/ruby/ext/grpc/extconf.rb b/src/ruby/ext/grpc/extconf.rb
index 66c54aa3e0e..b379664bab8 100644
--- a/src/ruby/ext/grpc/extconf.rb
+++ b/src/ruby/ext/grpc/extconf.rb
@@ -102,7 +102,6 @@ $CFLAGS << ' -std=c99 '
 $CFLAGS << ' -Wall '
 $CFLAGS << ' -Wextra '
 $CFLAGS << ' -pedantic '
-$CFLAGS << ' -Werror '
 $CFLAGS << ' -Wno-format '
 
 output = File.join('grpc', 'grpc_c')

From 9ca1ee00905fa967474a6f736b998cc1a450b3f9 Mon Sep 17 00:00:00 2001
From: Muxi Yan <mxyan@google.com>
Date: Fri, 3 Feb 2017 13:42:40 -0800
Subject: [PATCH 40/52] Add regeneration info to version.h

---
 src/objective-c/GRPCClient/private/version.h               | 7 +++++--
 .../src/objective-c/GRPCClient/private/version.h.template  | 7 +++++--
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/objective-c/GRPCClient/private/version.h b/src/objective-c/GRPCClient/private/version.h
index c848f10aaa1..23b804a9dae 100644
--- a/src/objective-c/GRPCClient/private/version.h
+++ b/src/objective-c/GRPCClient/private/version.h
@@ -31,7 +31,10 @@
  *
  */
 
-/* This file is autogenerated from template:
- * templates/src/objective-c/GRPCClient/private/version.h.template */
+/* This file is autogenerated from a template file. Please make
+ * modifications to
+ * `templates/src/objective-c/GRPCClient/private/version.h.template`
+ * instead. This file can be regenerated from the template by running
+ * `tools/buildgen/generate_projects.sh`. */
 
 #define GRPC_OBJC_VERSION_STRING @"1.1.0-pre1"
diff --git a/templates/src/objective-c/GRPCClient/private/version.h.template b/templates/src/objective-c/GRPCClient/private/version.h.template
index 453604bdaac..5f41379a064 100644
--- a/templates/src/objective-c/GRPCClient/private/version.h.template
+++ b/templates/src/objective-c/GRPCClient/private/version.h.template
@@ -33,7 +33,10 @@
    *
    */
 
-  /* This file is autogenerated from template:
-   * templates/src/objective-c/GRPCClient/private/version.h.template */
+  /* This file is autogenerated from a template file. Please make
+   * modifications to
+   * `templates/src/objective-c/GRPCClient/private/version.h.template`
+   * instead. This file can be regenerated from the template by running
+   * `tools/buildgen/generate_projects.sh`. */
 
   #define GRPC_OBJC_VERSION_STRING @"${settings.version}"

From f24eae2d621f81a800dfcd3da82c193ef9e7b6c3 Mon Sep 17 00:00:00 2001
From: Muxi Yan <mxyan@google.com>
Date: Sat, 4 Feb 2017 16:49:12 -0800
Subject: [PATCH 41/52] Correct commet style of version.h

---
 src/objective-c/GRPCClient/private/version.h          | 11 ++++++-----
 .../objective-c/GRPCClient/private/version.h.template | 11 ++++++-----
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/objective-c/GRPCClient/private/version.h b/src/objective-c/GRPCClient/private/version.h
index 23b804a9dae..1ce35ebc83c 100644
--- a/src/objective-c/GRPCClient/private/version.h
+++ b/src/objective-c/GRPCClient/private/version.h
@@ -31,10 +31,11 @@
  *
  */
 
-/* This file is autogenerated from a template file. Please make
- * modifications to
- * `templates/src/objective-c/GRPCClient/private/version.h.template`
- * instead. This file can be regenerated from the template by running
- * `tools/buildgen/generate_projects.sh`. */
+// This file is autogenerated from a template file. Please make
+// modifications to
+// `templates/src/objective-c/GRPCClient/private/version.h.template`
+// instead. This file can be regenerated from the template by running
+// `tools/buildgen/generate_projects.sh`.
+
 
 #define GRPC_OBJC_VERSION_STRING @"1.1.0-pre1"
diff --git a/templates/src/objective-c/GRPCClient/private/version.h.template b/templates/src/objective-c/GRPCClient/private/version.h.template
index 5f41379a064..1d10692788e 100644
--- a/templates/src/objective-c/GRPCClient/private/version.h.template
+++ b/templates/src/objective-c/GRPCClient/private/version.h.template
@@ -33,10 +33,11 @@
    *
    */
 
-  /* This file is autogenerated from a template file. Please make
-   * modifications to
-   * `templates/src/objective-c/GRPCClient/private/version.h.template`
-   * instead. This file can be regenerated from the template by running
-   * `tools/buildgen/generate_projects.sh`. */
+  // This file is autogenerated from a template file. Please make
+  // modifications to
+  // `templates/src/objective-c/GRPCClient/private/version.h.template`
+  // instead. This file can be regenerated from the template by running
+  // `tools/buildgen/generate_projects.sh`.
+
 
   #define GRPC_OBJC_VERSION_STRING @"${settings.version}"

From 0f5e3a87c2788ce1993b3e5ed58025c93daa876b Mon Sep 17 00:00:00 2001
From: Ken Payson <kpayson@google.com>
Date: Mon, 6 Feb 2017 10:42:45 -0800
Subject: [PATCH 42/52] Ran Yapf code, pinned version

---
 src/python/grpcio/commands.py                 |  4 +-
 src/python/grpcio/grpc/__init__.py            | 57 ++++--------
 src/python/grpcio/grpc/_channel.py            | 51 +++++------
 src/python/grpcio/grpc/_common.py             | 12 ++-
 src/python/grpcio/grpc/_plugin_wrapping.py    |  3 +-
 src/python/grpcio/grpc/_server.py             | 29 +++---
 src/python/grpcio/grpc/_utilities.py          | 11 +--
 .../grpcio/grpc/beta/_client_adaptations.py   | 90 +++++++------------
 .../grpcio/grpc/beta/_connectivity_channel.py |  4 +-
 .../grpcio/grpc/beta/_server_adaptations.py   | 11 +--
 .../framework/interfaces/base/utilities.py    | 11 +--
 .../grpc/framework/interfaces/face/face.py    | 13 +--
 src/python/grpcio/support.py                  |  4 +-
 src/python/grpcio_health_checking/setup.py    |  9 +-
 src/python/grpcio_reflection/setup.py         |  9 +-
 src/python/grpcio_tests/setup.py              | 16 ++--
 src/python/grpcio_tests/tests/_result.py      |  4 +-
 .../tests/interop/_secure_intraop_test.py     |  6 +-
 .../grpcio_tests/tests/interop/client.py      |  5 +-
 .../grpcio_tests/tests/interop/methods.py     | 45 +++-------
 .../protoc_plugin/_python_plugin_test.py      |  6 +-
 .../reflection/_reflection_servicer_test.py   | 39 ++++----
 .../grpcio_tests/tests/stress/client.py       |  5 +-
 .../grpcio_tests/tests/unit/_api_test.py      | 66 +++++---------
 .../tests/unit/_channel_args_test.py          |  8 +-
 .../unit/_cython/_cancel_many_calls_test.py   |  7 +-
 .../tests/unit/_cython/_channel_test.py       |  4 +-
 .../_read_some_but_not_all_responses_test.py  |  8 +-
 .../tests/unit/_invocation_defects_test.py    | 16 +---
 .../tests/unit/_metadata_code_details_test.py | 28 +++---
 .../grpcio_tests/tests/unit/_rpc_test.py      | 16 +---
 .../tests/unit/beta/_beta_features_test.py    | 12 +--
 .../tests/unit/beta/_face_interface_test.py   | 12 ++-
 .../tests/unit/beta/test_utilities.py         |  5 +-
 .../unit/framework/interfaces/face/_digest.py |  9 +-
 .../framework/interfaces/face/_invocation.py  |  6 +-
 .../grpcio_tests/tests/unit/test_common.py    | 20 ++---
 tools/distrib/yapf_code.sh                    |  3 +-
 38 files changed, 237 insertions(+), 427 deletions(-)

diff --git a/src/python/grpcio/commands.py b/src/python/grpcio/commands.py
index d813df5f448..e50ccbe23e7 100644
--- a/src/python/grpcio/commands.py
+++ b/src/python/grpcio/commands.py
@@ -205,9 +205,7 @@ def check_and_update_cythonization(extensions):
             base, file_ext = os.path.splitext(source)
             if file_ext == '.pyx':
                 generated_pyx_source = next((base + gen_ext
-                                             for gen_ext in (
-                                                 '.c',
-                                                 '.cpp',)
+                                             for gen_ext in ('.c', '.cpp',)
                                              if os.path.isfile(base + gen_ext)),
                                             None)
                 if generated_pyx_source:
diff --git a/src/python/grpcio/grpc/__init__.py b/src/python/grpcio/grpc/__init__.py
index fe299717992..b64a708cc78 100644
--- a/src/python/grpcio/grpc/__init__.py
+++ b/src/python/grpcio/grpc/__init__.py
@@ -1297,47 +1297,22 @@ def server(thread_pool, handlers=None, options=None):
 
 ###################################  __all__  #################################
 
-__all__ = (
-    'FutureTimeoutError',
-    'FutureCancelledError',
-    'Future',
-    'ChannelConnectivity',
-    'StatusCode',
-    'RpcError',
-    'RpcContext',
-    'Call',
-    'ChannelCredentials',
-    'CallCredentials',
-    'AuthMetadataContext',
-    'AuthMetadataPluginCallback',
-    'AuthMetadataPlugin',
-    'ServerCredentials',
-    'UnaryUnaryMultiCallable',
-    'UnaryStreamMultiCallable',
-    'StreamUnaryMultiCallable',
-    'StreamStreamMultiCallable',
-    'Channel',
-    'ServicerContext',
-    'RpcMethodHandler',
-    'HandlerCallDetails',
-    'GenericRpcHandler',
-    'ServiceRpcHandler',
-    'Server',
-    'unary_unary_rpc_method_handler',
-    'unary_stream_rpc_method_handler',
-    'stream_unary_rpc_method_handler',
-    'stream_stream_rpc_method_handler',
-    'method_handlers_generic_handler',
-    'ssl_channel_credentials',
-    'metadata_call_credentials',
-    'access_token_call_credentials',
-    'composite_call_credentials',
-    'composite_channel_credentials',
-    'ssl_server_credentials',
-    'channel_ready_future',
-    'insecure_channel',
-    'secure_channel',
-    'server',)
+__all__ = ('FutureTimeoutError', 'FutureCancelledError', 'Future',
+           'ChannelConnectivity', 'StatusCode', 'RpcError', 'RpcContext',
+           'Call', 'ChannelCredentials', 'CallCredentials',
+           'AuthMetadataContext', 'AuthMetadataPluginCallback',
+           'AuthMetadataPlugin', 'ServerCredentials', 'UnaryUnaryMultiCallable',
+           'UnaryStreamMultiCallable', 'StreamUnaryMultiCallable',
+           'StreamStreamMultiCallable', 'Channel', 'ServicerContext',
+           'RpcMethodHandler', 'HandlerCallDetails', 'GenericRpcHandler',
+           'ServiceRpcHandler', 'Server', 'unary_unary_rpc_method_handler',
+           'unary_stream_rpc_method_handler', 'stream_unary_rpc_method_handler',
+           'stream_stream_rpc_method_handler',
+           'method_handlers_generic_handler', 'ssl_channel_credentials',
+           'metadata_call_credentials', 'access_token_call_credentials',
+           'composite_call_credentials', 'composite_channel_credentials',
+           'ssl_server_credentials', 'channel_ready_future', 'insecure_channel',
+           'secure_channel', 'server',)
 
 ############################### Extension Shims ################################
 
diff --git a/src/python/grpcio/grpc/_channel.py b/src/python/grpcio/grpc/_channel.py
index 77412236cc6..691e96a3228 100644
--- a/src/python/grpcio/grpc/_channel.py
+++ b/src/python/grpcio/grpc/_channel.py
@@ -45,28 +45,24 @@ _EMPTY_FLAGS = 0
 _INFINITE_FUTURE = cygrpc.Timespec(float('+inf'))
 _EMPTY_METADATA = cygrpc.Metadata(())
 
-_UNARY_UNARY_INITIAL_DUE = (
-    cygrpc.OperationType.send_initial_metadata,
-    cygrpc.OperationType.send_message,
-    cygrpc.OperationType.send_close_from_client,
-    cygrpc.OperationType.receive_initial_metadata,
-    cygrpc.OperationType.receive_message,
-    cygrpc.OperationType.receive_status_on_client,)
-_UNARY_STREAM_INITIAL_DUE = (
-    cygrpc.OperationType.send_initial_metadata,
-    cygrpc.OperationType.send_message,
-    cygrpc.OperationType.send_close_from_client,
-    cygrpc.OperationType.receive_initial_metadata,
-    cygrpc.OperationType.receive_status_on_client,)
-_STREAM_UNARY_INITIAL_DUE = (
-    cygrpc.OperationType.send_initial_metadata,
-    cygrpc.OperationType.receive_initial_metadata,
-    cygrpc.OperationType.receive_message,
-    cygrpc.OperationType.receive_status_on_client,)
-_STREAM_STREAM_INITIAL_DUE = (
-    cygrpc.OperationType.send_initial_metadata,
-    cygrpc.OperationType.receive_initial_metadata,
-    cygrpc.OperationType.receive_status_on_client,)
+_UNARY_UNARY_INITIAL_DUE = (cygrpc.OperationType.send_initial_metadata,
+                            cygrpc.OperationType.send_message,
+                            cygrpc.OperationType.send_close_from_client,
+                            cygrpc.OperationType.receive_initial_metadata,
+                            cygrpc.OperationType.receive_message,
+                            cygrpc.OperationType.receive_status_on_client,)
+_UNARY_STREAM_INITIAL_DUE = (cygrpc.OperationType.send_initial_metadata,
+                             cygrpc.OperationType.send_message,
+                             cygrpc.OperationType.send_close_from_client,
+                             cygrpc.OperationType.receive_initial_metadata,
+                             cygrpc.OperationType.receive_status_on_client,)
+_STREAM_UNARY_INITIAL_DUE = (cygrpc.OperationType.send_initial_metadata,
+                             cygrpc.OperationType.receive_initial_metadata,
+                             cygrpc.OperationType.receive_message,
+                             cygrpc.OperationType.receive_status_on_client,)
+_STREAM_STREAM_INITIAL_DUE = (cygrpc.OperationType.send_initial_metadata,
+                              cygrpc.OperationType.receive_initial_metadata,
+                              cygrpc.OperationType.receive_status_on_client,)
 
 _CHANNEL_SUBSCRIPTION_CALLBACK_ERROR_LOG_MESSAGE = (
     'Exception calling channel subscription callback!')
@@ -568,9 +564,9 @@ class _UnaryStreamMultiCallable(grpc.UnaryStreamMultiCallable):
                     )), event_handler)
                 operations = (
                     cygrpc.operation_send_initial_metadata(
-                        _common.cygrpc_metadata(metadata), _EMPTY_FLAGS),
-                    cygrpc.operation_send_message(serialized_request,
-                                                  _EMPTY_FLAGS),
+                        _common.cygrpc_metadata(metadata),
+                        _EMPTY_FLAGS), cygrpc.operation_send_message(
+                            serialized_request, _EMPTY_FLAGS),
                     cygrpc.operation_send_close_from_client(_EMPTY_FLAGS),
                     cygrpc.operation_receive_status_on_client(_EMPTY_FLAGS),)
                 call_error = call.start_client_batch(
@@ -828,10 +824,7 @@ def _deliver(state, initial_connectivity, initial_callbacks):
 
 def _spawn_delivery(state, callbacks):
     delivering_thread = threading.Thread(
-        target=_deliver, args=(
-            state,
-            state.connectivity,
-            callbacks,))
+        target=_deliver, args=(state, state.connectivity, callbacks,))
     delivering_thread.start()
     state.delivering = True
 
diff --git a/src/python/grpcio/grpc/_common.py b/src/python/grpcio/grpc/_common.py
index 7ef2571379b..a5f1f38ea97 100644
--- a/src/python/grpcio/grpc/_common.py
+++ b/src/python/grpcio/grpc/_common.py
@@ -40,12 +40,16 @@ from grpc._cython import cygrpc
 _EMPTY_METADATA = cygrpc.Metadata(())
 
 CYGRPC_CONNECTIVITY_STATE_TO_CHANNEL_CONNECTIVITY = {
-    cygrpc.ConnectivityState.idle: grpc.ChannelConnectivity.IDLE,
-    cygrpc.ConnectivityState.connecting: grpc.ChannelConnectivity.CONNECTING,
-    cygrpc.ConnectivityState.ready: grpc.ChannelConnectivity.READY,
+    cygrpc.ConnectivityState.idle:
+    grpc.ChannelConnectivity.IDLE,
+    cygrpc.ConnectivityState.connecting:
+    grpc.ChannelConnectivity.CONNECTING,
+    cygrpc.ConnectivityState.ready:
+    grpc.ChannelConnectivity.READY,
     cygrpc.ConnectivityState.transient_failure:
     grpc.ChannelConnectivity.TRANSIENT_FAILURE,
-    cygrpc.ConnectivityState.shutdown: grpc.ChannelConnectivity.SHUTDOWN,
+    cygrpc.ConnectivityState.shutdown:
+    grpc.ChannelConnectivity.SHUTDOWN,
 }
 
 CYGRPC_STATUS_CODE_TO_STATUS_CODE = {
diff --git a/src/python/grpcio/grpc/_plugin_wrapping.py b/src/python/grpcio/grpc/_plugin_wrapping.py
index bb9a42f3ffe..69c46aa546c 100644
--- a/src/python/grpcio/grpc/_plugin_wrapping.py
+++ b/src/python/grpcio/grpc/_plugin_wrapping.py
@@ -37,8 +37,7 @@ from grpc._cython import cygrpc
 
 class AuthMetadataContext(
         collections.namedtuple('AuthMetadataContext', (
-            'service_url',
-            'method_name',)), grpc.AuthMetadataContext):
+            'service_url', 'method_name',)), grpc.AuthMetadataContext):
     pass
 
 
diff --git a/src/python/grpcio/grpc/_server.py b/src/python/grpcio/grpc/_server.py
index cbbe2dcbf5d..549c6ccb259 100644
--- a/src/python/grpcio/grpc/_server.py
+++ b/src/python/grpcio/grpc/_server.py
@@ -91,8 +91,7 @@ def _details(state):
 
 class _HandlerCallDetails(
         collections.namedtuple('_HandlerCallDetails', (
-            'method',
-            'invocation_metadata',)), grpc.HandlerCallDetails):
+            'method', 'invocation_metadata',)), grpc.HandlerCallDetails):
     pass
 
 
@@ -143,12 +142,11 @@ def _abort(state, call, code, details):
         effective_code = _abortion_code(state, code)
         effective_details = details if state.details is None else state.details
         if state.initial_metadata_allowed:
-            operations = (
-                cygrpc.operation_send_initial_metadata(_EMPTY_METADATA,
-                                                       _EMPTY_FLAGS),
-                cygrpc.operation_send_status_from_server(
-                    _common.cygrpc_metadata(state.trailing_metadata),
-                    effective_code, effective_details, _EMPTY_FLAGS),)
+            operations = (cygrpc.operation_send_initial_metadata(
+                _EMPTY_METADATA, _EMPTY_FLAGS),
+                          cygrpc.operation_send_status_from_server(
+                              _common.cygrpc_metadata(state.trailing_metadata),
+                              effective_code, effective_details, _EMPTY_FLAGS),)
             token = _SEND_INITIAL_METADATA_AND_SEND_STATUS_FROM_SERVER_TOKEN
         else:
             operations = (cygrpc.operation_send_status_from_server(
@@ -417,11 +415,10 @@ def _send_response(rpc_event, state, serialized_response):
             return False
         else:
             if state.initial_metadata_allowed:
-                operations = (
-                    cygrpc.operation_send_initial_metadata(_EMPTY_METADATA,
-                                                           _EMPTY_FLAGS),
-                    cygrpc.operation_send_message(serialized_response,
-                                                  _EMPTY_FLAGS),)
+                operations = (cygrpc.operation_send_initial_metadata(
+                    _EMPTY_METADATA, _EMPTY_FLAGS),
+                              cygrpc.operation_send_message(serialized_response,
+                                                            _EMPTY_FLAGS),)
                 state.initial_metadata_allowed = False
                 token = _SEND_INITIAL_METADATA_AND_SEND_MESSAGE_TOKEN
             else:
@@ -559,10 +556,8 @@ def _handle_unrecognized_method(rpc_event):
             _EMPTY_METADATA, cygrpc.StatusCode.unimplemented,
             b'Method not found!', _EMPTY_FLAGS),)
     rpc_state = _RPCState()
-    rpc_event.operation_call.start_server_batch(operations,
-                                                lambda ignored_event: (
-                                                    rpc_state,
-                                                    (),))
+    rpc_event.operation_call.start_server_batch(
+        operations, lambda ignored_event: (rpc_state, (),))
     return rpc_state
 
 
diff --git a/src/python/grpcio/grpc/_utilities.py b/src/python/grpcio/grpc/_utilities.py
index 7c602eb37e3..d5a7b2aeef9 100644
--- a/src/python/grpcio/grpc/_utilities.py
+++ b/src/python/grpcio/grpc/_utilities.py
@@ -44,14 +44,9 @@ _DONE_CALLBACK_EXCEPTION_LOG_MESSAGE = (
 
 class RpcMethodHandler(
         collections.namedtuple('_RpcMethodHandler', (
-            'request_streaming',
-            'response_streaming',
-            'request_deserializer',
-            'response_serializer',
-            'unary_unary',
-            'unary_stream',
-            'stream_unary',
-            'stream_stream',)), grpc.RpcMethodHandler):
+            'request_streaming', 'response_streaming', 'request_deserializer',
+            'response_serializer', 'unary_unary', 'unary_stream',
+            'stream_unary', 'stream_stream',)), grpc.RpcMethodHandler):
     pass
 
 
diff --git a/src/python/grpcio/grpc/beta/_client_adaptations.py b/src/python/grpcio/grpc/beta/_client_adaptations.py
index e5b28e9408e..b53395e2a2e 100644
--- a/src/python/grpcio/grpc/beta/_client_adaptations.py
+++ b/src/python/grpcio/grpc/beta/_client_adaptations.py
@@ -454,12 +454,9 @@ class _GenericStub(face.GenericStub):
                              metadata=None,
                              with_call=None,
                              protocol_options=None):
-        request_serializer = self._request_serializers.get((
-            group,
-            method,))
-        response_deserializer = self._response_deserializers.get((
-            group,
-            method,))
+        request_serializer = self._request_serializers.get((group, method,))
+        response_deserializer = self._response_deserializers.get((group,
+                                                                  method,))
         return _blocking_unary_unary(self._channel, group, method, timeout,
                                      with_call, protocol_options, metadata,
                                      self._metadata_transformer, request,
@@ -472,12 +469,9 @@ class _GenericStub(face.GenericStub):
                            timeout,
                            metadata=None,
                            protocol_options=None):
-        request_serializer = self._request_serializers.get((
-            group,
-            method,))
-        response_deserializer = self._response_deserializers.get((
-            group,
-            method,))
+        request_serializer = self._request_serializers.get((group, method,))
+        response_deserializer = self._response_deserializers.get((group,
+                                                                  method,))
         return _future_unary_unary(self._channel, group, method, timeout,
                                    protocol_options, metadata,
                                    self._metadata_transformer, request,
@@ -490,12 +484,9 @@ class _GenericStub(face.GenericStub):
                             timeout,
                             metadata=None,
                             protocol_options=None):
-        request_serializer = self._request_serializers.get((
-            group,
-            method,))
-        response_deserializer = self._response_deserializers.get((
-            group,
-            method,))
+        request_serializer = self._request_serializers.get((group, method,))
+        response_deserializer = self._response_deserializers.get((group,
+                                                                  method,))
         return _unary_stream(self._channel, group, method, timeout,
                              protocol_options, metadata,
                              self._metadata_transformer, request,
@@ -509,12 +500,9 @@ class _GenericStub(face.GenericStub):
                               metadata=None,
                               with_call=None,
                               protocol_options=None):
-        request_serializer = self._request_serializers.get((
-            group,
-            method,))
-        response_deserializer = self._response_deserializers.get((
-            group,
-            method,))
+        request_serializer = self._request_serializers.get((group, method,))
+        response_deserializer = self._response_deserializers.get((group,
+                                                                  method,))
         return _blocking_stream_unary(
             self._channel, group, method, timeout, with_call, protocol_options,
             metadata, self._metadata_transformer, request_iterator,
@@ -527,12 +515,9 @@ class _GenericStub(face.GenericStub):
                             timeout,
                             metadata=None,
                             protocol_options=None):
-        request_serializer = self._request_serializers.get((
-            group,
-            method,))
-        response_deserializer = self._response_deserializers.get((
-            group,
-            method,))
+        request_serializer = self._request_serializers.get((group, method,))
+        response_deserializer = self._response_deserializers.get((group,
+                                                                  method,))
         return _future_stream_unary(
             self._channel, group, method, timeout, protocol_options, metadata,
             self._metadata_transformer, request_iterator, request_serializer,
@@ -545,12 +530,9 @@ class _GenericStub(face.GenericStub):
                              timeout,
                              metadata=None,
                              protocol_options=None):
-        request_serializer = self._request_serializers.get((
-            group,
-            method,))
-        response_deserializer = self._response_deserializers.get((
-            group,
-            method,))
+        request_serializer = self._request_serializers.get((group, method,))
+        response_deserializer = self._response_deserializers.get((group,
+                                                                  method,))
         return _stream_stream(self._channel, group, method, timeout,
                               protocol_options, metadata,
                               self._metadata_transformer, request_iterator,
@@ -599,45 +581,33 @@ class _GenericStub(face.GenericStub):
         raise NotImplementedError()
 
     def unary_unary(self, group, method):
-        request_serializer = self._request_serializers.get((
-            group,
-            method,))
-        response_deserializer = self._response_deserializers.get((
-            group,
-            method,))
+        request_serializer = self._request_serializers.get((group, method,))
+        response_deserializer = self._response_deserializers.get((group,
+                                                                  method,))
         return _UnaryUnaryMultiCallable(
             self._channel, group, method, self._metadata_transformer,
             request_serializer, response_deserializer)
 
     def unary_stream(self, group, method):
-        request_serializer = self._request_serializers.get((
-            group,
-            method,))
-        response_deserializer = self._response_deserializers.get((
-            group,
-            method,))
+        request_serializer = self._request_serializers.get((group, method,))
+        response_deserializer = self._response_deserializers.get((group,
+                                                                  method,))
         return _UnaryStreamMultiCallable(
             self._channel, group, method, self._metadata_transformer,
             request_serializer, response_deserializer)
 
     def stream_unary(self, group, method):
-        request_serializer = self._request_serializers.get((
-            group,
-            method,))
-        response_deserializer = self._response_deserializers.get((
-            group,
-            method,))
+        request_serializer = self._request_serializers.get((group, method,))
+        response_deserializer = self._response_deserializers.get((group,
+                                                                  method,))
         return _StreamUnaryMultiCallable(
             self._channel, group, method, self._metadata_transformer,
             request_serializer, response_deserializer)
 
     def stream_stream(self, group, method):
-        request_serializer = self._request_serializers.get((
-            group,
-            method,))
-        response_deserializer = self._response_deserializers.get((
-            group,
-            method,))
+        request_serializer = self._request_serializers.get((group, method,))
+        response_deserializer = self._response_deserializers.get((group,
+                                                                  method,))
         return _StreamStreamMultiCallable(
             self._channel, group, method, self._metadata_transformer,
             request_serializer, response_deserializer)
diff --git a/src/python/grpcio/grpc/beta/_connectivity_channel.py b/src/python/grpcio/grpc/beta/_connectivity_channel.py
index 39020d2b4ef..bfb847f80af 100644
--- a/src/python/grpcio/grpc/beta/_connectivity_channel.py
+++ b/src/python/grpcio/grpc/beta/_connectivity_channel.py
@@ -85,9 +85,7 @@ class ConnectivityChannel(object):
 
     def _spawn_delivery(self, connectivity, callbacks):
         delivering_thread = threading.Thread(
-            target=self._deliver, args=(
-                connectivity,
-                callbacks,))
+            target=self._deliver, args=(connectivity, callbacks,))
         delivering_thread.start()
         self._delivering = True
 
diff --git a/src/python/grpcio/grpc/beta/_server_adaptations.py b/src/python/grpcio/grpc/beta/_server_adaptations.py
index 206bd7e4681..174af2d6422 100644
--- a/src/python/grpcio/grpc/beta/_server_adaptations.py
+++ b/src/python/grpcio/grpc/beta/_server_adaptations.py
@@ -256,14 +256,9 @@ def _adapt_stream_stream_event(stream_stream_event):
 
 class _SimpleMethodHandler(
         collections.namedtuple('_MethodHandler', (
-            'request_streaming',
-            'response_streaming',
-            'request_deserializer',
-            'response_serializer',
-            'unary_unary',
-            'unary_stream',
-            'stream_unary',
-            'stream_stream',)), grpc.RpcMethodHandler):
+            'request_streaming', 'response_streaming', 'request_deserializer',
+            'response_serializer', 'unary_unary', 'unary_stream',
+            'stream_unary', 'stream_stream',)), grpc.RpcMethodHandler):
     pass
 
 
diff --git a/src/python/grpcio/grpc/framework/interfaces/base/utilities.py b/src/python/grpcio/grpc/framework/interfaces/base/utilities.py
index 461706ff9f2..80d5d25c12b 100644
--- a/src/python/grpcio/grpc/framework/interfaces/base/utilities.py
+++ b/src/python/grpcio/grpc/framework/interfaces/base/utilities.py
@@ -34,19 +34,14 @@ from grpc.framework.interfaces.base import base
 
 
 class _Completion(base.Completion,
-                  collections.namedtuple('_Completion', (
-                      'terminal_metadata',
-                      'code',
-                      'message',))):
+                  collections.namedtuple('_Completion', ('terminal_metadata',
+                                                         'code', 'message',))):
     """A trivial implementation of base.Completion."""
 
 
 class _Subscription(base.Subscription,
                     collections.namedtuple('_Subscription', (
-                        'kind',
-                        'termination_callback',
-                        'allowance',
-                        'operator',
+                        'kind', 'termination_callback', 'allowance', 'operator',
                         'protocol_receiver',))):
     """A trivial implementation of base.Subscription."""
 
diff --git a/src/python/grpcio/grpc/framework/interfaces/face/face.py b/src/python/grpcio/grpc/framework/interfaces/face/face.py
index 36ddca18c14..6c7e2a3af6a 100644
--- a/src/python/grpcio/grpc/framework/interfaces/face/face.py
+++ b/src/python/grpcio/grpc/framework/interfaces/face/face.py
@@ -63,18 +63,13 @@ class NoSuchMethodError(Exception):
         self.method = method
 
     def __repr__(self):
-        return 'face.NoSuchMethodError(%s, %s)' % (
-            self.group,
-            self.method,)
+        return 'face.NoSuchMethodError(%s, %s)' % (self.group, self.method,)
 
 
 class Abortion(
-        collections.namedtuple('Abortion', (
-            'kind',
-            'initial_metadata',
-            'terminal_metadata',
-            'code',
-            'details',))):
+        collections.namedtuple('Abortion',
+                               ('kind', 'initial_metadata', 'terminal_metadata',
+                                'code', 'details',))):
     """A value describing RPC abortion.
 
   Attributes:
diff --git a/src/python/grpcio/support.py b/src/python/grpcio/support.py
index a228ba4a482..edc6def8386 100644
--- a/src/python/grpcio/support.py
+++ b/src/python/grpcio/support.py
@@ -53,7 +53,9 @@ Could not find <Python.h>. This could mean the following:
     (check your environment variables or try re-installing?)
 """
 
-C_CHECKS = {C_PYTHON_DEV: C_PYTHON_DEV_ERROR_MESSAGE,}
+C_CHECKS = {
+    C_PYTHON_DEV: C_PYTHON_DEV_ERROR_MESSAGE,
+}
 
 
 def _compile(compiler, source_string):
diff --git a/src/python/grpcio_health_checking/setup.py b/src/python/grpcio_health_checking/setup.py
index 4c3991dcc4a..072c3263c6e 100644
--- a/src/python/grpcio_health_checking/setup.py
+++ b/src/python/grpcio_health_checking/setup.py
@@ -40,14 +40,15 @@ os.chdir(os.path.dirname(os.path.abspath(__file__)))
 import health_commands
 import grpc_version
 
-PACKAGE_DIRECTORIES = {'': '.',}
+PACKAGE_DIRECTORIES = {
+    '': '.',
+}
 
 SETUP_REQUIRES = (
     'grpcio-tools>={version}'.format(version=grpc_version.VERSION),)
 
-INSTALL_REQUIRES = (
-    'protobuf>=3.0.0',
-    'grpcio>={version}'.format(version=grpc_version.VERSION),)
+INSTALL_REQUIRES = ('protobuf>=3.0.0',
+                    'grpcio>={version}'.format(version=grpc_version.VERSION),)
 
 COMMAND_CLASS = {
     # Run preprocess from the repository *before* doing any packaging!
diff --git a/src/python/grpcio_reflection/setup.py b/src/python/grpcio_reflection/setup.py
index 2926923029a..19aafe443a9 100644
--- a/src/python/grpcio_reflection/setup.py
+++ b/src/python/grpcio_reflection/setup.py
@@ -40,14 +40,15 @@ os.chdir(os.path.dirname(os.path.abspath(__file__)))
 import reflection_commands
 import grpc_version
 
-PACKAGE_DIRECTORIES = {'': '.',}
+PACKAGE_DIRECTORIES = {
+    '': '.',
+}
 
 SETUP_REQUIRES = (
     'grpcio-tools>={version}'.format(version=grpc_version.VERSION),)
 
-INSTALL_REQUIRES = (
-    'protobuf>=3.0.0',
-    'grpcio>={version}'.format(version=grpc_version.VERSION),)
+INSTALL_REQUIRES = ('protobuf>=3.0.0',
+                    'grpcio>={version}'.format(version=grpc_version.VERSION),)
 
 COMMAND_CLASS = {
     # Run preprocess from the repository *before* doing any packaging!
diff --git a/src/python/grpcio_tests/setup.py b/src/python/grpcio_tests/setup.py
index f0407d1a557..b0c73fc575b 100644
--- a/src/python/grpcio_tests/setup.py
+++ b/src/python/grpcio_tests/setup.py
@@ -47,18 +47,16 @@ import grpc_version
 
 LICENSE = '3-clause BSD'
 
-PACKAGE_DIRECTORIES = {'': '.',}
+PACKAGE_DIRECTORIES = {
+    '': '.',
+}
 
 INSTALL_REQUIRES = (
-    'coverage>=4.0',
-    'enum34>=1.0.4',
-    'futures>=2.2.0',
+    'coverage>=4.0', 'enum34>=1.0.4', 'futures>=2.2.0',
     'grpcio>={version}'.format(version=grpc_version.VERSION),
     'grpcio-tools>={version}'.format(version=grpc_version.VERSION),
     'grpcio-health-checking>={version}'.format(version=grpc_version.VERSION),
-    'oauth2client>=1.4.7',
-    'protobuf>=3.0.0',
-    'six>=1.10',)
+    'oauth2client>=1.4.7', 'protobuf>=3.0.0', 'six>=1.10',)
 
 COMMAND_CLASS = {
     # Run `preprocess` *before* doing any packaging!
@@ -75,7 +73,9 @@ PACKAGE_DATA = {
         'credentials/server1.key',
         'credentials/server1.pem',
     ],
-    'tests.protoc_plugin.protos.invocation_testing': ['same.proto',],
+    'tests.protoc_plugin.protos.invocation_testing': [
+        'same.proto',
+    ],
     'tests.protoc_plugin.protos.invocation_testing.split_messages': [
         'messages.proto',
     ],
diff --git a/src/python/grpcio_tests/tests/_result.py b/src/python/grpcio_tests/tests/_result.py
index 794b7540f14..22c667b4608 100644
--- a/src/python/grpcio_tests/tests/_result.py
+++ b/src/python/grpcio_tests/tests/_result.py
@@ -453,7 +453,9 @@ def jenkins_junit_xml(result):
     })
     for case in result.cases.values():
         if case.kind is CaseResult.Kind.SUCCESS:
-            ElementTree.SubElement(suite, 'testcase', {'name': case.name,})
+            ElementTree.SubElement(suite, 'testcase', {
+                'name': case.name,
+            })
         elif case.kind in (CaseResult.Kind.ERROR, CaseResult.Kind.FAILURE):
             case_xml = ElementTree.SubElement(suite, 'testcase', {
                 'name': case.name,
diff --git a/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py b/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py
index b28406ed3ff..5fe929b99ed 100644
--- a/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py
+++ b/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py
@@ -55,9 +55,9 @@ class SecureIntraopTest(_intraop_test_case.IntraopTestCase, unittest.TestCase):
         self.stub = test_pb2.TestServiceStub(
             grpc.secure_channel('localhost:{}'.format(port),
                                 grpc.ssl_channel_credentials(
-                                    resources.test_root_certificates()), ((
-                                        'grpc.ssl_target_name_override',
-                                        _SERVER_HOST_OVERRIDE,),)))
+                                    resources.test_root_certificates()), (
+                                        ('grpc.ssl_target_name_override',
+                                         _SERVER_HOST_OVERRIDE,),)))
 
 
 if __name__ == '__main__':
diff --git a/src/python/grpcio_tests/tests/interop/client.py b/src/python/grpcio_tests/tests/interop/client.py
index f177896e8e6..833818e6625 100644
--- a/src/python/grpcio_tests/tests/interop/client.py
+++ b/src/python/grpcio_tests/tests/interop/client.py
@@ -116,9 +116,8 @@ def _stub(args):
             channel_credentials = grpc.composite_channel_credentials(
                 channel_credentials, call_credentials)
 
-        channel = grpc.secure_channel(target, channel_credentials, ((
-            'grpc.ssl_target_name_override',
-            args.server_host_override,),))
+        channel = grpc.secure_channel(target, channel_credentials, (
+            ('grpc.ssl_target_name_override', args.server_host_override,),))
     else:
         channel = grpc.insecure_channel(target)
     if args.test_case == "unimplemented_service":
diff --git a/src/python/grpcio_tests/tests/interop/methods.py b/src/python/grpcio_tests/tests/interop/methods.py
index 1f9b356eb2d..662ea9ce570 100644
--- a/src/python/grpcio_tests/tests/interop/methods.py
+++ b/src/python/grpcio_tests/tests/interop/methods.py
@@ -165,11 +165,7 @@ def _large_unary(stub):
 
 
 def _client_streaming(stub):
-    payload_body_sizes = (
-        27182,
-        8,
-        1828,
-        45904,)
+    payload_body_sizes = (27182, 8, 1828, 45904,)
     payloads = (messages_pb2.Payload(body=b'\x00' * size)
                 for size in payload_body_sizes)
     requests = (messages_pb2.StreamingInputCallRequest(payload=payload)
@@ -181,19 +177,14 @@ def _client_streaming(stub):
 
 
 def _server_streaming(stub):
-    sizes = (
-        31415,
-        9,
-        2653,
-        58979,)
+    sizes = (31415, 9, 2653, 58979,)
 
     request = messages_pb2.StreamingOutputCallRequest(
         response_type=messages_pb2.COMPRESSABLE,
-        response_parameters=(
-            messages_pb2.ResponseParameters(size=sizes[0]),
-            messages_pb2.ResponseParameters(size=sizes[1]),
-            messages_pb2.ResponseParameters(size=sizes[2]),
-            messages_pb2.ResponseParameters(size=sizes[3]),))
+        response_parameters=(messages_pb2.ResponseParameters(size=sizes[0]),
+                             messages_pb2.ResponseParameters(size=sizes[1]),
+                             messages_pb2.ResponseParameters(size=sizes[2]),
+                             messages_pb2.ResponseParameters(size=sizes[3]),))
     response_iterator = stub.StreamingOutputCall(request)
     for index, response in enumerate(response_iterator):
         _validate_payload_type_and_length(response, messages_pb2.COMPRESSABLE,
@@ -240,16 +231,8 @@ class _Pipe(object):
 
 
 def _ping_pong(stub):
-    request_response_sizes = (
-        31415,
-        9,
-        2653,
-        58979,)
-    request_payload_sizes = (
-        27182,
-        8,
-        1828,
-        45904,)
+    request_response_sizes = (31415, 9, 2653, 58979,)
+    request_payload_sizes = (27182, 8, 1828, 45904,)
 
     with _Pipe() as pipe:
         response_iterator = stub.FullDuplexCall(pipe)
@@ -277,16 +260,8 @@ def _cancel_after_begin(stub):
 
 
 def _cancel_after_first_response(stub):
-    request_response_sizes = (
-        31415,
-        9,
-        2653,
-        58979,)
-    request_payload_sizes = (
-        27182,
-        8,
-        1828,
-        45904,)
+    request_response_sizes = (31415, 9, 2653, 58979,)
+    request_payload_sizes = (27182, 8, 1828, 45904,)
     with _Pipe() as pipe:
         response_iterator = stub.FullDuplexCall(pipe)
 
diff --git a/src/python/grpcio_tests/tests/protoc_plugin/_python_plugin_test.py b/src/python/grpcio_tests/tests/protoc_plugin/_python_plugin_test.py
index ae5da2c3dbe..a6e3ca0b23b 100644
--- a/src/python/grpcio_tests/tests/protoc_plugin/_python_plugin_test.py
+++ b/src/python/grpcio_tests/tests/protoc_plugin/_python_plugin_test.py
@@ -134,10 +134,8 @@ class _ServicerMethods(object):
 
 
 class _Service(
-        collections.namedtuple('_Service', (
-            'servicer_methods',
-            'server',
-            'stub',))):
+        collections.namedtuple('_Service', ('servicer_methods', 'server',
+                                            'stub',))):
     """A live and running service.
 
   Attributes:
diff --git a/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py b/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py
index 76e89ca039f..d06ff064e24 100644
--- a/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py
+++ b/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py
@@ -69,11 +69,10 @@ class ReflectionServicerTest(unittest.TestCase):
         self._stub = reflection_pb2.ServerReflectionStub(channel)
 
     def testFileByName(self):
-        requests = (
-            reflection_pb2.ServerReflectionRequest(
-                file_by_filename=_EMPTY_PROTO_FILE_NAME),
-            reflection_pb2.ServerReflectionRequest(
-                file_by_filename='i-donut-exist'),)
+        requests = (reflection_pb2.ServerReflectionRequest(
+            file_by_filename=_EMPTY_PROTO_FILE_NAME),
+                    reflection_pb2.ServerReflectionRequest(
+                        file_by_filename='i-donut-exist'),)
         responses = tuple(self._stub.ServerReflectionInfo(iter(requests)))
         expected_responses = (
             reflection_pb2.ServerReflectionResponse(
@@ -90,12 +89,10 @@ class ReflectionServicerTest(unittest.TestCase):
         self.assertSequenceEqual(expected_responses, responses)
 
     def testFileBySymbol(self):
-        requests = (
-            reflection_pb2.ServerReflectionRequest(
-                file_containing_symbol=_EMPTY_PROTO_SYMBOL_NAME),
-            reflection_pb2.ServerReflectionRequest(
-                file_containing_symbol='i.donut.exist.co.uk.org.net.me.name.foo'
-            ),)
+        requests = (reflection_pb2.ServerReflectionRequest(
+            file_containing_symbol=_EMPTY_PROTO_SYMBOL_NAME
+        ), reflection_pb2.ServerReflectionRequest(
+            file_containing_symbol='i.donut.exist.co.uk.org.net.me.name.foo'),)
         responses = tuple(self._stub.ServerReflectionInfo(iter(requests)))
         expected_responses = (
             reflection_pb2.ServerReflectionResponse(
@@ -115,15 +112,14 @@ class ReflectionServicerTest(unittest.TestCase):
         'TODO(atash): implement file-containing-extension reflection '
         '(see https://github.com/google/protobuf/issues/2248)')
     def testFileContainingExtension(self):
-        requests = (
-            reflection_pb2.ServerReflectionRequest(
-                file_containing_extension=reflection_pb2.ExtensionRequest(
-                    containing_type='grpc.testing.proto2.Empty',
-                    extension_number=125,),),
-            reflection_pb2.ServerReflectionRequest(
-                file_containing_extension=reflection_pb2.ExtensionRequest(
-                    containing_type='i.donut.exist.co.uk.org.net.me.name.foo',
-                    extension_number=55,),),)
+        requests = (reflection_pb2.ServerReflectionRequest(
+            file_containing_extension=reflection_pb2.ExtensionRequest(
+                containing_type='grpc.testing.proto2.Empty',
+                extension_number=125,),
+        ), reflection_pb2.ServerReflectionRequest(
+            file_containing_extension=reflection_pb2.ExtensionRequest(
+                containing_type='i.donut.exist.co.uk.org.net.me.name.foo',
+                extension_number=55,),),)
         responses = tuple(self._stub.ServerReflectionInfo(iter(requests)))
         expected_responses = (
             reflection_pb2.ServerReflectionResponse(
@@ -140,7 +136,8 @@ class ReflectionServicerTest(unittest.TestCase):
         self.assertSequenceEqual(expected_responses, responses)
 
     def testListServices(self):
-        requests = (reflection_pb2.ServerReflectionRequest(list_services='',),)
+        requests = (reflection_pb2.ServerReflectionRequest(
+            list_services='',),)
         responses = tuple(self._stub.ServerReflectionInfo(iter(requests)))
         expected_responses = (reflection_pb2.ServerReflectionResponse(
             valid_host='',
diff --git a/src/python/grpcio_tests/tests/stress/client.py b/src/python/grpcio_tests/tests/stress/client.py
index 61f9e1c6b17..b9dbe61d44b 100644
--- a/src/python/grpcio_tests/tests/stress/client.py
+++ b/src/python/grpcio_tests/tests/stress/client.py
@@ -117,9 +117,8 @@ def _get_channel(target, args):
             root_certificates = None  # will load default roots.
         channel_credentials = grpc.ssl_channel_credentials(
             root_certificates=root_certificates)
-        options = ((
-            'grpc.ssl_target_name_override',
-            args.server_host_override,),)
+        options = (('grpc.ssl_target_name_override',
+                    args.server_host_override,),)
         channel = grpc.secure_channel(
             target, channel_credentials, options=options)
     else:
diff --git a/src/python/grpcio_tests/tests/unit/_api_test.py b/src/python/grpcio_tests/tests/unit/_api_test.py
index 5435c5500cc..40c4f0a22a6 100644
--- a/src/python/grpcio_tests/tests/unit/_api_test.py
+++ b/src/python/grpcio_tests/tests/unit/_api_test.py
@@ -41,46 +41,23 @@ class AllTest(unittest.TestCase):
 
     def testAll(self):
         expected_grpc_code_elements = (
-            'FutureTimeoutError',
-            'FutureCancelledError',
-            'Future',
-            'ChannelConnectivity',
-            'StatusCode',
-            'RpcError',
-            'RpcContext',
-            'Call',
-            'ChannelCredentials',
-            'CallCredentials',
-            'AuthMetadataContext',
-            'AuthMetadataPluginCallback',
-            'AuthMetadataPlugin',
-            'ServerCredentials',
-            'UnaryUnaryMultiCallable',
-            'UnaryStreamMultiCallable',
-            'StreamUnaryMultiCallable',
-            'StreamStreamMultiCallable',
-            'Channel',
-            'ServicerContext',
-            'RpcMethodHandler',
-            'HandlerCallDetails',
-            'GenericRpcHandler',
-            'ServiceRpcHandler',
-            'Server',
-            'unary_unary_rpc_method_handler',
-            'unary_stream_rpc_method_handler',
+            'FutureTimeoutError', 'FutureCancelledError', 'Future',
+            'ChannelConnectivity', 'StatusCode', 'RpcError', 'RpcContext',
+            'Call', 'ChannelCredentials', 'CallCredentials',
+            'AuthMetadataContext', 'AuthMetadataPluginCallback',
+            'AuthMetadataPlugin', 'ServerCredentials',
+            'UnaryUnaryMultiCallable', 'UnaryStreamMultiCallable',
+            'StreamUnaryMultiCallable', 'StreamStreamMultiCallable', 'Channel',
+            'ServicerContext', 'RpcMethodHandler', 'HandlerCallDetails',
+            'GenericRpcHandler', 'ServiceRpcHandler', 'Server',
+            'unary_unary_rpc_method_handler', 'unary_stream_rpc_method_handler',
             'stream_unary_rpc_method_handler',
             'stream_stream_rpc_method_handler',
-            'method_handlers_generic_handler',
-            'ssl_channel_credentials',
-            'metadata_call_credentials',
-            'access_token_call_credentials',
-            'composite_call_credentials',
-            'composite_channel_credentials',
-            'ssl_server_credentials',
-            'channel_ready_future',
-            'insecure_channel',
-            'secure_channel',
-            'server',)
+            'method_handlers_generic_handler', 'ssl_channel_credentials',
+            'metadata_call_credentials', 'access_token_call_credentials',
+            'composite_call_credentials', 'composite_channel_credentials',
+            'ssl_server_credentials', 'channel_ready_future',
+            'insecure_channel', 'secure_channel', 'server',)
 
         six.assertCountEqual(self, expected_grpc_code_elements,
                              _from_grpc_import_star.GRPC_ELEMENTS)
@@ -89,13 +66,12 @@ class AllTest(unittest.TestCase):
 class ChannelConnectivityTest(unittest.TestCase):
 
     def testChannelConnectivity(self):
-        self.assertSequenceEqual((
-            grpc.ChannelConnectivity.IDLE,
-            grpc.ChannelConnectivity.CONNECTING,
-            grpc.ChannelConnectivity.READY,
-            grpc.ChannelConnectivity.TRANSIENT_FAILURE,
-            grpc.ChannelConnectivity.SHUTDOWN,),
-                                 tuple(grpc.ChannelConnectivity))
+        self.assertSequenceEqual(
+            (grpc.ChannelConnectivity.IDLE, grpc.ChannelConnectivity.CONNECTING,
+             grpc.ChannelConnectivity.READY,
+             grpc.ChannelConnectivity.TRANSIENT_FAILURE,
+             grpc.ChannelConnectivity.SHUTDOWN,),
+            tuple(grpc.ChannelConnectivity))
 
 
 class ChannelTest(unittest.TestCase):
diff --git a/src/python/grpcio_tests/tests/unit/_channel_args_test.py b/src/python/grpcio_tests/tests/unit/_channel_args_test.py
index 845db777a4c..4ff8f1a1868 100644
--- a/src/python/grpcio_tests/tests/unit/_channel_args_test.py
+++ b/src/python/grpcio_tests/tests/unit/_channel_args_test.py
@@ -39,12 +39,8 @@ class TestPointerWrapper(object):
         return 123456
 
 
-TEST_CHANNEL_ARGS = (
-    ('arg1', b'bytes_val'),
-    ('arg2', 'str_val'),
-    ('arg3', 1),
-    (b'arg4', 'str_val'),
-    ('arg6', TestPointerWrapper()),)
+TEST_CHANNEL_ARGS = (('arg1', b'bytes_val'), ('arg2', 'str_val'), ('arg3', 1),
+                     (b'arg4', 'str_val'), ('arg6', TestPointerWrapper()),)
 
 
 class ChannelArgsTest(unittest.TestCase):
diff --git a/src/python/grpcio_tests/tests/unit/_cython/_cancel_many_calls_test.py b/src/python/grpcio_tests/tests/unit/_cython/_cancel_many_calls_test.py
index d77f5ecb27e..ee7a16ad008 100644
--- a/src/python/grpcio_tests/tests/unit/_cython/_cancel_many_calls_test.py
+++ b/src/python/grpcio_tests/tests/unit/_cython/_cancel_many_calls_test.py
@@ -167,11 +167,8 @@ class CancelManyCallsTest(unittest.TestCase):
 
         state = _State()
 
-        server_thread_args = (
-            state,
-            server,
-            server_completion_queue,
-            server_thread_pool,)
+        server_thread_args = (state, server, server_completion_queue,
+                              server_thread_pool,)
         server_thread = threading.Thread(target=_serve, args=server_thread_args)
         server_thread.start()
 
diff --git a/src/python/grpcio_tests/tests/unit/_cython/_channel_test.py b/src/python/grpcio_tests/tests/unit/_cython/_channel_test.py
index 5c7f9030151..81307af7702 100644
--- a/src/python/grpcio_tests/tests/unit/_cython/_channel_test.py
+++ b/src/python/grpcio_tests/tests/unit/_cython/_channel_test.py
@@ -71,9 +71,7 @@ class ChannelTest(unittest.TestCase):
 
     def test_single_channel_lonely_connectivity(self):
         channel, completion_queue = _channel_and_completion_queue()
-        _in_parallel(_connectivity_loop, (
-            channel,
-            completion_queue,))
+        _in_parallel(_connectivity_loop, (channel, completion_queue,))
         completion_queue.shutdown()
 
     def test_multiple_channels_lonely_connectivity(self):
diff --git a/src/python/grpcio_tests/tests/unit/_cython/_read_some_but_not_all_responses_test.py b/src/python/grpcio_tests/tests/unit/_cython/_read_some_but_not_all_responses_test.py
index 9fbfcbb9c02..2cc8aeef6d8 100644
--- a/src/python/grpcio_tests/tests/unit/_cython/_read_some_but_not_all_responses_test.py
+++ b/src/python/grpcio_tests/tests/unit/_cython/_read_some_but_not_all_responses_test.py
@@ -151,11 +151,9 @@ class ReadSomeButNotAllResponsesTest(unittest.TestCase):
         server_send_first_message_tag = 'server_send_first_message_tag'
         server_send_second_message_tag = 'server_send_second_message_tag'
         server_complete_rpc_tag = 'server_complete_rpc_tag'
-        server_call_due = set((
-            server_send_initial_metadata_tag,
-            server_send_first_message_tag,
-            server_send_second_message_tag,
-            server_complete_rpc_tag,))
+        server_call_due = set(
+            (server_send_initial_metadata_tag, server_send_first_message_tag,
+             server_send_second_message_tag, server_complete_rpc_tag,))
         server_call_completion_queue = cygrpc.CompletionQueue()
         server_call_driver = _QueueDriver(server_call_condition,
                                           server_call_completion_queue,
diff --git a/src/python/grpcio_tests/tests/unit/_invocation_defects_test.py b/src/python/grpcio_tests/tests/unit/_invocation_defects_test.py
index efeb237874f..f2e3898ed6f 100644
--- a/src/python/grpcio_tests/tests/unit/_invocation_defects_test.py
+++ b/src/python/grpcio_tests/tests/unit/_invocation_defects_test.py
@@ -77,9 +77,7 @@ class _Handler(object):
     def handle_unary_unary(self, request, servicer_context):
         self._control.control()
         if servicer_context is not None:
-            servicer_context.set_trailing_metadata(((
-                'testkey',
-                'testvalue',),))
+            servicer_context.set_trailing_metadata((('testkey', 'testvalue',),))
         return request
 
     def handle_unary_stream(self, request, servicer_context):
@@ -88,9 +86,7 @@ class _Handler(object):
             yield request
         self._control.control()
         if servicer_context is not None:
-            servicer_context.set_trailing_metadata(((
-                'testkey',
-                'testvalue',),))
+            servicer_context.set_trailing_metadata((('testkey', 'testvalue',),))
 
     def handle_stream_unary(self, request_iterator, servicer_context):
         if servicer_context is not None:
@@ -102,17 +98,13 @@ class _Handler(object):
             response_elements.append(request)
         self._control.control()
         if servicer_context is not None:
-            servicer_context.set_trailing_metadata(((
-                'testkey',
-                'testvalue',),))
+            servicer_context.set_trailing_metadata((('testkey', 'testvalue',),))
         return b''.join(response_elements)
 
     def handle_stream_stream(self, request_iterator, servicer_context):
         self._control.control()
         if servicer_context is not None:
-            servicer_context.set_trailing_metadata(((
-                'testkey',
-                'testvalue',),))
+            servicer_context.set_trailing_metadata((('testkey', 'testvalue',),))
         for request in request_iterator:
             self._control.control()
             yield request
diff --git a/src/python/grpcio_tests/tests/unit/_metadata_code_details_test.py b/src/python/grpcio_tests/tests/unit/_metadata_code_details_test.py
index af2ce64dcea..a2cccfc7014 100644
--- a/src/python/grpcio_tests/tests/unit/_metadata_code_details_test.py
+++ b/src/python/grpcio_tests/tests/unit/_metadata_code_details_test.py
@@ -164,7 +164,8 @@ class _Servicer(object):
 
 def _generic_handler(servicer):
     method_handlers = {
-        _UNARY_UNARY: grpc.unary_unary_rpc_method_handler(
+        _UNARY_UNARY:
+        grpc.unary_unary_rpc_method_handler(
             servicer.unary_unary,
             request_deserializer=_REQUEST_DESERIALIZER,
             response_serializer=_RESPONSE_SERIALIZER),
@@ -172,7 +173,8 @@ def _generic_handler(servicer):
         grpc.unary_stream_rpc_method_handler(servicer.unary_stream),
         _STREAM_UNARY:
         grpc.stream_unary_rpc_method_handler(servicer.stream_unary),
-        _STREAM_STREAM: grpc.stream_stream_rpc_method_handler(
+        _STREAM_STREAM:
+        grpc.stream_stream_rpc_method_handler(
             servicer.stream_stream,
             request_deserializer=_REQUEST_DESERIALIZER,
             response_serializer=_RESPONSE_SERIALIZER),
@@ -192,25 +194,15 @@ class MetadataCodeDetailsTest(unittest.TestCase):
 
         channel = grpc.insecure_channel('localhost:{}'.format(port))
         self._unary_unary = channel.unary_unary(
-            '/'.join((
-                '',
-                _SERVICE,
-                _UNARY_UNARY,)),
+            '/'.join(('', _SERVICE, _UNARY_UNARY,)),
             request_serializer=_REQUEST_SERIALIZER,
             response_deserializer=_RESPONSE_DESERIALIZER,)
-        self._unary_stream = channel.unary_stream('/'.join((
-            '',
-            _SERVICE,
-            _UNARY_STREAM,)),)
-        self._stream_unary = channel.stream_unary('/'.join((
-            '',
-            _SERVICE,
-            _STREAM_UNARY,)),)
+        self._unary_stream = channel.unary_stream(
+            '/'.join(('', _SERVICE, _UNARY_STREAM,)),)
+        self._stream_unary = channel.stream_unary(
+            '/'.join(('', _SERVICE, _STREAM_UNARY,)),)
         self._stream_stream = channel.stream_stream(
-            '/'.join((
-                '',
-                _SERVICE,
-                _STREAM_STREAM,)),
+            '/'.join(('', _SERVICE, _STREAM_STREAM,)),
             request_serializer=_REQUEST_SERIALIZER,
             response_deserializer=_RESPONSE_DESERIALIZER,)
 
diff --git a/src/python/grpcio_tests/tests/unit/_rpc_test.py b/src/python/grpcio_tests/tests/unit/_rpc_test.py
index 2b1c85a82d2..0bfcfc58a1e 100644
--- a/src/python/grpcio_tests/tests/unit/_rpc_test.py
+++ b/src/python/grpcio_tests/tests/unit/_rpc_test.py
@@ -78,9 +78,7 @@ class _Handler(object):
     def handle_unary_unary(self, request, servicer_context):
         self._control.control()
         if servicer_context is not None:
-            servicer_context.set_trailing_metadata(((
-                'testkey',
-                'testvalue',),))
+            servicer_context.set_trailing_metadata((('testkey', 'testvalue',),))
             # TODO(https://github.com/grpc/grpc/issues/8483): test the values
             # returned by these methods rather than only "smoke" testing that
             # the return after having been called.
@@ -94,9 +92,7 @@ class _Handler(object):
             yield request
         self._control.control()
         if servicer_context is not None:
-            servicer_context.set_trailing_metadata(((
-                'testkey',
-                'testvalue',),))
+            servicer_context.set_trailing_metadata((('testkey', 'testvalue',),))
 
     def handle_stream_unary(self, request_iterator, servicer_context):
         if servicer_context is not None:
@@ -108,17 +104,13 @@ class _Handler(object):
             response_elements.append(request)
         self._control.control()
         if servicer_context is not None:
-            servicer_context.set_trailing_metadata(((
-                'testkey',
-                'testvalue',),))
+            servicer_context.set_trailing_metadata((('testkey', 'testvalue',),))
         return b''.join(response_elements)
 
     def handle_stream_stream(self, request_iterator, servicer_context):
         self._control.control()
         if servicer_context is not None:
-            servicer_context.set_trailing_metadata(((
-                'testkey',
-                'testvalue',),))
+            servicer_context.set_trailing_metadata((('testkey', 'testvalue',),))
         for request in request_iterator:
             self._control.control()
             yield request
diff --git a/src/python/grpcio_tests/tests/unit/beta/_beta_features_test.py b/src/python/grpcio_tests/tests/unit/beta/_beta_features_test.py
index b5fdac26c11..7d6df5bb5ba 100644
--- a/src/python/grpcio_tests/tests/unit/beta/_beta_features_test.py
+++ b/src/python/grpcio_tests/tests/unit/beta/_beta_features_test.py
@@ -177,9 +177,9 @@ class BetaFeaturesTest(unittest.TestCase):
             thread_pool_size=test_constants.POOL_SIZE)
         self._server = implementations.server(
             method_implementations, options=server_options)
-        server_credentials = implementations.ssl_server_credentials([(
-            resources.private_key(),
-            resources.certificate_chain(),),])
+        server_credentials = implementations.ssl_server_credentials([
+            (resources.private_key(), resources.certificate_chain(),),
+        ])
         port = self._server.add_secure_port('[::]:0', server_credentials)
         self._server.start()
         self._channel_credentials = implementations.ssl_channel_credentials(
@@ -303,9 +303,9 @@ class ContextManagementAndLifecycleTest(unittest.TestCase):
 
         self._server_options = implementations.server_options(
             thread_pool_size=test_constants.POOL_SIZE)
-        self._server_credentials = implementations.ssl_server_credentials([(
-            resources.private_key(),
-            resources.certificate_chain(),),])
+        self._server_credentials = implementations.ssl_server_credentials([
+            (resources.private_key(), resources.certificate_chain(),),
+        ])
         self._channel_credentials = implementations.ssl_channel_credentials(
             resources.test_root_certificates())
         self._stub_options = implementations.stub_options(
diff --git a/src/python/grpcio_tests/tests/unit/beta/_face_interface_test.py b/src/python/grpcio_tests/tests/unit/beta/_face_interface_test.py
index f4214426241..e35a12cf62a 100644
--- a/src/python/grpcio_tests/tests/unit/beta/_face_interface_test.py
+++ b/src/python/grpcio_tests/tests/unit/beta/_face_interface_test.py
@@ -47,10 +47,8 @@ _SERVER_HOST_OVERRIDE = 'foo.test.google.fr'
 
 class _SerializationBehaviors(
         collections.namedtuple('_SerializationBehaviors', (
-            'request_serializers',
-            'request_deserializers',
-            'response_serializers',
-            'response_deserializers',))):
+            'request_serializers', 'request_deserializers',
+            'response_serializers', 'response_deserializers',))):
     pass
 
 
@@ -89,9 +87,9 @@ class _Implementation(test_interfaces.Implementation):
             thread_pool_size=test_constants.POOL_SIZE)
         server = implementations.server(
             method_implementations, options=server_options)
-        server_credentials = implementations.ssl_server_credentials([(
-            resources.private_key(),
-            resources.certificate_chain(),),])
+        server_credentials = implementations.ssl_server_credentials([
+            (resources.private_key(), resources.certificate_chain(),),
+        ])
         port = server.add_secure_port('[::]:0', server_credentials)
         server.start()
         channel_credentials = implementations.ssl_channel_credentials(
diff --git a/src/python/grpcio_tests/tests/unit/beta/test_utilities.py b/src/python/grpcio_tests/tests/unit/beta/test_utilities.py
index f5424206837..78b4622a879 100644
--- a/src/python/grpcio_tests/tests/unit/beta/test_utilities.py
+++ b/src/python/grpcio_tests/tests/unit/beta/test_utilities.py
@@ -48,7 +48,6 @@ def not_really_secure_channel(host, port, channel_credentials,
       conducted.
   """
     target = '%s:%d' % (host, port)
-    channel = grpc.secure_channel(target, channel_credentials, ((
-        'grpc.ssl_target_name_override',
-        server_host_override,),))
+    channel = grpc.secure_channel(target, channel_credentials, (
+        ('grpc.ssl_target_name_override', server_host_override,),))
     return implementations.Channel(channel)
diff --git a/src/python/grpcio_tests/tests/unit/framework/interfaces/face/_digest.py b/src/python/grpcio_tests/tests/unit/framework/interfaces/face/_digest.py
index 0411da0a667..cc4855cc334 100644
--- a/src/python/grpcio_tests/tests/unit/framework/interfaces/face/_digest.py
+++ b/src/python/grpcio_tests/tests/unit/framework/interfaces/face/_digest.py
@@ -49,12 +49,9 @@ _IDENTITY = lambda x: x
 
 class TestServiceDigest(
         collections.namedtuple('TestServiceDigest', (
-            'methods',
-            'inline_method_implementations',
-            'event_method_implementations',
-            'multi_method_implementation',
-            'unary_unary_messages_sequences',
-            'unary_stream_messages_sequences',
+            'methods', 'inline_method_implementations',
+            'event_method_implementations', 'multi_method_implementation',
+            'unary_unary_messages_sequences', 'unary_stream_messages_sequences',
             'stream_unary_messages_sequences',
             'stream_stream_messages_sequences',))):
     """A transformation of a service.TestService.
diff --git a/src/python/grpcio_tests/tests/unit/framework/interfaces/face/_invocation.py b/src/python/grpcio_tests/tests/unit/framework/interfaces/face/_invocation.py
index 4e144a36352..6afbd2b5be5 100644
--- a/src/python/grpcio_tests/tests/unit/framework/interfaces/face/_invocation.py
+++ b/src/python/grpcio_tests/tests/unit/framework/interfaces/face/_invocation.py
@@ -206,7 +206,5 @@ def invoker_constructors():
   Returns:
     A sequence of InvokerConstructors.
   """
-    return (
-        _GenericInvokerConstructor(),
-        _MultiCallableInvokerConstructor(),
-        _DynamicInvokerConstructor(),)
+    return (_GenericInvokerConstructor(), _MultiCallableInvokerConstructor(),
+            _DynamicInvokerConstructor(),)
diff --git a/src/python/grpcio_tests/tests/unit/test_common.py b/src/python/grpcio_tests/tests/unit/test_common.py
index 00fbe0567a2..4b3ba911b99 100644
--- a/src/python/grpcio_tests/tests/unit/test_common.py
+++ b/src/python/grpcio_tests/tests/unit/test_common.py
@@ -33,18 +33,9 @@ import collections
 import grpc
 import six
 
-INVOCATION_INITIAL_METADATA = (
-    ('0', 'abc'),
-    ('1', 'def'),
-    ('2', 'ghi'),)
-SERVICE_INITIAL_METADATA = (
-    ('3', 'jkl'),
-    ('4', 'mno'),
-    ('5', 'pqr'),)
-SERVICE_TERMINAL_METADATA = (
-    ('6', 'stu'),
-    ('7', 'vwx'),
-    ('8', 'yza'),)
+INVOCATION_INITIAL_METADATA = (('0', 'abc'), ('1', 'def'), ('2', 'ghi'),)
+SERVICE_INITIAL_METADATA = (('3', 'jkl'), ('4', 'mno'), ('5', 'pqr'),)
+SERVICE_TERMINAL_METADATA = (('6', 'stu'), ('7', 'vwx'), ('8', 'yza'),)
 DETAILS = 'test details'
 
 
@@ -103,7 +94,6 @@ def test_secure_channel(target, channel_credentials, server_host_override):
     An implementations.Channel to the remote host through which RPCs may be
       conducted.
   """
-    channel = grpc.secure_channel(target, channel_credentials, ((
-        'grpc.ssl_target_name_override',
-        server_host_override,),))
+    channel = grpc.secure_channel(target, channel_credentials, (
+        ('grpc.ssl_target_name_override', server_host_override,),))
     return channel
diff --git a/tools/distrib/yapf_code.sh b/tools/distrib/yapf_code.sh
index e3ebf1c4908..030412ebeb9 100755
--- a/tools/distrib/yapf_code.sh
+++ b/tools/distrib/yapf_code.sh
@@ -40,7 +40,8 @@ VIRTUALENV=python_format_venv
 
 virtualenv $VIRTUALENV
 PYTHON=`realpath $VIRTUALENV/bin/python`
-$PYTHON -m pip install --upgrade futures yapf
+$PYTHON -m pip install futures
+$PYTHON -m pip install yapf==0.16.0
 
 exclusion_args=""
 for exclusion in $EXCLUSIONS; do

From 6f62c0adca4921c8d0e75ec5b9886280ead5b7f1 Mon Sep 17 00:00:00 2001
From: murgatroid99 <mlumish@google.com>
Date: Mon, 6 Feb 2017 17:31:15 -0800
Subject: [PATCH 43/52] Disable libuv core changes in Node library

---
 binding.gyp                    | 4 +++-
 templates/binding.gyp.template | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/binding.gyp b/binding.gyp
index 6c82028dbd3..a46278a328b 100644
--- a/binding.gyp
+++ b/binding.gyp
@@ -51,7 +51,9 @@
     'conditions': [
       ['runtime=="node"', {
         'defines': [
-          'GRPC_UV'
+          # Disabling this while bugs are ironed out. Uncomment this to
+          # re-enable libuv integration in C core.
+          # 'GRPC_UV'
         ]
       }],
       ['OS!="win" and runtime=="electron"', {
diff --git a/templates/binding.gyp.template b/templates/binding.gyp.template
index 851effc4f3d..4b2f6ac12be 100644
--- a/templates/binding.gyp.template
+++ b/templates/binding.gyp.template
@@ -53,7 +53,9 @@
       'conditions': [
         ['runtime=="node"', {
           'defines': [
-            'GRPC_UV'
+            # Disabling this while bugs are ironed out. Uncomment this to
+            # re-enable libuv integration in C core.
+            # 'GRPC_UV'
           ]
         }],
         ['OS!="win" and runtime=="electron"', {

From 2b3e12ceeecd2ff1c0b7364764e583212cd02901 Mon Sep 17 00:00:00 2001
From: murgatroid99 <mlumish@google.com>
Date: Mon, 6 Feb 2017 17:42:07 -0800
Subject: [PATCH 44/52] Update version to 1.1.2

---
 CMakeLists.txt                                    | 2 +-
 Makefile                                          | 4 ++--
 build.yaml                                        | 2 +-
 package.json                                      | 2 +-
 package.xml                                       | 4 ++--
 src/cpp/common/version_cc.cc                      | 2 +-
 src/csharp/Grpc.Auth/project.json                 | 4 ++--
 src/csharp/Grpc.Core/VersionInfo.cs               | 4 ++--
 src/csharp/Grpc.Core/project.json                 | 2 +-
 src/csharp/Grpc.HealthCheck/project.json          | 4 ++--
 src/csharp/Grpc.Reflection/project.json           | 4 ++--
 src/csharp/build_packages_dotnetcli.bat           | 2 +-
 src/csharp/build_packages_dotnetcli.sh            | 4 ++--
 src/node/health_check/package.json                | 4 ++--
 src/node/tools/package.json                       | 2 +-
 src/php/composer.json                             | 2 +-
 src/python/grpcio/grpc_version.py                 | 2 +-
 src/python/grpcio_health_checking/grpc_version.py | 2 +-
 src/python/grpcio_reflection/grpc_version.py      | 2 +-
 src/python/grpcio_tests/grpc_version.py           | 2 +-
 src/ruby/lib/grpc/version.rb                      | 2 +-
 src/ruby/tools/version.rb                         | 2 +-
 tools/distrib/python/grpcio_tools/grpc_version.py | 2 +-
 tools/doxygen/Doxyfile.c++                        | 2 +-
 tools/doxygen/Doxyfile.c++.internal               | 2 +-
 25 files changed, 33 insertions(+), 33 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7316f85f88f..0f37b64c8e3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -42,7 +42,7 @@
 cmake_minimum_required(VERSION 2.8)
 
 set(PACKAGE_NAME      "grpc")
-set(PACKAGE_VERSION   "1.1.1")
+set(PACKAGE_VERSION   "1.1.2")
 set(PACKAGE_STRING    "${PACKAGE_NAME} ${PACKAGE_VERSION}")
 set(PACKAGE_TARNAME   "${PACKAGE_NAME}-${PACKAGE_VERSION}")
 set(PACKAGE_BUGREPORT "https://github.com/grpc/grpc/issues/")
diff --git a/Makefile b/Makefile
index f7766ce6abf..d9d7f4090bd 100644
--- a/Makefile
+++ b/Makefile
@@ -442,8 +442,8 @@ Q = @
 endif
 
 CORE_VERSION = 2.0.0
-CPP_VERSION = 1.1.1
-CSHARP_VERSION = 1.1.1
+CPP_VERSION = 1.1.2
+CSHARP_VERSION = 1.1.2
 
 CPPFLAGS_NO_ARCH += $(addprefix -I, $(INCLUDES)) $(addprefix -D, $(DEFINES))
 CPPFLAGS += $(CPPFLAGS_NO_ARCH) $(ARCH_FLAGS)
diff --git a/build.yaml b/build.yaml
index 3c35b8fb7ee..9c55cb37849 100644
--- a/build.yaml
+++ b/build.yaml
@@ -14,7 +14,7 @@ settings:
   '#10': See the expand_version.py for all the quirks here
   core_version: 2.0.0
   g_stands_for: good
-  version: 1.1.1
+  version: 1.1.2
 filegroups:
 - name: census
   public_headers:
diff --git a/package.json b/package.json
index ef33b170f20..66e2ab0d01c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "grpc",
-  "version": "1.1.1",
+  "version": "1.1.2",
   "author": "Google Inc.",
   "description": "gRPC Library for Node",
   "homepage": "http://www.grpc.io/",
diff --git a/package.xml b/package.xml
index 89bcaec37a3..c96a5efab40 100644
--- a/package.xml
+++ b/package.xml
@@ -13,8 +13,8 @@
  <date>2017-01-13</date>
  <time>16:06:07</time>
  <version>
-  <release>1.1.1</release>
-  <api>1.1.1</api>
+  <release>1.1.2</release>
+  <api>1.1.2</api>
  </version>
  <stability>
   <release>beta</release>
diff --git a/src/cpp/common/version_cc.cc b/src/cpp/common/version_cc.cc
index 446e94379d0..fde49766484 100644
--- a/src/cpp/common/version_cc.cc
+++ b/src/cpp/common/version_cc.cc
@@ -37,5 +37,5 @@
 #include <grpc++/grpc++.h>
 
 namespace grpc {
-grpc::string Version() { return "1.1.1"; }
+grpc::string Version() { return "1.1.2"; }
 }
diff --git a/src/csharp/Grpc.Auth/project.json b/src/csharp/Grpc.Auth/project.json
index c830ec49fd7..cb865edf06c 100644
--- a/src/csharp/Grpc.Auth/project.json
+++ b/src/csharp/Grpc.Auth/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.1",
+  "version": "1.1.2",
   "title": "gRPC C# Auth",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2015, Google Inc.",
@@ -21,7 +21,7 @@
     }
   },
   "dependencies": {
-    "Grpc.Core": "1.1.1",
+    "Grpc.Core": "1.1.2",
     "Google.Apis.Auth": "1.16.0"
   },
   "frameworks": {
diff --git a/src/csharp/Grpc.Core/VersionInfo.cs b/src/csharp/Grpc.Core/VersionInfo.cs
index 5fb976fc88d..b6612dc8966 100644
--- a/src/csharp/Grpc.Core/VersionInfo.cs
+++ b/src/csharp/Grpc.Core/VersionInfo.cs
@@ -48,11 +48,11 @@ namespace Grpc.Core
         /// <summary>
         /// Current <c>AssemblyFileVersion</c> of gRPC C# assemblies
         /// </summary>
-        public const string CurrentAssemblyFileVersion = "1.1.1.0";
+        public const string CurrentAssemblyFileVersion = "1.1.2.0";
 
         /// <summary>
         /// Current version of gRPC C#
         /// </summary>
-        public const string CurrentVersion = "1.1.1";
+        public const string CurrentVersion = "1.1.2";
     }
 }
diff --git a/src/csharp/Grpc.Core/project.json b/src/csharp/Grpc.Core/project.json
index 228b227a3be..9bcda4529d1 100644
--- a/src/csharp/Grpc.Core/project.json
+++ b/src/csharp/Grpc.Core/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.1",
+  "version": "1.1.2",
   "title": "gRPC C# Core",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2015, Google Inc.",
diff --git a/src/csharp/Grpc.HealthCheck/project.json b/src/csharp/Grpc.HealthCheck/project.json
index 859ff5ea03b..dd5f109641a 100644
--- a/src/csharp/Grpc.HealthCheck/project.json
+++ b/src/csharp/Grpc.HealthCheck/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.1",
+  "version": "1.1.2",
   "title": "gRPC C# Healthchecking",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2015, Google Inc.",
@@ -21,7 +21,7 @@
     }
   },
   "dependencies": {
-    "Grpc.Core": "1.1.1",
+    "Grpc.Core": "1.1.2",
     "Google.Protobuf": "3.0.0"
   },
   "frameworks": {
diff --git a/src/csharp/Grpc.Reflection/project.json b/src/csharp/Grpc.Reflection/project.json
index 8b83d48adba..ee951cf3c2c 100644
--- a/src/csharp/Grpc.Reflection/project.json
+++ b/src/csharp/Grpc.Reflection/project.json
@@ -1,5 +1,5 @@
 {
-  "version": "1.1.1",
+  "version": "1.1.2",
   "title": "gRPC C# Reflection",
   "authors": [ "Google Inc." ],
   "copyright": "Copyright 2016, Google Inc.",
@@ -21,7 +21,7 @@
     }
   },
   "dependencies": {
-    "Grpc.Core": "1.1.1",
+    "Grpc.Core": "1.1.2",
     "Google.Protobuf": "3.0.0"
   },
   "frameworks": {
diff --git a/src/csharp/build_packages_dotnetcli.bat b/src/csharp/build_packages_dotnetcli.bat
index d3da8cf2116..fac14193773 100755
--- a/src/csharp/build_packages_dotnetcli.bat
+++ b/src/csharp/build_packages_dotnetcli.bat
@@ -28,7 +28,7 @@
 @rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 @rem Current package versions
-set VERSION=1.1.1
+set VERSION=1.1.2
 set PROTOBUF_VERSION=3.0.0
 
 @rem Adjust the location of nuget.exe
diff --git a/src/csharp/build_packages_dotnetcli.sh b/src/csharp/build_packages_dotnetcli.sh
index 5fa0b54ad00..03f53af51c0 100755
--- a/src/csharp/build_packages_dotnetcli.sh
+++ b/src/csharp/build_packages_dotnetcli.sh
@@ -65,7 +65,7 @@ dotnet pack --configuration Release Grpc.Auth/project.json --output ../../artifa
 dotnet pack --configuration Release Grpc.HealthCheck/project.json --output ../../artifacts
 dotnet pack --configuration Release Grpc.Reflection/project.json --output ../../artifacts
 
-nuget pack Grpc.nuspec -Version "1.1.1" -OutputDirectory ../../artifacts
-nuget pack Grpc.Tools.nuspec -Version "1.1.1" -OutputDirectory ../../artifacts
+nuget pack Grpc.nuspec -Version "1.1.2" -OutputDirectory ../../artifacts
+nuget pack Grpc.Tools.nuspec -Version "1.1.2" -OutputDirectory ../../artifacts
 
 (cd ../../artifacts && zip csharp_nugets_dotnetcli.zip *.nupkg)
diff --git a/src/node/health_check/package.json b/src/node/health_check/package.json
index 1a59c101dd6..812f4956975 100644
--- a/src/node/health_check/package.json
+++ b/src/node/health_check/package.json
@@ -1,6 +1,6 @@
 {
   "name": "grpc-health-check",
-  "version": "1.1.1",
+  "version": "1.1.2",
   "author": "Google Inc.",
   "description": "Health check service for use with gRPC",
   "repository": {
@@ -15,7 +15,7 @@
     }
   ],
   "dependencies": {
-    "grpc": "^1.1.1",
+    "grpc": "^1.1.2",
     "lodash": "^3.9.3",
     "google-protobuf": "^3.0.0"
   },
diff --git a/src/node/tools/package.json b/src/node/tools/package.json
index c2c39aeef04..650b06e6afd 100644
--- a/src/node/tools/package.json
+++ b/src/node/tools/package.json
@@ -1,6 +1,6 @@
 {
   "name": "grpc-tools",
-  "version": "1.1.1",
+  "version": "1.1.2",
   "author": "Google Inc.",
   "description": "Tools for developing with gRPC on Node.js",
   "homepage": "http://www.grpc.io/",
diff --git a/src/php/composer.json b/src/php/composer.json
index 02731396848..faf2049e753 100644
--- a/src/php/composer.json
+++ b/src/php/composer.json
@@ -5,7 +5,7 @@
   "keywords": ["rpc"],
   "homepage": "http://grpc.io",
   "license": "BSD-3-Clause",
-  "version": "1.1.1",
+  "version": "1.1.2",
   "require": {
     "php": ">=5.5.0",
     "ext-grpc": "*",
diff --git a/src/python/grpcio/grpc_version.py b/src/python/grpcio/grpc_version.py
index e3d8d927f7f..7e57e072359 100644
--- a/src/python/grpcio/grpc_version.py
+++ b/src/python/grpcio/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc_version.py.template`!!!
 
-VERSION='1.1.1'
+VERSION='1.1.2'
diff --git a/src/python/grpcio_health_checking/grpc_version.py b/src/python/grpcio_health_checking/grpc_version.py
index 0a9fd1c251d..5d63397972c 100644
--- a/src/python/grpcio_health_checking/grpc_version.py
+++ b/src/python/grpcio_health_checking/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_health_checking/grpc_version.py.template`!!!
 
-VERSION='1.1.1'
+VERSION='1.1.2'
diff --git a/src/python/grpcio_reflection/grpc_version.py b/src/python/grpcio_reflection/grpc_version.py
index 4d01b4b2b03..495f354191a 100644
--- a/src/python/grpcio_reflection/grpc_version.py
+++ b/src/python/grpcio_reflection/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_reflection/grpc_version.py.template`!!!
 
-VERSION='1.1.1'
+VERSION='1.1.2'
diff --git a/src/python/grpcio_tests/grpc_version.py b/src/python/grpcio_tests/grpc_version.py
index 22c7f9accb7..b441b109292 100644
--- a/src/python/grpcio_tests/grpc_version.py
+++ b/src/python/grpcio_tests/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_tests/grpc_version.py.template`!!!
 
-VERSION='1.1.1'
+VERSION='1.1.2'
diff --git a/src/ruby/lib/grpc/version.rb b/src/ruby/lib/grpc/version.rb
index b1c189033d2..79c4a96bd45 100644
--- a/src/ruby/lib/grpc/version.rb
+++ b/src/ruby/lib/grpc/version.rb
@@ -29,5 +29,5 @@
 
 # GRPC contains the General RPC module.
 module GRPC
-  VERSION = '1.1.1'
+  VERSION = '1.1.2'
 end
diff --git a/src/ruby/tools/version.rb b/src/ruby/tools/version.rb
index 0a23edab170..85ae9fdbc00 100644
--- a/src/ruby/tools/version.rb
+++ b/src/ruby/tools/version.rb
@@ -29,6 +29,6 @@
 
 module GRPC
   module Tools
-    VERSION = '1.1.1'
+    VERSION = '1.1.2'
   end
 end
diff --git a/tools/distrib/python/grpcio_tools/grpc_version.py b/tools/distrib/python/grpcio_tools/grpc_version.py
index ad3d3cb7dec..d0ee8a07d0a 100644
--- a/tools/distrib/python/grpcio_tools/grpc_version.py
+++ b/tools/distrib/python/grpcio_tools/grpc_version.py
@@ -29,4 +29,4 @@
 
 # AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!!
 
-VERSION='1.1.1'
+VERSION='1.1.2'
diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++
index 72c0e589cca..bb7da0ae95f 100644
--- a/tools/doxygen/Doxyfile.c++
+++ b/tools/doxygen/Doxyfile.c++
@@ -40,7 +40,7 @@ PROJECT_NAME           = "GRPC C++"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 1.1.1
+PROJECT_NUMBER         = 1.1.2
 
 # 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
diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal
index 3fa409184ca..caba0b23c4a 100644
--- a/tools/doxygen/Doxyfile.c++.internal
+++ b/tools/doxygen/Doxyfile.c++.internal
@@ -40,7 +40,7 @@ PROJECT_NAME           = "GRPC C++"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 1.1.1
+PROJECT_NUMBER         = 1.1.2
 
 # 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

From fe6b328a1b93df552a4f2b42746c25092cc7bcc2 Mon Sep 17 00:00:00 2001
From: Michael Lumish <mlumish@google.com>
Date: Tue, 7 Feb 2017 11:20:16 -0800
Subject: [PATCH 45/52] Node: refactor non-uv completion queue wrapping code

---
 src/node/ext/completion_queue_threadpool.cc | 44 +++++++--------------
 1 file changed, 15 insertions(+), 29 deletions(-)

diff --git a/src/node/ext/completion_queue_threadpool.cc b/src/node/ext/completion_queue_threadpool.cc
index 6302e7a103b..4881542f2d0 100644
--- a/src/node/ext/completion_queue_threadpool.cc
+++ b/src/node/ext/completion_queue_threadpool.cc
@@ -78,6 +78,8 @@ class CompletionQueueAsyncWorker : public Nan::AsyncWorker {
   void HandleErrorCallback();
 
  private:
+  static void TryAddWorker();
+
   grpc_event result;
 
   static grpc_completion_queue *queue;
@@ -118,20 +120,21 @@ void CompletionQueueAsyncWorker::Execute() {
 
 grpc_completion_queue *CompletionQueueAsyncWorker::GetQueue() { return queue; }
 
-void CompletionQueueAsyncWorker::Next() {
-#ifndef GRPC_UV
-  Nan::HandleScope scope;
-  if (current_threads < max_queue_threads) {
+void CompletionQueueAsyncWorker::TryAddWorker() {
+  if (current_threads < max_queue_threads && waiting_next_calls > 0) {
     current_threads += 1;
+    waiting_next_calls -= 1;
     CompletionQueueAsyncWorker *worker = new CompletionQueueAsyncWorker();
     Nan::AsyncQueueWorker(worker);
-  } else {
-    waiting_next_calls += 1;
   }
   GPR_ASSERT(current_threads <= max_queue_threads);
   GPR_ASSERT((current_threads == max_queue_threads) ||
              (waiting_next_calls == 0));
-#endif
+}
+
+void CompletionQueueAsyncWorker::Next() {
+  waiting_next_calls += 1;
+  TryAddWorker();
 }
 
 void CompletionQueueAsyncWorker::Init(Local<Object> exports) {
@@ -143,17 +146,8 @@ void CompletionQueueAsyncWorker::Init(Local<Object> exports) {
 
 void CompletionQueueAsyncWorker::HandleOKCallback() {
   Nan::HandleScope scope;
-  if (waiting_next_calls > 0) {
-    waiting_next_calls -= 1;
-    // Old worker removed, new worker added. current_threads += 0
-    CompletionQueueAsyncWorker *worker = new CompletionQueueAsyncWorker();
-    Nan::AsyncQueueWorker(worker);
-  } else {
-    current_threads -= 1;
-  }
-  GPR_ASSERT(current_threads <= max_queue_threads);
-  GPR_ASSERT((current_threads == max_queue_threads) ||
-             (waiting_next_calls == 0));
+  current_threads -= 1;
+  TryAddWorker();
   Nan::Callback *callback = GetTagCallback(result.tag);
   Local<Value> argv[] = {Nan::Null(), GetTagNodeValue(result.tag)};
   callback->Call(2, argv);
@@ -162,18 +156,9 @@ void CompletionQueueAsyncWorker::HandleOKCallback() {
 }
 
 void CompletionQueueAsyncWorker::HandleErrorCallback() {
-  if (waiting_next_calls > 0) {
-    waiting_next_calls -= 1;
-    // Old worker removed, new worker added. current_threads += 0
-    CompletionQueueAsyncWorker *worker = new CompletionQueueAsyncWorker();
-    Nan::AsyncQueueWorker(worker);
-  } else {
-    current_threads -= 1;
-  }
-  GPR_ASSERT(current_threads <= max_queue_threads);
-  GPR_ASSERT((current_threads == max_queue_threads) ||
-             (waiting_next_calls == 0));
   Nan::HandleScope scope;
+  current_threads -= 1;
+  TryAddWorker();
   Nan::Callback *callback = GetTagCallback(result.tag);
   Local<Value> argv[] = {Nan::Error(ErrorMessage())};
 
@@ -189,6 +174,7 @@ grpc_completion_queue *GetCompletionQueue() {
 }
 
 void CompletionQueueNext() {
+  gpr_log(GPR_DEBUG, "Called CompletionQueueNext");
   CompletionQueueAsyncWorker::Next();
 }
 

From 9e61e080659b42d50b9f355cee5a65fc4396d580 Mon Sep 17 00:00:00 2001
From: Nathaniel Manista <nathaniel@google.com>
Date: Tue, 7 Feb 2017 19:31:03 +0000
Subject: [PATCH 46/52] =?UTF-8?q?User-Agent=20"Python-gRPC-"=20=E2=86=92?=
 =?UTF-8?q?=20"grpc-python/"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This brings gRPC Python into conformance with the recommendation in
https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md.
---
 src/python/grpcio/grpc/_channel.py                   | 2 +-
 src/python/grpcio_tests/tests/unit/_metadata_test.py | 6 ++----
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/python/grpcio/grpc/_channel.py b/src/python/grpcio/grpc/_channel.py
index 691e96a3228..a1ac80651e5 100644
--- a/src/python/grpcio/grpc/_channel.py
+++ b/src/python/grpcio/grpc/_channel.py
@@ -39,7 +39,7 @@ from grpc import _grpcio_metadata
 from grpc._cython import cygrpc
 from grpc.framework.foundation import callable_util
 
-_USER_AGENT = 'Python-gRPC-{}'.format(_grpcio_metadata.__version__)
+_USER_AGENT = 'grpc-python/{}'.format(_grpcio_metadata.__version__)
 
 _EMPTY_FLAGS = 0
 _INFINITE_FUTURE = cygrpc.Timespec(float('+inf'))
diff --git a/src/python/grpcio_tests/tests/unit/_metadata_test.py b/src/python/grpcio_tests/tests/unit/_metadata_test.py
index 53fe7ba8aa5..035d87e3cf4 100644
--- a/src/python/grpcio_tests/tests/unit/_metadata_test.py
+++ b/src/python/grpcio_tests/tests/unit/_metadata_test.py
@@ -32,7 +32,7 @@ import unittest
 import weakref
 
 import grpc
-from grpc import _grpcio_metadata
+from grpc import _channel
 from grpc.framework.foundation import logging_pool
 
 from tests.unit import test_common
@@ -49,8 +49,6 @@ _UNARY_STREAM = '/test/UnaryStream'
 _STREAM_UNARY = '/test/StreamUnary'
 _STREAM_STREAM = '/test/StreamStream'
 
-_USER_AGENT = 'Python-gRPC-{}'.format(_grpcio_metadata.__version__)
-
 _CLIENT_METADATA = (('client-md-key', 'client-md-key'),
                     ('client-md-key-bin', b'\x00\x01'))
 
@@ -76,7 +74,7 @@ def validate_client_metadata(test, servicer_context):
             _CLIENT_METADATA, servicer_context.invocation_metadata()))
     test.assertTrue(
         user_agent(servicer_context.invocation_metadata())
-        .startswith('primary-agent ' + _USER_AGENT))
+        .startswith('primary-agent ' + _channel._USER_AGENT))
     test.assertTrue(
         user_agent(servicer_context.invocation_metadata())
         .endswith('secondary-agent'))

From ae998a37a27779fcc7d0a8334d6e618905816ade Mon Sep 17 00:00:00 2001
From: murgatroid99 <mlumish@google.com>
Date: Tue, 7 Feb 2017 13:59:35 -0800
Subject: [PATCH 47/52] Regenerate projects

---
 gRPC-Core.podspec                                 | 2 +-
 gRPC-ProtoRPC.podspec                             | 2 +-
 gRPC-RxLibrary.podspec                            | 2 +-
 gRPC.podspec                                      | 2 +-
 src/objective-c/!ProtoCompiler-gRPCPlugin.podspec | 2 +-
 src/objective-c/GRPCClient/private/version.h      | 2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
index c19deeb34fc..aa3472d89b5 100644
--- a/gRPC-Core.podspec
+++ b/gRPC-Core.podspec
@@ -37,7 +37,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC-Core'
-  version = '1.1.1'
+  version = '1.1.2'
   s.version  = version
   s.summary  = 'Core cross-platform gRPC library, written in C'
   s.homepage = 'http://www.grpc.io'
diff --git a/gRPC-ProtoRPC.podspec b/gRPC-ProtoRPC.podspec
index ac611956ae8..2fb5a4940aa 100644
--- a/gRPC-ProtoRPC.podspec
+++ b/gRPC-ProtoRPC.podspec
@@ -36,7 +36,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC-ProtoRPC'
-  version = '1.1.1'
+  version = '1.1.2'
   s.version  = version
   s.summary  = 'RPC library for Protocol Buffers, based on gRPC'
   s.homepage = 'http://www.grpc.io'
diff --git a/gRPC-RxLibrary.podspec b/gRPC-RxLibrary.podspec
index 0249e30988a..104a75c6385 100644
--- a/gRPC-RxLibrary.podspec
+++ b/gRPC-RxLibrary.podspec
@@ -36,7 +36,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC-RxLibrary'
-  version = '1.1.1'
+  version = '1.1.2'
   s.version  = version
   s.summary  = 'Reactive Extensions library for iOS/OSX.'
   s.homepage = 'http://www.grpc.io'
diff --git a/gRPC.podspec b/gRPC.podspec
index 315e567664e..23d14dfe215 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -35,7 +35,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'gRPC'
-  version = '1.1.1'
+  version = '1.1.2'
   s.version  = version
   s.summary  = 'gRPC client library for iOS/OSX'
   s.homepage = 'http://www.grpc.io'
diff --git a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
index 1cc73988807..8d6c408dce2 100644
--- a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
+++ b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
@@ -42,7 +42,7 @@ Pod::Spec.new do |s|
   # exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed
   # before them.
   s.name     = '!ProtoCompiler-gRPCPlugin'
-  v = '1.1.1'
+  v = '1.1.2'
   s.version  = v
   s.summary  = 'The gRPC ProtoC plugin generates Objective-C files from .proto services.'
   s.description = <<-DESC
diff --git a/src/objective-c/GRPCClient/private/version.h b/src/objective-c/GRPCClient/private/version.h
index 28232aea0b8..f7e96044fc6 100644
--- a/src/objective-c/GRPCClient/private/version.h
+++ b/src/objective-c/GRPCClient/private/version.h
@@ -38,4 +38,4 @@
 // `tools/buildgen/generate_projects.sh`.
 
 
-#define GRPC_OBJC_VERSION_STRING @"1.1.1"
+#define GRPC_OBJC_VERSION_STRING @"1.1.2"

From ccaec44d6516e9931536f3f3fb0e24d7ec977b43 Mon Sep 17 00:00:00 2001
From: Alexander Polcyn <apolcyn@google.com>
Date: Wed, 8 Feb 2017 11:14:21 -0800
Subject: [PATCH 48/52] add ruby example that doesn't use protobuf

---
 examples/ruby/grpc-demo.gemspec               |  2 +-
 examples/ruby/without_protobuf/README.md      |  6 ++
 examples/ruby/without_protobuf/echo_client.rb | 49 +++++++++++++++
 examples/ruby/without_protobuf/echo_server.rb | 59 +++++++++++++++++++
 .../echo_services_noprotobuf.rb               | 49 +++++++++++++++
 5 files changed, 164 insertions(+), 1 deletion(-)
 create mode 100644 examples/ruby/without_protobuf/README.md
 create mode 100755 examples/ruby/without_protobuf/echo_client.rb
 create mode 100755 examples/ruby/without_protobuf/echo_server.rb
 create mode 100644 examples/ruby/without_protobuf/echo_services_noprotobuf.rb

diff --git a/examples/ruby/grpc-demo.gemspec b/examples/ruby/grpc-demo.gemspec
index e1b77a56ac9..4423fd34d42 100644
--- a/examples/ruby/grpc-demo.gemspec
+++ b/examples/ruby/grpc-demo.gemspec
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
   s.require_paths = ['lib']
   s.platform      = Gem::Platform::RUBY
 
-  s.add_dependency 'grpc', '~> 1.0.0'
+  s.add_dependency 'grpc', '~> 1.0'
 
   s.add_development_dependency 'bundler', '~> 1.7'
 end
diff --git a/examples/ruby/without_protobuf/README.md b/examples/ruby/without_protobuf/README.md
new file mode 100644
index 00000000000..f9611648ca2
--- /dev/null
+++ b/examples/ruby/without_protobuf/README.md
@@ -0,0 +1,6 @@
+gRPC (Ruby) without protobuf
+========================
+
+This directory contains a simple example of using gRPC without protobuf.
+
+This is mainly intended to show basic usage of the GRPC::GenericService module
diff --git a/examples/ruby/without_protobuf/echo_client.rb b/examples/ruby/without_protobuf/echo_client.rb
new file mode 100755
index 00000000000..4a7b92a4a7f
--- /dev/null
+++ b/examples/ruby/without_protobuf/echo_client.rb
@@ -0,0 +1,49 @@
+#!/usr/bin/env ruby
+
+# 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.
+
+# Sample app that connects to a 'EchoWithoutProtobuf' service.
+#
+# Usage: $ path/to/echo_client.rb
+
+this_dir = File.expand_path(File.dirname(__FILE__))
+$LOAD_PATH.unshift(this_dir) unless $LOAD_PATH.include?(this_dir)
+
+require 'grpc'
+require 'echo_services_noprotobuf'
+
+def main
+  stub = EchoWithoutProtobuf::Stub.new('localhost:50051', :this_channel_is_insecure)
+  user = ARGV.size > 0 ?  ARGV[0] : 'world'
+  message = stub.echo("hello #{user}")
+  p "Reponse: #{message}"
+end
+
+main
diff --git a/examples/ruby/without_protobuf/echo_server.rb b/examples/ruby/without_protobuf/echo_server.rb
new file mode 100755
index 00000000000..e60f684f655
--- /dev/null
+++ b/examples/ruby/without_protobuf/echo_server.rb
@@ -0,0 +1,59 @@
+#!/usr/bin/env ruby
+
+# 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.
+
+# Sample gRPC server that implements the EchoWithoutProtobuf service.
+#
+# Usage: $ path/to/echo_server.rb
+
+this_dir = File.expand_path(File.dirname(__FILE__))
+$LOAD_PATH.unshift(this_dir) unless $LOAD_PATH.include?(this_dir)
+
+require 'grpc'
+require 'echo_services_noprotobuf'
+
+# EchoServer is simple server that implements the EchoWithoutProtobuf server.
+class EchoServer < EchoWithoutProtobuf::Service
+  # echo implements the EchoWithoutProtobuf 'Echo' rpc method.
+  def echo(echo_req, _unused_call)
+    echo_req
+  end
+end
+
+# main starts an RpcServer that receives requests to EchoWithoutProtobuf at the sample
+# server port.
+def main
+  s = GRPC::RpcServer.new
+  s.add_http2_port('0.0.0.0:50051', :this_port_is_insecure)
+  s.handle(EchoServer)
+  s.run_till_terminated
+end
+
+main
diff --git a/examples/ruby/without_protobuf/echo_services_noprotobuf.rb b/examples/ruby/without_protobuf/echo_services_noprotobuf.rb
new file mode 100644
index 00000000000..276ced67f32
--- /dev/null
+++ b/examples/ruby/without_protobuf/echo_services_noprotobuf.rb
@@ -0,0 +1,49 @@
+# Original file comments:
+# 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.
+#
+
+require 'grpc'
+
+module EchoWithoutProtobuf
+  # The 'echo without protobuf' service definition.
+  class Service
+
+    include GRPC::GenericService
+
+    self.marshal_class_method = :try_convert
+    self.unmarshal_class_method = :try_convert
+    self.service_name = 'EchoWithoutProtobuf'
+
+    # Request and response are plain strings
+    rpc :Echo, String, String
+  end
+
+  Stub = Service.rpc_stub_class
+end

From 1b6ebb84a93d3a22c90ce239c380ff98f7d70cca Mon Sep 17 00:00:00 2001
From: Jan Tattermusch <jtattermusch@users.noreply.github.com>
Date: Wed, 8 Feb 2017 13:51:40 -0800
Subject: [PATCH 49/52] Update README.md

---
 src/csharp/README.md | 28 ++++++++--------------------
 1 file changed, 8 insertions(+), 20 deletions(-)

diff --git a/src/csharp/README.md b/src/csharp/README.md
index 0405ff88a01..5a16b650bc4 100644
--- a/src/csharp/README.md
+++ b/src/csharp/README.md
@@ -7,19 +7,20 @@ A C# implementation of gRPC.
 SUPPORTED PLATFORMS
 ------------------
 
+- [.NET Core](https://dotnet.github.io/) on Linux, Windows and Mac OS X 
 - .NET Framework 4.5+ (Windows)
-- [.NET Core](https://dotnet.github.io/) on Linux, Windows and Mac OS X (starting from version 1.0.1)
 - Mono 4+ on Linux, Windows and Mac OS X
 
 
 PREREQUISITES
 --------------
 
+When using gRPC C# under .NET Core you only need to [install .NET Core](https://www.microsoft.com/net/core).
+
 - Windows: .NET Framework 4.5+, Visual Studio 2013 or 2015
 - Linux: Mono 4+, MonoDevelop 5.9+ (with NuGet add-in installed)
 - Mac OS X: Xamarin Studio 5.9+
 
-
 HOW TO USE
 --------------
 
@@ -27,7 +28,7 @@ HOW TO USE
 
 - Open Visual Studio / MonoDevelop / Xamarin Studio and start a new project/solution.
 
-- Add the [Grpc](https://www.nuget.org/packages/Grpc/) NuGet package as a dependency (Project options -> Manage NuGet Packages).
+- Add the [Grpc](https://www.nuget.org/packages/Grpc/) NuGet package as a dependency (Project options -> Manage NuGet Packages). 
 
 - To be able to generate code from Protocol Buffer (`.proto`) file definitions, add the [Grpc.Tools](https://www.nuget.org/packages/Grpc.Tools/) NuGet package that contains Protocol Buffers compiler (_protoc_) and the gRPC _protoc_ plugin.
 
@@ -79,23 +80,10 @@ DOCUMENTATION
 - [Helloworld Example][]
 - [RouteGuide Tutorial][]
 
-CONTENTS
---------
-
-- ext:
-  The extension library that wraps C API to be more digestible by C#.
-- Grpc.Auth:
-  gRPC OAuth2/JWT support.
-- Grpc.Core:
-  The main gRPC C# library.
-- Grpc.Examples:
-  API examples for math.proto
-- Grpc.Examples.MathClient:
-  An example client that sends requests to math server.
-- Grpc.Examples.MathServer:
-  An example server that implements a simple math service.
-- Grpc.IntegrationTesting:
-  Cross-language gRPC implementation testing (interop testing).
+PERFORMANCE
+-----------
+
+For best gRPC C# performance, use [.NET Core](https://dotnet.github.io/) and the Server GC mode `"System.GC.Server": true` for your applications.
 
 THE NATIVE DEPENDENCY
 ---------------

From d490a9e7c3f9e1911167058476addf13d244733a Mon Sep 17 00:00:00 2001
From: Alexander Polcyn <apolcyn@google.com>
Date: Wed, 8 Feb 2017 19:31:45 -0800
Subject: [PATCH 50/52] build fixes for ruby on mac

---
 grpc.gemspec                                  | 2 +-
 templates/grpc.gemspec.template               | 2 +-
 tools/distrib/build_ruby_environment_macos.sh | 5 +++--
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/grpc.gemspec b/grpc.gemspec
index 48f7ed6defb..e7844f222c1 100755
--- a/grpc.gemspec
+++ b/grpc.gemspec
@@ -35,7 +35,7 @@ Gem::Specification.new do |s|
   s.add_development_dependency 'logging',            '~> 2.0'
   s.add_development_dependency 'simplecov',          '~> 0.9'
   s.add_development_dependency 'rake',               '~> 10.4'
-  s.add_development_dependency 'rake-compiler',      '~> 0.9'
+  s.add_development_dependency 'rake-compiler',      '~> 1.0'
   s.add_development_dependency 'rake-compiler-dock', '~> 0.5.1'
   s.add_development_dependency 'rspec',              '~> 3.2'
   s.add_development_dependency 'rubocop',            '~> 0.30.0'
diff --git a/templates/grpc.gemspec.template b/templates/grpc.gemspec.template
index 24446a37d60..462ea526140 100644
--- a/templates/grpc.gemspec.template
+++ b/templates/grpc.gemspec.template
@@ -37,7 +37,7 @@
     s.add_development_dependency 'logging',            '~> 2.0'
     s.add_development_dependency 'simplecov',          '~> 0.9'
     s.add_development_dependency 'rake',               '~> 10.4'
-    s.add_development_dependency 'rake-compiler',      '~> 0.9'
+    s.add_development_dependency 'rake-compiler',      '~> 1.0'
     s.add_development_dependency 'rake-compiler-dock', '~> 0.5.1'
     s.add_development_dependency 'rspec',              '~> 3.2'
     s.add_development_dependency 'rubocop',            '~> 0.30.0'
diff --git a/tools/distrib/build_ruby_environment_macos.sh b/tools/distrib/build_ruby_environment_macos.sh
index 64fad7c606a..0ae589cb0b6 100644
--- a/tools/distrib/build_ruby_environment_macos.sh
+++ b/tools/distrib/build_ruby_environment_macos.sh
@@ -34,7 +34,7 @@ rm -rf ~/.rake-compiler
 
 CROSS_RUBY=`mktemp tmpfile.XXXXXXXX`
 
-curl https://raw.githubusercontent.com/rake-compiler/rake-compiler/v0.9.5/tasks/bin/cross-ruby.rake > $CROSS_RUBY
+curl https://raw.githubusercontent.com/rake-compiler/rake-compiler/v1.0.3/tasks/bin/cross-ruby.rake > $CROSS_RUBY
 
 patch $CROSS_RUBY << EOF
 --- cross-ruby.rake	2016-02-05 16:26:53.000000000 -0800
@@ -53,7 +53,8 @@ EOF
 
 MAKE="make -j8"
 
-for v in 2.3.0 2.2.2 2.1.5 2.0.0-p645 ; do
+for v in 2.4.0 2.3.0 2.2.2 2.1.5 2.0.0-p645 ; do
+  ccache -c
   rake -f $CROSS_RUBY cross-ruby VERSION=$v HOST=x86_64-darwin11
 done
 

From 85171f4b04b29c7a99506c3c10f2e4710547b1ce Mon Sep 17 00:00:00 2001
From: Jan Tattermusch <jtattermusch@users.noreply.github.com>
Date: Fri, 10 Feb 2017 11:06:46 -0800
Subject: [PATCH 51/52] remove an extra blank line

---
 src/csharp/README.md | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/csharp/README.md b/src/csharp/README.md
index 5a16b650bc4..34590b91b7c 100644
--- a/src/csharp/README.md
+++ b/src/csharp/README.md
@@ -11,7 +11,6 @@ SUPPORTED PLATFORMS
 - .NET Framework 4.5+ (Windows)
 - Mono 4+ on Linux, Windows and Mac OS X
 
-
 PREREQUISITES
 --------------
 

From 6193f23f94131922e26825044a048b2f83b11003 Mon Sep 17 00:00:00 2001
From: Ken Payson <kpayson@google.com>
Date: Thu, 9 Feb 2017 14:10:03 -0800
Subject: [PATCH 52/52] Use unique namespace for each python protoc test

Using the same namespace results in errors when using the c-extension
version of protobuf due to name collisions
---
 .../protoc_plugin/_split_definitions_test.py  | 35 +++++++++++++++----
 1 file changed, 29 insertions(+), 6 deletions(-)

diff --git a/src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py b/src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py
index bcc01f39787..db938e65459 100644
--- a/src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py
+++ b/src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py
@@ -48,6 +48,8 @@ from grpc_tools import protoc
 from tests.unit.framework.common import test_constants
 
 _MESSAGES_IMPORT = b'import "messages.proto";'
+_SPLIT_NAMESPACE = b'package grpc_protoc_plugin.invocation_testing.split;'
+_COMMON_NAMESPACE = b'package grpc_protoc_plugin.invocation_testing;'
 
 
 @contextlib.contextmanager
@@ -163,7 +165,10 @@ class SameSeparateTest(unittest.TestCase, SeparateTestMixin):
         os.makedirs(self.grpc_python_out_directory)
         same_proto_file = os.path.join(self.proto_directory,
                                        'same_separate.proto')
-        open(same_proto_file, 'wb').write(same_proto_contents)
+        open(same_proto_file, 'wb').write(
+            same_proto_contents.replace(
+                _COMMON_NAMESPACE,
+                b'package grpc_protoc_plugin.invocation_testing.same_separate;'))
         protoc_result = protoc.main([
             '',
             '--proto_path={}'.format(self.proto_directory),
@@ -199,7 +204,11 @@ class SameCommonTest(unittest.TestCase, CommonTestMixin):
         os.makedirs(self.python_out_directory)
         same_proto_file = os.path.join(self.proto_directory,
                                        'same_common.proto')
-        open(same_proto_file, 'wb').write(same_proto_contents)
+        open(same_proto_file, 'wb').write(
+            same_proto_contents.replace(
+                _COMMON_NAMESPACE,
+                b'package grpc_protoc_plugin.invocation_testing.same_common;'))
+
         protoc_result = protoc.main([
             '',
             '--proto_path={}'.format(self.proto_directory),
@@ -240,8 +249,14 @@ class SplitCommonTest(unittest.TestCase, CommonTestMixin):
                                            'split_common_messages.proto')
         open(services_proto_file, 'wb').write(
             services_proto_contents.replace(
-                _MESSAGES_IMPORT, b'import "split_common_messages.proto";'))
-        open(messages_proto_file, 'wb').write(messages_proto_contents)
+                _MESSAGES_IMPORT, b'import "split_common_messages.proto";')
+            .replace(
+                _SPLIT_NAMESPACE,
+                b'package grpc_protoc_plugin.invocation_testing.split_common;'))
+        open(messages_proto_file, 'wb').write(
+            messages_proto_contents.replace(
+                _SPLIT_NAMESPACE,
+                b'package grpc_protoc_plugin.invocation_testing.split_common;'))
         protoc_result = protoc.main([
             '',
             '--proto_path={}'.format(self.proto_directory),
@@ -285,8 +300,16 @@ class SplitSeparateTest(unittest.TestCase, SeparateTestMixin):
                                            'split_separate_messages.proto')
         open(services_proto_file, 'wb').write(
             services_proto_contents.replace(
-                _MESSAGES_IMPORT, b'import "split_separate_messages.proto";'))
-        open(messages_proto_file, 'wb').write(messages_proto_contents)
+                _MESSAGES_IMPORT, b'import "split_separate_messages.proto";')
+            .replace(
+                _SPLIT_NAMESPACE,
+                b'package grpc_protoc_plugin.invocation_testing.split_separate;'
+            ))
+        open(messages_proto_file, 'wb').write(
+            messages_proto_contents.replace(
+                _SPLIT_NAMESPACE,
+                b'package grpc_protoc_plugin.invocation_testing.split_separate;'
+            ))
         protoc_result = protoc.main([
             '',
             '--proto_path={}'.format(self.proto_directory),